Firebase stub: added additional resume and user to test data, added more tests

This commit is contained in:
gianantoniopini
2021-01-06 16:00:23 +01:00
parent 35c663ebe8
commit c667c31737
4 changed files with 129 additions and 44 deletions

View File

@ -3,6 +3,7 @@ import FirebaseStub from '../gatsby-plugin-firebase';
describe('FirebaseStub', () => { describe('FirebaseStub', () => {
const resumesPath = FirebaseStub.database().resumesPath; const resumesPath = FirebaseStub.database().resumesPath;
const usersPath = FirebaseStub.database().usersPath; const usersPath = FirebaseStub.database().usersPath;
const connectedPath = FirebaseStub.database().connectedPath;
describe('auth', () => { describe('auth', () => {
afterEach(() => { afterEach(() => {
@ -18,14 +19,14 @@ describe('FirebaseStub', () => {
expect(auth1.uuid).toEqual(auth2.uuid); expect(auth1.uuid).toEqual(auth2.uuid);
}); });
it('returns anonymous user when signing in anonymously', async () => { it('returns anonymous user 1 when signing in anonymously', async () => {
const user = await FirebaseStub.auth().signInAnonymously(); const user = await FirebaseStub.auth().signInAnonymously();
expect(user).toBeTruthy(); expect(user).toBeTruthy();
expect(user).toEqual(FirebaseStub.auth().anonymousUser); expect(user).toEqual(FirebaseStub.auth().anonymousUser1);
}); });
it('calls onAuthStateChanged observer with anonymous user when signing in anonymously', async () => { it('calls onAuthStateChanged observer with anonymous user 1 when signing in anonymously', async () => {
let user = null; let user = null;
let error = null; let error = null;
FirebaseStub.auth().onAuthStateChanged( FirebaseStub.auth().onAuthStateChanged(
@ -40,7 +41,7 @@ describe('FirebaseStub', () => {
await FirebaseStub.auth().signInAnonymously(); await FirebaseStub.auth().signInAnonymously();
expect(user).toBeTruthy(); expect(user).toBeTruthy();
expect(user).toEqual(FirebaseStub.auth().anonymousUser); expect(user).toEqual(FirebaseStub.auth().anonymousUser1);
expect(error).toBeNull(); expect(error).toBeNull();
}); });
@ -109,12 +110,24 @@ describe('FirebaseStub', () => {
const resumesDataSnapshot = await resumesRef.once('value'); const resumesDataSnapshot = await resumesRef.once('value');
const resumes = resumesDataSnapshot.val(); const resumes = resumesDataSnapshot.val();
expect(resumes).toBeTruthy(); expect(resumes).toBeTruthy();
expect(Object.keys(resumes).length).toEqual(2); expect(Object.keys(resumes).length).toEqual(3);
const demoStateResume = const demoStateResume1 =
resumes[FirebaseStub.database().demoStateResumeId]; resumes[FirebaseStub.database().demoStateResume1Id];
expect(demoStateResume).toBeTruthy(); expect(demoStateResume1).toBeTruthy();
expect(demoStateResume.id).toEqual( expect(demoStateResume1.id).toEqual(
FirebaseStub.database().demoStateResumeId, FirebaseStub.database().demoStateResume1Id,
);
expect(demoStateResume1.user).toEqual(
FirebaseStub.database().anonymousUser1.uid,
);
const demoStateResume2 =
resumes[FirebaseStub.database().demoStateResume2Id];
expect(demoStateResume2).toBeTruthy();
expect(demoStateResume2.id).toEqual(
FirebaseStub.database().demoStateResume2Id,
);
expect(demoStateResume2.user).toEqual(
FirebaseStub.database().anonymousUser2.uid,
); );
const initialStateResume = const initialStateResume =
resumes[FirebaseStub.database().initialStateResumeId]; resumes[FirebaseStub.database().initialStateResumeId];
@ -122,15 +135,21 @@ describe('FirebaseStub', () => {
expect(initialStateResume.id).toEqual( expect(initialStateResume.id).toEqual(
FirebaseStub.database().initialStateResumeId, FirebaseStub.database().initialStateResumeId,
); );
expect(initialStateResume.user).toEqual(
FirebaseStub.database().anonymousUser1.uid,
);
const usersRef = FirebaseStub.database().ref(usersPath); const usersRef = FirebaseStub.database().ref(usersPath);
const usersDataSnapshot = await usersRef.once('value'); const usersDataSnapshot = await usersRef.once('value');
const users = usersDataSnapshot.val(); const users = usersDataSnapshot.val();
expect(users).toBeTruthy(); expect(users).toBeTruthy();
expect(Object.keys(users).length).toEqual(1); expect(Object.keys(users).length).toEqual(2);
const anonymousUser = users[FirebaseStub.database().anonymousUser.uid]; const anonymousUser1 = users[FirebaseStub.database().anonymousUser1.uid];
expect(anonymousUser).toBeTruthy(); expect(anonymousUser1).toBeTruthy();
expect(anonymousUser).toEqual(FirebaseStub.database().anonymousUser); expect(anonymousUser1).toEqual(FirebaseStub.database().anonymousUser1);
const anonymousUser2 = users[FirebaseStub.database().anonymousUser2.uid];
expect(anonymousUser2).toBeTruthy();
expect(anonymousUser2).toEqual(FirebaseStub.database().anonymousUser2);
}); });
it('retrieves resume if it exists', async () => { it('retrieves resume if it exists', async () => {
@ -138,12 +157,12 @@ describe('FirebaseStub', () => {
const resume = ( const resume = (
await FirebaseStub.database() await FirebaseStub.database()
.ref(`${resumesPath}/${FirebaseStub.database().demoStateResumeId}`) .ref(`${resumesPath}/${FirebaseStub.database().demoStateResume1Id}`)
.once('value') .once('value')
).val(); ).val();
expect(resume).toBeTruthy(); expect(resume).toBeTruthy();
expect(resume.id).toEqual(FirebaseStub.database().demoStateResumeId); expect(resume.id).toEqual(FirebaseStub.database().demoStateResume1Id);
}); });
it('retrieves null if resume does not exist', async () => { it('retrieves null if resume does not exist', async () => {
@ -164,12 +183,12 @@ describe('FirebaseStub', () => {
const user = ( const user = (
await FirebaseStub.database() await FirebaseStub.database()
.ref(`${usersPath}/${FirebaseStub.database().anonymousUser.uid}`) .ref(`${usersPath}/${FirebaseStub.database().anonymousUser1.uid}`)
.once('value') .once('value')
).val(); ).val();
expect(user).toBeTruthy(); expect(user).toBeTruthy();
expect(user).toEqual(FirebaseStub.database().anonymousUser); expect(user).toEqual(FirebaseStub.database().anonymousUser1);
}); });
it('retrieves null if user does not exist', async () => { it('retrieves null if user does not exist', async () => {
@ -184,5 +203,33 @@ describe('FirebaseStub', () => {
expect(user).toBeNull(); expect(user).toBeNull();
}); });
it('triggers callback with true when listening for data changes on the connected reference path', async () => {
let snapshotValue = null;
FirebaseStub.database()
.ref(connectedPath)
.on('value', (snapshot) => {
snapshotValue = snapshot.val();
});
expect(snapshotValue).toBe(true);
});
it('triggers callback with resumes when listening for data changes on the resumes reference path', async () => {
let snapshotValue = null;
const resumesDataSnapshot = await FirebaseStub.database()
.ref(resumesPath)
.once('value');
const resumes = resumesDataSnapshot.val();
FirebaseStub.database()
.ref(resumesPath)
.on('value', (snapshot) => {
snapshotValue = snapshot.val();
});
expect(snapshotValue).toEqual(resumes);
});
}); });
}); });

View File

@ -4,13 +4,20 @@ import { v4 as uuidv4 } from 'uuid';
class Auth { class Auth {
static #instance = undefined; static #instance = undefined;
static anonymousUser = { static anonymousUser1 = {
displayName: 'Anonymous User 1', displayName: 'Anonymous User 1',
email: 'anonymous.user@noemail.com', email: 'anonymous1@noemail.com',
isAnonymous: true, isAnonymous: true,
name: 'Anonymous 1', name: 'Anonymous 1',
uid: 'anonym123', uid: 'anonym123',
}; };
static anonymousUser2 = {
displayName: 'Anonymous User 2',
email: 'anonymous2@noemail.com',
isAnonymous: true,
name: 'Anonymous 2',
uid: 'anonym456',
};
#uuid = ''; #uuid = '';
#onAuthStateChangedObservers = []; #onAuthStateChangedObservers = [];
@ -32,8 +39,12 @@ class Auth {
return this.#onAuthStateChangedObservers; return this.#onAuthStateChangedObservers;
} }
get anonymousUser() { get anonymousUser1() {
return Auth.anonymousUser; return Auth.anonymousUser1;
}
get anonymousUser2() {
return Auth.anonymousUser2;
} }
dispose() { dispose() {
@ -51,11 +62,11 @@ class Auth {
} }
async signInAnonymously() { async signInAnonymously() {
this.#onAuthStateChangedObservers.forEach((observer) => const user = this.anonymousUser1;
observer(this.anonymousUser),
);
return Promise.resolve(this.anonymousUser); this.#onAuthStateChangedObservers.forEach((observer) => observer(user));
return Promise.resolve(user);
} }
} }
@ -64,8 +75,10 @@ class Database {
#uuid = ''; #uuid = '';
#data = {}; #data = {};
#references = {}; #references = {};
#anonymousUser = undefined; #anonymousUser1 = undefined;
#demoStateResumeId = 'demost'; #anonymousUser2 = undefined;
#demoStateResume1Id = 'demo_1';
#demoStateResume2Id = 'demo_2';
#initialStateResumeId = 'initst'; #initialStateResumeId = 'initst';
constructor() { constructor() {
@ -76,9 +89,13 @@ class Database {
Database.#instance = this; Database.#instance = this;
this.#uuid = uuidv4(); this.#uuid = uuidv4();
this.#anonymousUser = { this.#anonymousUser1 = {
uid: Auth.anonymousUser.uid, uid: Auth.anonymousUser1.uid,
isAnonymous: Auth.anonymousUser.isAnonymous, isAnonymous: Auth.anonymousUser1.isAnonymous,
};
this.#anonymousUser2 = {
uid: Auth.anonymousUser2.uid,
isAnonymous: Auth.anonymousUser2.isAnonymous,
}; };
} }
@ -90,12 +107,24 @@ class Database {
return Reference.usersPath; return Reference.usersPath;
} }
get anonymousUser() { get connectedPath() {
return this.#anonymousUser; return Reference.connectedPath;
} }
get demoStateResumeId() { get anonymousUser1() {
return this.#demoStateResumeId; return this.#anonymousUser1;
}
get anonymousUser2() {
return this.#anonymousUser2;
}
get demoStateResume1Id() {
return this.#demoStateResume1Id;
}
get demoStateResume2Id() {
return this.#demoStateResume2Id;
} }
get initialStateResumeId() { get initialStateResumeId() {
@ -116,18 +145,24 @@ class Database {
initializeData() { initializeData() {
const resumes = {}; const resumes = {};
const demoStateResume = Database.readFile('../src/data/demoState.json'); const demoStateResume1 = Database.readFile('../src/data/demoState.json');
let date = new Date('December 15, 2020 11:20:25'); let date = new Date('December 15, 2020 11:20:25');
demoStateResume.updatedAt = date.valueOf(); demoStateResume1.updatedAt = date.valueOf();
date.setMonth(date.getMonth() - 2); date.setMonth(date.getMonth() - 2);
demoStateResume.createdAt = date.valueOf(); demoStateResume1.createdAt = date.valueOf();
resumes[this.demoStateResumeId] = demoStateResume; demoStateResume1.user = this.anonymousUser1.uid;
resumes[this.demoStateResume1Id] = demoStateResume1;
const demoStateResume2 = JSON.parse(JSON.stringify(demoStateResume1));
demoStateResume2.user = this.anonymousUser2.uid;
resumes[this.demoStateResume2Id] = demoStateResume2;
const initialStateResume = Database.readFile( const initialStateResume = Database.readFile(
'../src/data/initialState.json', '../src/data/initialState.json',
); );
initialStateResume.updatedAt = date.valueOf(); initialStateResume.updatedAt = date.valueOf();
initialStateResume.createdAt = date.valueOf(); initialStateResume.createdAt = date.valueOf();
initialStateResume.user = this.anonymousUser1.uid;
resumes[this.initialStateResumeId] = initialStateResume; resumes[this.initialStateResumeId] = initialStateResume;
for (var key in resumes) { for (var key in resumes) {
@ -135,13 +170,13 @@ class Database {
resume.id = key; resume.id = key;
resume.name = `Test Resume ${key}`; resume.name = `Test Resume ${key}`;
resume.user = this.anonymousUser.uid;
} }
this.#data[this.resumesPath] = resumes; this.#data[this.resumesPath] = resumes;
const users = {}; const users = {};
users[this.anonymousUser.uid] = this.anonymousUser; users[this.anonymousUser1.uid] = this.anonymousUser1;
users[this.anonymousUser2.uid] = this.anonymousUser2;
this.#data[this.usersPath] = users; this.#data[this.usersPath] = users;
} }

View File

@ -32,7 +32,7 @@ describe('Builder', () => {
let container = null; let container = null;
beforeEach(async () => { beforeEach(async () => {
resumeId = FirebaseStub.database().demoStateResumeId; resumeId = FirebaseStub.database().demoStateResume1Id;
resume = ( resume = (
await FirebaseStub.database() await FirebaseStub.database()
.ref(`${resumesPath}/${resumeId}`) .ref(`${resumesPath}/${resumeId}`)

View File

@ -19,7 +19,7 @@ beforeEach(() => {
describe('Dashboard', () => { describe('Dashboard', () => {
const resumesPath = FirebaseStub.database().resumesPath; const resumesPath = FirebaseStub.database().resumesPath;
let resumes = null; let resumes = null;
let user = FirebaseStub.database().anonymousUser; let user = FirebaseStub.database().anonymousUser1;
let container = null; let container = null;
beforeEach(async () => { beforeEach(async () => {
@ -31,7 +31,7 @@ describe('Dashboard', () => {
.once('value') .once('value')
).val(); ).val();
expect(resumes).toBeTruthy(); expect(resumes).toBeTruthy();
expect(Object.keys(resumes).length).toEqual(2); expect(Object.keys(resumes).length).toEqual(3);
container = render( container = render(
<SettingsProvider> <SettingsProvider>
@ -66,6 +66,9 @@ describe('Dashboard', () => {
expect( expect(
screen.getByText(new RegExp(Object.values(resumes)[1].name)), screen.getByText(new RegExp(Object.values(resumes)[1].name)),
).toBeInTheDocument(); ).toBeInTheDocument();
expect(
screen.getByText(new RegExp(Object.values(resumes)[2].name)),
).toBeInTheDocument();
}); });
}); });
}); });