diff --git a/__mocks__/gatsby-plugin-firebase.js b/__mocks__/gatsby-plugin-firebase.js index bc84e9fc..97d9bdf7 100644 --- a/__mocks__/gatsby-plugin-firebase.js +++ b/__mocks__/gatsby-plugin-firebase.js @@ -157,9 +157,12 @@ const database = () => { }; }; -database.ServerValue = { - TIMESTAMP: Date.now(), -}; +database.ServerValue = {}; +Object.defineProperty(database.ServerValue, 'TIMESTAMP', { + get() { + return new Date().getTime(); + }, +}); export default class firebase { static auth = auth; diff --git a/src/pages/app/__tests__/builder.test.js b/src/pages/app/__tests__/builder.test.js index bd548b82..30908682 100644 --- a/src/pages/app/__tests__/builder.test.js +++ b/src/pages/app/__tests__/builder.test.js @@ -78,7 +78,7 @@ describe('builder', () => { await ref.update({ ...resume, - updatedAt: firebaseMock.database().ServerValue.TIMESTAMP, + updatedAt: firebaseMock.database.ServerValue.TIMESTAMP, }); await waitFor(() => diff --git a/src/pages/app/__tests__/mock.test.js b/src/pages/app/__tests__/mock.test.js new file mode 100644 index 00000000..3e7429c9 --- /dev/null +++ b/src/pages/app/__tests__/mock.test.js @@ -0,0 +1,42 @@ +import { cleanup, waitFor } from '@testing-library/react'; + +import firebaseMock from 'gatsby-plugin-firebase'; + +beforeEach(() => { + firebaseMock.database().__init(); +}); + +afterEach(cleanup); + +describe('builder', () => { + let resumeId = null; + let resume = null; + + beforeEach(async () => { + resumeId = firebaseMock.database().__demoResumeId; + resume = ( + await firebaseMock.database().ref(`resumes/${resumeId}`).once('value') + ).val(); + }); + + it('test 1', async () => { + const now = new Date().getTime(); + const newInputValue = 'test street 123'; + resume.profile.address.line1 = newInputValue; + const ref = firebaseMock.database().ref(`resumes/${resumeId}`); + const functionSpy = jest.spyOn(ref, 'update'); + + await ref.update({ + ...resume, + updatedAt: firebaseMock.database.ServerValue.TIMESTAMP, + }); + + await waitFor(() => expect(functionSpy).toHaveBeenCalledTimes(1), { + timeout: 4000, + }); + const functionCallArgument = functionSpy.mock.calls[0][0]; + expect(functionCallArgument.id).toBe(resume.id); + expect(functionCallArgument.profile.address.line1).toBe(newInputValue); + expect(functionCallArgument.updatedAt).toBeGreaterThanOrEqual(now); + }); +});