diff --git a/__mocks__/gatsby-plugin-firebase.js b/__mocks__/gatsby-plugin-firebase.js index 226d95dc..fc423c6f 100644 --- a/__mocks__/gatsby-plugin-firebase.js +++ b/__mocks__/gatsby-plugin-firebase.js @@ -125,17 +125,37 @@ const database = () => { return Promise.resolve(); }; + const update = async (value) => { + console.log('update'); + console.log(value); + if (resumesPath) { + if (value === null) { + delete __resumesDictionary[databaseLocationId]; + } else { + __resumesDictionary[databaseLocationId] = value; + } + } + + return Promise.resolve(); + }; + return { once, set, + update, }; }; + const ServerValue = { + TIMESTAMP: Date.now(), + }; + return { __demoResumeId, __emptyResumeId, __init, ref, + ServerValue, }; }; diff --git a/src/pages/app/__tests__/builder.test.js b/src/pages/app/__tests__/builder.test.js index f09a052b..56fea655 100644 --- a/src/pages/app/__tests__/builder.test.js +++ b/src/pages/app/__tests__/builder.test.js @@ -1,5 +1,12 @@ import React from 'react'; -import { act, cleanup, render, screen } from '@testing-library/react'; +import { + act, + cleanup, + fireEvent, + render, + screen, + waitFor, +} from '@testing-library/react'; import firebaseMock from 'gatsby-plugin-firebase'; @@ -20,31 +27,31 @@ describe('builder', () => { let resumeId = null; let resume = null; - describe('with demo resume', () => { - beforeEach(async () => { - resumeId = firebaseMock.database().__demoResumeId; - resume = ( - await firebaseMock.database().ref(`resumes/${resumeId}`).once('value') - ).val(); + beforeEach(async () => { + resumeId = firebaseMock.database().__demoResumeId; + resume = ( + await firebaseMock.database().ref(`resumes/${resumeId}`).once('value') + ).val(); - render( - - - - - - - - - , - ); + render( + + + + + + + + + , + ); - await act(async () => { - await firebaseMock.auth().signInAnonymously(); - }); + await act(async () => { + await firebaseMock.auth().signInAnonymously(); }); + }); - it('renders first and last name', async () => { + describe('renders', () => { + it('first and last name', async () => { expect( screen.getByLabelText(new RegExp('first name', 'i')), ).toHaveDisplayValue(resume.profile.firstName); @@ -60,37 +67,30 @@ describe('builder', () => { }); }); - describe('with empty resume', () => { - beforeEach(async () => { - resumeId = firebaseMock.database().__emptyResumeId; + describe('updates data', () => { + it('when input value is changed', async () => { + const input = screen.getByLabelText(new RegExp('address line 1', 'i')); + const newInputValue = 'test street 123'; + const spy = jest.spyOn( + firebaseMock.database().ref(`resumes/${resumeId}`), + 'update', + ); + + fireEvent.change(input, { target: { value: newInputValue } }); + + expect(input.value).toBe(newInputValue); + + await waitFor(() => expect(spy).toHaveBeenCalledTimes(1), { + timeout: 4000, + }); + //const promise = spy.mock.results[0].value; + //await spy(); + //expect(spy).toHaveBeenCalledTimes(1); + resume = ( await firebaseMock.database().ref(`resumes/${resumeId}`).once('value') ).val(); - - render( - - - - - - - - - , - ); - - await act(async () => { - await firebaseMock.auth().signInAnonymously(); - }); - }); - - it('renders empty first and last name', async () => { - expect( - screen.getByLabelText(new RegExp('first name', 'i')), - ).not.toHaveDisplayValue(); - expect( - screen.getByLabelText(new RegExp('last name', 'i')), - ).not.toHaveDisplayValue(); + expect(resume.profile.address.line1).toBe(newInputValue); }); }); });