From 35c663ebe879c29cf7a9e5c3723493d879276c2b Mon Sep 17 00:00:00 2001
From: gianantoniopini <63844628+gianantoniopini@users.noreply.github.com>
Date: Wed, 6 Jan 2021 14:42:50 +0100
Subject: [PATCH] Dashboard test: draft version
---
__mocks__/gatsby-plugin-firebase.js | 44 +++++++++++++-
src/pages/app/__tests__/builder.test.js | 3 -
src/pages/app/__tests__/dashboard.test.js | 71 +++++++++++++++++++++++
src/templates/__tests__/Castform.test.js | 4 +-
4 files changed, 114 insertions(+), 8 deletions(-)
create mode 100644 src/pages/app/__tests__/dashboard.test.js
diff --git a/__mocks__/gatsby-plugin-firebase.js b/__mocks__/gatsby-plugin-firebase.js
index fa530f79..c802752e 100644
--- a/__mocks__/gatsby-plugin-firebase.js
+++ b/__mocks__/gatsby-plugin-firebase.js
@@ -160,11 +160,14 @@ class Database {
class Reference {
static resumesPath = 'resumes';
static usersPath = 'users';
+ static connectedPath = '/.info/connected';
#rootPath = '.';
#path = '';
#uuid = '';
#dataSnapshots = {};
#getDatabaseData = () => null;
+ #orderByChildPath = '';
+ #equalToValue = '';
constructor(path, getDatabaseData) {
if (typeof path === 'undefined' || path === null) {
@@ -232,6 +235,24 @@ class Reference {
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) {
const newDataSnapshot = new DataSnapshot(eventType, this);
const existingDataSnapshot = this.#dataSnapshots[newDataSnapshot.eventType];
@@ -243,6 +264,16 @@ class Reference {
return Promise.resolve(newDataSnapshot);
}
+ orderByChild(path) {
+ this.#orderByChildPath = path;
+ return this;
+ }
+
+ equalTo(value) {
+ this.#equalToValue = value;
+ return this;
+ }
+
async update(value) {
return Promise.resolve(true);
}
@@ -255,8 +286,9 @@ class Reference {
class DataSnapshot {
#eventType = '';
#reference = null;
+ #value = undefined;
- constructor(eventType, reference) {
+ constructor(eventType, reference, value = undefined) {
if (!eventType) {
throw new Error('eventType must be provided.');
} else if (typeof eventType !== 'string') {
@@ -272,15 +304,23 @@ class DataSnapshot {
}
this.#reference = reference;
+
+ this.#value = value;
}
get eventType() {
return this.#eventType;
}
+ get value() {
+ return this.#value;
+ }
+
val() {
if (this.eventType === 'value') {
- return this.#reference.getData();
+ return typeof this.value !== 'undefined'
+ ? this.value
+ : this.#reference.getData();
}
return undefined;
diff --git a/src/pages/app/__tests__/builder.test.js b/src/pages/app/__tests__/builder.test.js
index e8fdc3a6..b53d6f4e 100644
--- a/src/pages/app/__tests__/builder.test.js
+++ b/src/pages/app/__tests__/builder.test.js
@@ -1,7 +1,6 @@
import React from 'react';
import {
act,
- cleanup,
fireEvent,
render,
screen,
@@ -25,8 +24,6 @@ beforeEach(() => {
FirebaseStub.database().initializeData();
});
-afterEach(cleanup);
-
describe('Builder', () => {
const resumesPath = FirebaseStub.database().resumesPath;
let resumeId = null;
diff --git a/src/pages/app/__tests__/dashboard.test.js b/src/pages/app/__tests__/dashboard.test.js
new file mode 100644
index 00000000..dff2b10b
--- /dev/null
+++ b/src/pages/app/__tests__/dashboard.test.js
@@ -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(
+
+
+
+
+
+
+
+
+
+
+
+
+ ,
+ );
+
+ 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();
+ });
+ });
+});
diff --git a/src/templates/__tests__/Castform.test.js b/src/templates/__tests__/Castform.test.js
index b5779be5..57d76764 100644
--- a/src/templates/__tests__/Castform.test.js
+++ b/src/templates/__tests__/Castform.test.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { render, cleanup } from '@testing-library/react';
+import { render } from '@testing-library/react';
import FirebaseStub from 'gatsby-plugin-firebase';
import '../../i18n/index';
@@ -19,8 +19,6 @@ describe('Castform', () => {
).val();
});
- afterEach(cleanup);
-
it('renders correctly', () => {
const { container } = render();