diff --git a/client/package-lock.json b/client/package-lock.json index 1298aed..063d9f1 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -403,11 +403,12 @@ "integrity": "sha512-jDKq9K0pOgaMtocg7VCfIQX8jTyBSb+0hjOcj6kXQVCcmnxeBzGPRX2THQyFkyzG8owTBZlHIrJA3H2thDU2LQ==" }, "@auth0/auth0-spa-js": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@auth0/auth0-spa-js/-/auth0-spa-js-1.6.5.tgz", - "integrity": "sha512-pS5jF5DAHXeDssN9cJwOqAbgLYhJaXD2EBgeXkjfB3rrNcd7bYC9rOGckRTqyS2k2A05/N2aaRFnju81AgSDgQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@auth0/auth0-spa-js/-/auth0-spa-js-1.7.0.tgz", + "integrity": "sha512-OAeNUI0bTBdk3cIWJMBLgf4B1DvyPXmbBBDQI7EpGR3pU0/+9d19sDCPC1b9epp6Aa7pnd4OR5u9JIQCc3eSKw==", "requires": { - "browser-tabs-lock": "^1.2.7", + "abortcontroller-polyfill": "^1.4.0", + "browser-tabs-lock": "^1.2.8", "core-js": "^3.6.4", "es-cookie": "^1.3.2", "fast-text-encoding": "^1.0.1", @@ -416,9 +417,9 @@ }, "dependencies": { "core-js": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", - "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" }, "promise-polyfill": { "version": "8.1.3", @@ -1667,6 +1668,11 @@ "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=" }, + "abortcontroller-polyfill": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.4.0.tgz", + "integrity": "sha512-3ZFfCRfDzx3GFjO6RAkYx81lPGpUS20ISxux9gLxuKnqafNcFQo59+IoZqpO2WvQlyc287B62HDnDdNYRmlvWA==" + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", diff --git a/client/package.json b/client/package.json index 922af26..ac92c16 100644 --- a/client/package.json +++ b/client/package.json @@ -24,7 +24,7 @@ "@angular/platform-browser": "~9.0.2", "@angular/platform-browser-dynamic": "~9.0.2", "@angular/router": "~9.0.2", - "@auth0/auth0-spa-js": "^1.6.5", + "@auth0/auth0-spa-js": "^1.7.0", "@types/jspdf": "^1.3.3", "jspdf": "^1.5.3", "rxjs": "~6.5.4", diff --git a/client/src/testing/auth.service.mock.ts b/client/src/testing/auth.service.mock.ts index 376c249..de69ee3 100644 --- a/client/src/testing/auth.service.mock.ts +++ b/client/src/testing/auth.service.mock.ts @@ -1,10 +1,113 @@ import { Injectable } from '@angular/core'; import { AuthService } from 'src/app/authentication/auth.service'; +import { Observable, BehaviorSubject, of } from 'rxjs'; +import { Auth0Client, IdToken, RedirectLoginResult } from '@auth0/auth0-spa-js'; +import { environment } from 'src/environments/environment'; @Injectable() export class MockAuthService extends AuthService { + constructor() { + super(null); + this.auth0Client$ = of(new MockAuth0Client()); + } +} + +export class MockAuth0Client extends Auth0Client { + constructor() { + super({ + domain: environment.AUTH_DOMAIN, + client_id: environment.AUTH_CLIENT_ID, + redirect_uri: environment.BASE_URL, + audience: environment.AUTH_API_DOMAIN, + }); + } + + // Change the value of this property to control how MockAuth0Client + // behaves during testing. + mockAccessToken = 'La la la! I\'m a JSON Web Token!'; + + // See https://auth0.com/docs/api/management/v2#!/Users/get_users + john = { + user_id: 'auth0|507f1f77bcf86cd799439020', + email: 'john.doe@gmail.com', + email_verified: false, + username: 'johndoe', + phone_number: '+199999999999999', + phone_verified: false, + created_at: '', + updated_at: '', + identities: [ + { + connection: 'Initial-Connection', + user_id: '507f1f77bcf86cd799439020', + provider: 'auth0', + isSocial: false + } + ], + picture: '', + name: '', + nickname: 'doe00003', + multifactor: [ + '' + ], + last_ip: '', + last_login: '', + logins_count: 0, + blocked: false, + given_name: '', + family_name: '' + }; + + // See https://github.com/auth0/auth0-spa-js/blob/178b65f30c9b7a76ce762a1b4de1bd3ccfca5e5a/src/global.ts#L282 + johnsIdToken: IdToken = { + __raw: '', + name: this.john.name, + given_name: this.john.given_name, + family_name: this.john.family_name, + nickname: this.john.nickname, + picture: this.john.picture, + email: this.john.email, + email_verified: this.john.email_verified, + phone_number: this.john.phone_number, + phone_number_verified: this.john.phone_verified, + updated_at: this.john.updated_at, + iss: environment.AUTH_DOMAIN, + aud: environment.AUTH_API_DOMAIN, + } + + loginWithPopup() { + return new Promise(() => {}); + } + + getUser() { + return new Promise(() => this.john); + } + + getIdTokenClaims() { + return new Promise(() => this.johnsIdToken) + } + + loginWithRedirect() { + return new Promise(() => {}); + } + + handleRedirectCallback() { + return new Promise(() => { + return {}; + }); + } + + getTokenSilently() { + return new Promise(() => this.mockAccessToken); + } + + getTokenWithPopup() { + return new Promise(() => this.mockAccessToken); + } + + isAuthenticated() { + return new Promise(() => true); + } - constructor() { - super(null); - } + logout() {} }