From 11c39636659ec426a3ad905a0f54de51ebc282b1 Mon Sep 17 00:00:00 2001 From: mansisampat Date: Fri, 25 Oct 2024 14:01:19 +0530 Subject: [PATCH 1/3] Implement Integration test for passwordless email sign-in via firebase-hosting links. --- packages/auth/karma.conf.js | 3 +- .../integration/flows/hosting_link.test.ts | 97 +++++++++++++++++++ 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 packages/auth/test/integration/flows/hosting_link.test.ts diff --git a/packages/auth/karma.conf.js b/packages/auth/karma.conf.js index 1d28c329f55..98a0104b41c 100644 --- a/packages/auth/karma.conf.js +++ b/packages/auth/karma.conf.js @@ -51,7 +51,8 @@ function getTestFiles(argv) { if (argv.prodbackend) { return [ 'test/integration/flows/totp.test.ts', - 'test/integration/flows/password_policy.test.ts' + 'test/integration/flows/password_policy.test.ts', + 'test/integration/flows/hosting_link.test.ts' ]; } return argv.local diff --git a/packages/auth/test/integration/flows/hosting_link.test.ts b/packages/auth/test/integration/flows/hosting_link.test.ts new file mode 100644 index 00000000000..ce7b08599d1 --- /dev/null +++ b/packages/auth/test/integration/flows/hosting_link.test.ts @@ -0,0 +1,97 @@ +import { ActionCodeSettings, Auth, sendSignInLinkToEmail } from '@firebase/auth'; +import { expect, use } from 'chai'; +import { + getTestInstance, + randomEmail +} from '../../helpers/integration/helpers'; +import { getEmulatorUrl } from '../../helpers/integration/settings'; +import chaiAsPromised from 'chai-as-promised'; +import { FirebaseError } from '@firebase/util'; + +use(chaiAsPromised); + +// Assumes mobileLinksConfig.domain is set as "HOSTING_DOMAIN" in the test GCP-project. +describe('Integration test: hosting link validation', () => { + let auth: Auth; + let email: string; + + const AUTHORIZED_CUSTOM_DOMAIN = "localhost/action_code_return"; + const ANDROID_PACKAGE_NAME = "com.google.firebase.test.thin"; + const BASE_SETTINGS: ActionCodeSettings = { + url: 'http://' + AUTHORIZED_CUSTOM_DOMAIN, + handleCodeInApp: true, + android: {packageName: ANDROID_PACKAGE_NAME}, + }; + const VALID_LINK_DOMAIN = "jscore-sandbox.testdomaindonotuse.com"; + const INVALID_LINK_DOMAIN = "invalid.testdomaindonotuse.com"; + const INVALID_LINK_DOMAIN_ERROR = "auth/invalid-hosting-link-domain"; + const TEST_TENANT_ID = 'passpol-tenant-d7hha'; + + beforeEach(function () { + auth = getTestInstance(); + email = randomEmail(); + + if (getEmulatorUrl()) { + this.skip(); + } + }); + + it('allows user to sign in with default firebase_hosting_link', async () => { + // Sends email link to user using default hosting link. + await sendSignInLinkToEmail( + auth, + email, + BASE_SETTINGS + ); + }); + + it('allows user to sign in to a tenant with default firebase_hosting_link', async () => { + auth.tenantId = TEST_TENANT_ID; + // Sends email link to user using default hosting link. + await sendSignInLinkToEmail( + auth, + email, + BASE_SETTINGS + ); + }); + + it('allows user to sign in with custom firebase hosting link', async () => { + // Sends email link to user using custom hosting link. + await sendSignInLinkToEmail( + auth, + email, + { + ...BASE_SETTINGS, + linkDomain: VALID_LINK_DOMAIN + + } + ); + }); + + it('allows user to sign in to a tenant with custom firebase hosting link', async () => { + // Sends email link to user using custom hosting link. + auth.tenantId = TEST_TENANT_ID; + await sendSignInLinkToEmail( + auth, + email, + { + ...BASE_SETTINGS, + linkDomain: VALID_LINK_DOMAIN + + } + ); + }); + + it('sign in with invalid firebase hosting link throws exception', async () => { + // Throws an exception while sening email link to user using invalid hosting link. + await expect(sendSignInLinkToEmail( + auth, + email, + { + ...BASE_SETTINGS, + linkDomain: INVALID_LINK_DOMAIN + + } + )).to.be.rejectedWith(FirebaseError, new RegExp(".*" + INVALID_LINK_DOMAIN_ERROR + ".*")); + }); +}); From be345bb5908779701009888a28078ce4b6d7626d Mon Sep 17 00:00:00 2001 From: mansisampat Date: Fri, 25 Oct 2024 14:04:11 +0530 Subject: [PATCH 2/3] Add license to new test file created' did not match any files --- .../integration/flows/hosting_link.test.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/auth/test/integration/flows/hosting_link.test.ts b/packages/auth/test/integration/flows/hosting_link.test.ts index ce7b08599d1..74d71ae5b69 100644 --- a/packages/auth/test/integration/flows/hosting_link.test.ts +++ b/packages/auth/test/integration/flows/hosting_link.test.ts @@ -1,3 +1,21 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// eslint-disable-next-line import/no-extraneous-dependencies import { ActionCodeSettings, Auth, sendSignInLinkToEmail } from '@firebase/auth'; import { expect, use } from 'chai'; import { From 6c5d07d7ba711fd1eb1e37cc41487fb0ce026ec5 Mon Sep 17 00:00:00 2001 From: mansisampat Date: Fri, 25 Oct 2024 23:03:33 +0530 Subject: [PATCH 3/3] Remove unwanted _ --- packages/auth/test/integration/flows/hosting_link.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/auth/test/integration/flows/hosting_link.test.ts b/packages/auth/test/integration/flows/hosting_link.test.ts index 74d71ae5b69..6d3c0ac3dcd 100644 --- a/packages/auth/test/integration/flows/hosting_link.test.ts +++ b/packages/auth/test/integration/flows/hosting_link.test.ts @@ -54,7 +54,7 @@ describe('Integration test: hosting link validation', () => { } }); - it('allows user to sign in with default firebase_hosting_link', async () => { + it('allows user to sign in with default firebase hosting link', async () => { // Sends email link to user using default hosting link. await sendSignInLinkToEmail( auth, @@ -63,7 +63,7 @@ describe('Integration test: hosting link validation', () => { ); }); - it('allows user to sign in to a tenant with default firebase_hosting_link', async () => { + it('allows user to sign in to a tenant with default firebase hosting link', async () => { auth.tenantId = TEST_TENANT_ID; // Sends email link to user using default hosting link. await sendSignInLinkToEmail(