mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-14 08:42:08 +10:00
Firebase stub: added additional resume and user to test data, added more tests
This commit is contained in:
@ -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);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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}`)
|
||||||
|
|||||||
@ -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();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user