diff --git a/__mocks__/__tests__/gatsby-plugin-firebase/auth.signInAnonymously.test.js b/__mocks__/__tests__/gatsby-plugin-firebase/auth.signInAnonymously.test.js new file mode 100644 index 00000000..d159d44e --- /dev/null +++ b/__mocks__/__tests__/gatsby-plugin-firebase/auth.signInAnonymously.test.js @@ -0,0 +1,35 @@ +import FirebaseStub, { AuthConstants } from '../../gatsby-plugin-firebase'; + +test('sets current user to anonymous user 1', async () => { + await FirebaseStub.auth().signInAnonymously(); + + const { currentUser } = FirebaseStub.auth(); + expect(currentUser).toBeTruthy(); + expect(currentUser.uid).toEqual(AuthConstants.anonymousUser1.uid); +}); + +test('calls onAuthStateChanged observer with anonymous user 1', async () => { + let user = null; + let error = null; + FirebaseStub.auth().onAuthStateChanged( + (_user) => { + user = _user; + }, + (_error) => { + error = _error; + }, + ); + + await FirebaseStub.auth().signInAnonymously(); + + expect(user).toBeTruthy(); + expect(user.uid).toEqual(AuthConstants.anonymousUser1.uid); + expect(error).toBeNull(); +}); + +test('returns anonymous user 1', async () => { + const user = await FirebaseStub.auth().signInAnonymously(); + + expect(user).toBeTruthy(); + expect(user.uid).toEqual(AuthConstants.anonymousUser1.uid); +}); diff --git a/__mocks__/__tests__/gatsby-plugin-firebase/auth.signInWithPopup.test.js b/__mocks__/__tests__/gatsby-plugin-firebase/auth.signInWithPopup.test.js new file mode 100644 index 00000000..e20cd1ca --- /dev/null +++ b/__mocks__/__tests__/gatsby-plugin-firebase/auth.signInWithPopup.test.js @@ -0,0 +1,54 @@ +import FirebaseStub, { AuthConstants } from '../../gatsby-plugin-firebase'; + +describe('with Google auth provider', () => { + test('sets current user to Google user 3', async () => { + await FirebaseStub.auth().signInWithPopup( + new FirebaseStub.auth.GoogleAuthProvider(), + ); + + const { currentUser } = FirebaseStub.auth(); + expect(currentUser).toBeTruthy(); + expect(currentUser.uid).toEqual(AuthConstants.googleUser3.uid); + }); + + test('sets current user provider data', async () => { + const provider = new FirebaseStub.auth.GoogleAuthProvider(); + await FirebaseStub.auth().signInWithPopup(provider); + + const { currentUser } = FirebaseStub.auth(); + expect(currentUser).toBeTruthy(); + expect(currentUser.providerData).toBeTruthy(); + expect(currentUser.providerData).toHaveLength(1); + expect(currentUser.providerData[0].providerId).toEqual(provider.providerId); + }); + + test('calls onAuthStateChanged observer with Google user 3', async () => { + let user = null; + let error = null; + FirebaseStub.auth().onAuthStateChanged( + (_user) => { + user = _user; + }, + (_error) => { + error = _error; + }, + ); + + await FirebaseStub.auth().signInWithPopup( + new FirebaseStub.auth.GoogleAuthProvider(), + ); + + expect(user).toBeTruthy(); + expect(user.uid).toEqual(AuthConstants.googleUser3.uid); + expect(error).toBeNull(); + }); + + test('returns Google user 3', async () => { + const user = await FirebaseStub.auth().signInWithPopup( + new FirebaseStub.auth.GoogleAuthProvider(), + ); + + expect(user).toBeTruthy(); + expect(user.uid).toEqual(AuthConstants.googleUser3.uid); + }); +}); diff --git a/__mocks__/__tests__/gatsby-plugin-firebase/auth.signOut.test.js b/__mocks__/__tests__/gatsby-plugin-firebase/auth.signOut.test.js new file mode 100644 index 00000000..06bd830b --- /dev/null +++ b/__mocks__/__tests__/gatsby-plugin-firebase/auth.signOut.test.js @@ -0,0 +1,29 @@ +import FirebaseStub from '../../gatsby-plugin-firebase'; + +test('sets current user to null', async () => { + await FirebaseStub.auth().signInAnonymously(); + + await FirebaseStub.auth().signOut(); + + const { currentUser } = FirebaseStub.auth(); + expect(currentUser).toBeNull(); +}); + +test('calls onAuthStateChanged observer with null', async () => { + let user = null; + let error = null; + FirebaseStub.auth().onAuthStateChanged( + (_user) => { + user = _user; + }, + (_error) => { + error = _error; + }, + ); + await FirebaseStub.auth().signInAnonymously(); + + await FirebaseStub.auth().signOut(); + + expect(user).toBeNull(); + expect(error).toBeNull(); +}); diff --git a/__mocks__/__tests__/gatsby-plugin-firebase/auth.test.js b/__mocks__/__tests__/gatsby-plugin-firebase/auth.test.js index ca18050d..2ffd0aa3 100644 --- a/__mocks__/__tests__/gatsby-plugin-firebase/auth.test.js +++ b/__mocks__/__tests__/gatsby-plugin-firebase/auth.test.js @@ -1,4 +1,4 @@ -import FirebaseStub, { AuthConstants } from '../../gatsby-plugin-firebase'; +import FirebaseStub from '../../gatsby-plugin-firebase'; test('reuses existing Auth instance', () => { const auth1 = FirebaseStub.auth(); @@ -9,32 +9,6 @@ test('reuses existing Auth instance', () => { expect(auth1.uuid).toEqual(auth2.uuid); }); -test('returns anonymous user 1 when signing in anonymously', async () => { - const user = await FirebaseStub.auth().signInAnonymously(); - - expect(user).toBeTruthy(); - expect(user.uid).toEqual(AuthConstants.anonymousUser1.uid); -}); - -test('calls onAuthStateChanged observer with anonymous user 1 when signing in anonymously', async () => { - let user = null; - let error = null; - FirebaseStub.auth().onAuthStateChanged( - (_user) => { - user = _user; - }, - (_error) => { - error = _error; - }, - ); - - await FirebaseStub.auth().signInAnonymously(); - - expect(user).toBeTruthy(); - expect(user.uid).toEqual(AuthConstants.anonymousUser1.uid); - expect(error).toBeNull(); -}); - test('onAuthStateChanged unsubscribe removes observer', () => { const observer = () => {}; const unsubscribe = FirebaseStub.auth().onAuthStateChanged(observer); @@ -49,3 +23,13 @@ test('onAuthStateChanged unsubscribe removes observer', () => { FirebaseStub.auth().onAuthStateChangedObservers.indexOf(observer), ).not.toBeGreaterThanOrEqual(0); }); + +test('current user delete calls signOut', async () => { + const mockSignOut = jest.spyOn(FirebaseStub.auth(), 'signOut'); + await FirebaseStub.auth().signInAnonymously(); + const { currentUser } = FirebaseStub.auth(); + + await currentUser.delete(); + + expect(mockSignOut).toHaveBeenCalledTimes(1); +}); diff --git a/__mocks__/gatsby-plugin-firebase/auth/auth.js b/__mocks__/gatsby-plugin-firebase/auth/auth.js index b8217a01..b0c123ea 100644 --- a/__mocks__/gatsby-plugin-firebase/auth/auth.js +++ b/__mocks__/gatsby-plugin-firebase/auth/auth.js @@ -60,7 +60,7 @@ class Auth { user.providerId, user.uid, user.isAnonymous, - this.signOut, + this.signOut.bind(this), ); await delay(Constants.defaultDelayInMilliseconds); @@ -98,7 +98,7 @@ class Auth { user.providerId, user.uid, user.isAnonymous, - this.signOut, + this.signOut.bind(this), ); await delay(Constants.defaultDelayInMilliseconds);