From e7943257875b2daeb641f57db0fa8cc37cfe6342 Mon Sep 17 00:00:00 2001 From: gianantoniopini <63844628+gianantoniopini@users.noreply.github.com> Date: Tue, 11 May 2021 16:42:36 +0200 Subject: [PATCH] FirebaseStub: added auth User class --- .../gatsby-plugin-firebase/auth.test.js | 4 +- __mocks__/gatsby-plugin-firebase/auth/auth.js | 20 ++++++- __mocks__/gatsby-plugin-firebase/auth/user.js | 60 +++++++++++++++++++ .../gatsby-plugin-firebase/constants/auth.js | 2 - 4 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 __mocks__/gatsby-plugin-firebase/auth/user.js diff --git a/__mocks__/__tests__/gatsby-plugin-firebase/auth.test.js b/__mocks__/__tests__/gatsby-plugin-firebase/auth.test.js index d70a5c1d..ca18050d 100644 --- a/__mocks__/__tests__/gatsby-plugin-firebase/auth.test.js +++ b/__mocks__/__tests__/gatsby-plugin-firebase/auth.test.js @@ -13,7 +13,7 @@ test('returns anonymous user 1 when signing in anonymously', async () => { const user = await FirebaseStub.auth().signInAnonymously(); expect(user).toBeTruthy(); - expect(user).toEqual(AuthConstants.anonymousUser1); + expect(user.uid).toEqual(AuthConstants.anonymousUser1.uid); }); test('calls onAuthStateChanged observer with anonymous user 1 when signing in anonymously', async () => { @@ -31,7 +31,7 @@ test('calls onAuthStateChanged observer with anonymous user 1 when signing in an await FirebaseStub.auth().signInAnonymously(); expect(user).toBeTruthy(); - expect(user).toEqual(AuthConstants.anonymousUser1); + expect(user.uid).toEqual(AuthConstants.anonymousUser1.uid); expect(error).toBeNull(); }); diff --git a/__mocks__/gatsby-plugin-firebase/auth/auth.js b/__mocks__/gatsby-plugin-firebase/auth/auth.js index 116ea452..cc5eeb0a 100644 --- a/__mocks__/gatsby-plugin-firebase/auth/auth.js +++ b/__mocks__/gatsby-plugin-firebase/auth/auth.js @@ -2,6 +2,7 @@ import { v4 as uuidv4 } from 'uuid'; import Constants from '../constants/auth'; +import User from './user'; import { delay } from '../../../src/utils/index'; const singleton = Symbol(''); @@ -14,6 +15,7 @@ class Auth { } this._uuid = uuidv4(); + this._currentUser = null; this._onAuthStateChangedObservers = []; } @@ -25,6 +27,10 @@ class Auth { return this[singleton]; } + get currentUser() { + return this._currentUser; + } + get uuid() { return this._uuid; } @@ -46,11 +52,21 @@ class Auth { async signInAnonymously() { const user = Constants.anonymousUser1; + this._currentUser = new User( + user.displayName, + user.email, + user.isAnonymous, + user.uid, + async () => {}, + ); + await delay(Constants.defaultDelayInMilliseconds); - this.onAuthStateChangedObservers.forEach((observer) => observer(user)); + this.onAuthStateChangedObservers.forEach((observer) => + observer(this._currentUser), + ); - return user; + return this._currentUser; } } diff --git a/__mocks__/gatsby-plugin-firebase/auth/user.js b/__mocks__/gatsby-plugin-firebase/auth/user.js new file mode 100644 index 00000000..33f43845 --- /dev/null +++ b/__mocks__/gatsby-plugin-firebase/auth/user.js @@ -0,0 +1,60 @@ +/* eslint-disable no-underscore-dangle */ +import Constants from '../constants/auth'; +import { delay } from '../../../src/utils/index'; + +class User { + /** + * Creates a new user. + * + * @param {string|null} displayName Display name. + * @param {string|null} email Email. + * @param {boolean} isAnonymous Is anonymous. + * @param {string} uid The user's unique ID. + * @param {function():Promise} deleteUser Delete user callback. + */ + constructor(displayName, email, isAnonymous, uid, deleteUser) { + if (!uid) { + throw new Error('uid must be provided.'); + } else if (typeof uid !== 'string') { + throw new Error('uid should be a string.'); + } else { + this._uid = uid; + } + + if (!deleteUser) { + throw new Error('deleteUser must be provided.'); + } else if (typeof deleteUser !== 'function') { + throw new Error('deleteUser should be a function.'); + } else { + this._deleteUser = deleteUser; + } + + this._displayName = displayName; + this._email = email; + this._isAnonymous = isAnonymous; + } + + get displayName() { + return this._displayName; + } + + get email() { + return this._email; + } + + get isAnonymous() { + return this._isAnonymous; + } + + get uid() { + return this._uid; + } + + async delete() { + await delay(Constants.defaultDelayInMilliseconds); + + await this._deleteUser(); + } +} + +export default User; diff --git a/__mocks__/gatsby-plugin-firebase/constants/auth.js b/__mocks__/gatsby-plugin-firebase/constants/auth.js index 13f8fcc4..685fba3f 100644 --- a/__mocks__/gatsby-plugin-firebase/constants/auth.js +++ b/__mocks__/gatsby-plugin-firebase/constants/auth.js @@ -2,7 +2,6 @@ const anonymousUser1 = { displayName: 'Anonymous User 1', email: 'anonymous1@noemail.com', isAnonymous: true, - name: 'Anonymous 1', uid: 'anonym123', }; @@ -10,7 +9,6 @@ const anonymousUser2 = { displayName: 'Anonymous User 2', email: 'anonymous2@noemail.com', isAnonymous: true, - name: 'Anonymous 2', uid: 'anonym456', };