Dashboard test: draft version

This commit is contained in:
gianantoniopini
2021-01-06 14:42:50 +01:00
parent 854020481c
commit 35c663ebe8
4 changed files with 114 additions and 8 deletions

View File

@ -160,11 +160,14 @@ class Database {
class Reference { class Reference {
static resumesPath = 'resumes'; static resumesPath = 'resumes';
static usersPath = 'users'; static usersPath = 'users';
static connectedPath = '/.info/connected';
#rootPath = '.'; #rootPath = '.';
#path = ''; #path = '';
#uuid = ''; #uuid = '';
#dataSnapshots = {}; #dataSnapshots = {};
#getDatabaseData = () => null; #getDatabaseData = () => null;
#orderByChildPath = '';
#equalToValue = '';
constructor(path, getDatabaseData) { constructor(path, getDatabaseData) {
if (typeof path === 'undefined' || path === null) { if (typeof path === 'undefined' || path === null) {
@ -232,6 +235,24 @@ class Reference {
return null; return null;
} }
off() {}
on(eventType, callback) {
if (eventType !== 'value') {
return;
}
let snapshot = new DataSnapshot(eventType, this, null);
if (this.#path === Reference.connectedPath) {
snapshot = new DataSnapshot(eventType, this, true);
} else if (this.#path === Reference.resumesPath) {
snapshot = new DataSnapshot(eventType, this);
}
callback(snapshot);
}
async once(eventType) { async once(eventType) {
const newDataSnapshot = new DataSnapshot(eventType, this); const newDataSnapshot = new DataSnapshot(eventType, this);
const existingDataSnapshot = this.#dataSnapshots[newDataSnapshot.eventType]; const existingDataSnapshot = this.#dataSnapshots[newDataSnapshot.eventType];
@ -243,6 +264,16 @@ class Reference {
return Promise.resolve(newDataSnapshot); return Promise.resolve(newDataSnapshot);
} }
orderByChild(path) {
this.#orderByChildPath = path;
return this;
}
equalTo(value) {
this.#equalToValue = value;
return this;
}
async update(value) { async update(value) {
return Promise.resolve(true); return Promise.resolve(true);
} }
@ -255,8 +286,9 @@ class Reference {
class DataSnapshot { class DataSnapshot {
#eventType = ''; #eventType = '';
#reference = null; #reference = null;
#value = undefined;
constructor(eventType, reference) { constructor(eventType, reference, value = undefined) {
if (!eventType) { if (!eventType) {
throw new Error('eventType must be provided.'); throw new Error('eventType must be provided.');
} else if (typeof eventType !== 'string') { } else if (typeof eventType !== 'string') {
@ -272,15 +304,23 @@ class DataSnapshot {
} }
this.#reference = reference; this.#reference = reference;
this.#value = value;
} }
get eventType() { get eventType() {
return this.#eventType; return this.#eventType;
} }
get value() {
return this.#value;
}
val() { val() {
if (this.eventType === 'value') { if (this.eventType === 'value') {
return this.#reference.getData(); return typeof this.value !== 'undefined'
? this.value
: this.#reference.getData();
} }
return undefined; return undefined;

View File

@ -1,7 +1,6 @@
import React from 'react'; import React from 'react';
import { import {
act, act,
cleanup,
fireEvent, fireEvent,
render, render,
screen, screen,
@ -25,8 +24,6 @@ beforeEach(() => {
FirebaseStub.database().initializeData(); FirebaseStub.database().initializeData();
}); });
afterEach(cleanup);
describe('Builder', () => { describe('Builder', () => {
const resumesPath = FirebaseStub.database().resumesPath; const resumesPath = FirebaseStub.database().resumesPath;
let resumeId = null; let resumeId = null;

View File

@ -0,0 +1,71 @@
import React from 'react';
import { act, render, screen } from '@testing-library/react';
import FirebaseStub from 'gatsby-plugin-firebase';
import '../../../i18n/index';
import { SettingsProvider } from '../../../contexts/SettingsContext';
import { ModalProvider } from '../../../contexts/ModalContext';
import { UserProvider } from '../../../contexts/UserContext';
import { DatabaseProvider } from '../../../contexts/DatabaseContext';
import { ResumeProvider } from '../../../contexts/ResumeContext';
import { StorageProvider } from '../../../contexts/StorageContext';
import Dashboard from '../dashboard';
beforeEach(() => {
FirebaseStub.database().initializeData();
});
describe('Dashboard', () => {
const resumesPath = FirebaseStub.database().resumesPath;
let resumes = null;
let user = FirebaseStub.database().anonymousUser;
let container = null;
beforeEach(async () => {
resumes = (
await FirebaseStub.database()
.ref(resumesPath)
.orderByChild('user')
.equalTo(user.uid)
.once('value')
).val();
expect(resumes).toBeTruthy();
expect(Object.keys(resumes).length).toEqual(2);
container = render(
<SettingsProvider>
<ModalProvider>
<UserProvider>
<DatabaseProvider>
<ResumeProvider>
<StorageProvider>
<Dashboard user={user} />
</StorageProvider>
</ResumeProvider>
</DatabaseProvider>
</UserProvider>
</ModalProvider>
</SettingsProvider>,
);
await act(async () => {
await FirebaseStub.auth().signInAnonymously();
});
});
describe('renders', () => {
it('create resume', async () => {
expect(screen.getByText(new RegExp('Create Resume'))).toBeInTheDocument();
});
it('preview of user resumes', async () => {
expect(
screen.getByText(new RegExp(Object.values(resumes)[0].name)),
).toBeInTheDocument();
expect(
screen.getByText(new RegExp(Object.values(resumes)[1].name)),
).toBeInTheDocument();
});
});
});

View File

@ -1,5 +1,5 @@
import React from 'react'; import React from 'react';
import { render, cleanup } from '@testing-library/react'; import { render } from '@testing-library/react';
import FirebaseStub from 'gatsby-plugin-firebase'; import FirebaseStub from 'gatsby-plugin-firebase';
import '../../i18n/index'; import '../../i18n/index';
@ -19,8 +19,6 @@ describe('Castform', () => {
).val(); ).val();
}); });
afterEach(cleanup);
it('renders correctly', () => { it('renders correctly', () => {
const { container } = render(<Castform data={resume} />); const { container } = render(<Castform data={resume} />);