diff --git a/libs/angular/src/auth/functions/unauth-ui-refresh-redirect.spec.ts b/libs/angular/src/auth/functions/unauth-ui-refresh-redirect.spec.ts index 5fc904a5b9..6a19f1ace7 100644 --- a/libs/angular/src/auth/functions/unauth-ui-refresh-redirect.spec.ts +++ b/libs/angular/src/auth/functions/unauth-ui-refresh-redirect.spec.ts @@ -1,5 +1,5 @@ import { TestBed } from "@angular/core/testing"; -import { Router, UrlTree } from "@angular/router"; +import { Navigation, Router, UrlTree } from "@angular/router"; import { mock, MockProxy } from "jest-mock-extended"; import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; @@ -37,19 +37,29 @@ describe("unauthUiRefreshRedirect", () => { expect(router.parseUrl).not.toHaveBeenCalled(); }); - it("returns UrlTree when UnauthenticatedExtensionUIRefresh flag is enabled", async () => { - const mockUrlTree = mock(); + it("returns UrlTree when UnauthenticatedExtensionUIRefresh flag is enabled and preserves query params", async () => { configService.getFeatureFlag.mockResolvedValue(true); - router.parseUrl.mockReturnValue(mockUrlTree); - const result = await TestBed.runInInjectionContext(() => - unauthUiRefreshRedirect("/redirect")(), - ); + const queryParams = { test: "test" }; + + const navigation: Navigation = { + extras: { + queryParams: queryParams, + }, + id: 0, + initialUrl: new UrlTree(), + extractedUrl: new UrlTree(), + trigger: "imperative", + previousNavigation: undefined, + }; + + router.getCurrentNavigation.mockReturnValue(navigation); + + await TestBed.runInInjectionContext(() => unauthUiRefreshRedirect("/redirect")()); - expect(result).toBe(mockUrlTree); expect(configService.getFeatureFlag).toHaveBeenCalledWith( FeatureFlag.UnauthenticatedExtensionUIRefresh, ); - expect(router.parseUrl).toHaveBeenCalledWith("/redirect"); + expect(router.createUrlTree).toHaveBeenCalledWith(["/redirect"], { queryParams }); }); }); diff --git a/libs/angular/src/auth/functions/unauth-ui-refresh-redirect.ts b/libs/angular/src/auth/functions/unauth-ui-refresh-redirect.ts index 22ed23273b..a54bad1147 100644 --- a/libs/angular/src/auth/functions/unauth-ui-refresh-redirect.ts +++ b/libs/angular/src/auth/functions/unauth-ui-refresh-redirect.ts @@ -16,7 +16,12 @@ export function unauthUiRefreshRedirect(redirectUrl: string): () => Promise Promise { const configService = inject(ConfigService); const router = inject(Router); + const shouldRedirect = await configService.getFeatureFlag(FeatureFlag.ExtensionRefresh); if (shouldRedirect) { - return router.parseUrl(redirectUrl); + const currentNavigation = router.getCurrentNavigation(); + const queryParams = currentNavigation?.extras?.queryParams || {}; + + // Preserve query params when redirecting as it is likely that the refreshed component + // will be consuming the same query params. + return router.createUrlTree([redirectUrl], { queryParams }); } else { return true; }