diff --git a/apps/web/src/app/auth/recover-delete.component.ts b/apps/web/src/app/auth/recover-delete.component.ts index 00b14f9a402..921d96270bf 100644 --- a/apps/web/src/app/auth/recover-delete.component.ts +++ b/apps/web/src/app/auth/recover-delete.component.ts @@ -1,21 +1,37 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore import { Component } from "@angular/core"; -import { FormControl, FormGroup, Validators } from "@angular/forms"; -import { Router } from "@angular/router"; +import { FormControl, FormGroup, ReactiveFormsModule, Validators } from "@angular/forms"; +import { Router, RouterLink } from "@angular/router"; +import { JslibModule } from "@bitwarden/angular/jslib.module"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { DeleteRecoverRequest } from "@bitwarden/common/models/request/delete-recover.request"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { ToastService } from "@bitwarden/components"; +import { + AsyncActionsModule, + ButtonModule, + FormFieldModule, + ToastService, + TypographyModule, +} from "@bitwarden/components"; +import { I18nPipe } from "@bitwarden/ui-common"; // FIXME(https://bitwarden.atlassian.net/browse/CL-764): Migrate to OnPush // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection @Component({ selector: "app-recover-delete", templateUrl: "recover-delete.component.html", - standalone: false, + imports: [ + ReactiveFormsModule, + RouterLink, + JslibModule, + AsyncActionsModule, + ButtonModule, + FormFieldModule, + I18nPipe, + TypographyModule, + ], }) export class RecoverDeleteComponent { protected recoverDeleteForm = new FormGroup({ @@ -29,7 +45,6 @@ export class RecoverDeleteComponent { constructor( private router: Router, private apiService: ApiService, - private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private toastService: ToastService, ) {} diff --git a/apps/web/src/app/auth/recover-two-factor.component.spec.ts b/apps/web/src/app/auth/recover-two-factor.component.spec.ts index c3792cfd3f3..b7a68ff9f07 100644 --- a/apps/web/src/app/auth/recover-two-factor.component.spec.ts +++ b/apps/web/src/app/auth/recover-two-factor.component.spec.ts @@ -1,5 +1,5 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { Router } from "@angular/router"; +import { Router, provideRouter } from "@angular/router"; import { mock, MockProxy } from "jest-mock-extended"; import { @@ -7,69 +7,49 @@ import { LoginSuccessHandlerService, PasswordLoginCredentials, } from "@bitwarden/auth/common"; -import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AuthResult } from "@bitwarden/common/auth/models/domain/auth-result"; import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; import { ToastService } from "@bitwarden/components"; -import { KeyService } from "@bitwarden/key-management"; -import { I18nPipe } from "@bitwarden/ui-common"; import { RecoverTwoFactorComponent } from "./recover-two-factor.component"; describe("RecoverTwoFactorComponent", () => { let component: RecoverTwoFactorComponent; let fixture: ComponentFixture; - - // Mock Services let mockRouter: MockProxy; - let mockApiService: MockProxy; - let mockPlatformUtilsService: MockProxy; let mockI18nService: MockProxy; - let mockKeyService: MockProxy; let mockLoginStrategyService: MockProxy; let mockToastService: MockProxy; - let mockConfigService: MockProxy; let mockLoginSuccessHandlerService: MockProxy; let mockLogService: MockProxy; let mockValidationService: MockProxy; - beforeEach(() => { - mockRouter = mock(); - mockApiService = mock(); - mockPlatformUtilsService = mock(); + beforeEach(async () => { mockI18nService = mock(); - mockKeyService = mock(); mockLoginStrategyService = mock(); mockToastService = mock(); - mockConfigService = mock(); mockLoginSuccessHandlerService = mock(); mockLogService = mock(); mockValidationService = mock(); - TestBed.configureTestingModule({ - declarations: [RecoverTwoFactorComponent], + await TestBed.configureTestingModule({ + imports: [RecoverTwoFactorComponent], providers: [ - { provide: Router, useValue: mockRouter }, - { provide: ApiService, useValue: mockApiService }, - { provide: PlatformUtilsService, mockPlatformUtilsService }, + provideRouter([]), { provide: I18nService, useValue: mockI18nService }, - { provide: KeyService, useValue: mockKeyService }, { provide: LoginStrategyServiceAbstraction, useValue: mockLoginStrategyService }, { provide: ToastService, useValue: mockToastService }, - { provide: ConfigService, useValue: mockConfigService }, { provide: LoginSuccessHandlerService, useValue: mockLoginSuccessHandlerService }, { provide: LogService, useValue: mockLogService }, { provide: ValidationService, useValue: mockValidationService }, ], - imports: [I18nPipe], - // FIXME(PM-18598): Replace unknownElements and unknownProperties with actual imports - errorOnUnknownElements: false, - }); + }).compileComponents(); + + mockRouter = TestBed.inject(Router) as MockProxy; + jest.spyOn(mockRouter, "navigate"); fixture = TestBed.createComponent(RecoverTwoFactorComponent); component = fixture.componentInstance; diff --git a/apps/web/src/app/auth/recover-two-factor.component.ts b/apps/web/src/app/auth/recover-two-factor.component.ts index 20f40b5319a..5d160e4ed91 100644 --- a/apps/web/src/app/auth/recover-two-factor.component.ts +++ b/apps/web/src/app/auth/recover-two-factor.component.ts @@ -1,8 +1,9 @@ import { Component, DestroyRef, OnInit } from "@angular/core"; import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; -import { FormControl, FormGroup, Validators } from "@angular/forms"; -import { Router } from "@angular/router"; +import { FormControl, FormGroup, ReactiveFormsModule, Validators } from "@angular/forms"; +import { Router, RouterLink } from "@angular/router"; +import { JslibModule } from "@bitwarden/angular/jslib.module"; import { LoginStrategyServiceAbstraction, PasswordLoginCredentials, @@ -14,14 +15,32 @@ import { ErrorResponse } from "@bitwarden/common/models/response/error.response" import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; -import { ToastService } from "@bitwarden/components"; +import { + AsyncActionsModule, + ButtonModule, + FormFieldModule, + LinkModule, + ToastService, + TypographyModule, +} from "@bitwarden/components"; +import { I18nPipe } from "@bitwarden/ui-common"; // FIXME(https://bitwarden.atlassian.net/browse/CL-764): Migrate to OnPush // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection @Component({ selector: "app-recover-two-factor", templateUrl: "recover-two-factor.component.html", - standalone: false, + imports: [ + ReactiveFormsModule, + RouterLink, + JslibModule, + AsyncActionsModule, + ButtonModule, + FormFieldModule, + I18nPipe, + LinkModule, + TypographyModule, + ], }) export class RecoverTwoFactorComponent implements OnInit { formGroup = new FormGroup({ diff --git a/apps/web/src/app/auth/verify-email-token.component.ts b/apps/web/src/app/auth/verify-email-token.component.ts index 30bfcf95bbf..fe70f876bc4 100644 --- a/apps/web/src/app/auth/verify-email-token.component.ts +++ b/apps/web/src/app/auth/verify-email-token.component.ts @@ -10,7 +10,6 @@ import { TokenService } from "@bitwarden/common/auth/abstractions/token.service" import { VerifyEmailRequest } from "@bitwarden/common/models/request/verify-email.request"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { ToastService } from "@bitwarden/components"; // FIXME(https://bitwarden.atlassian.net/browse/CL-764): Migrate to OnPush @@ -18,12 +17,10 @@ import { ToastService } from "@bitwarden/components"; @Component({ selector: "app-verify-email-token", templateUrl: "verify-email-token.component.html", - standalone: false, }) export class VerifyEmailTokenComponent implements OnInit { constructor( private router: Router, - private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private route: ActivatedRoute, private apiService: ApiService, diff --git a/apps/web/src/app/auth/verify-recover-delete.component.ts b/apps/web/src/app/auth/verify-recover-delete.component.ts index 06d6096c3de..16968fcd161 100644 --- a/apps/web/src/app/auth/verify-recover-delete.component.ts +++ b/apps/web/src/app/auth/verify-recover-delete.component.ts @@ -1,22 +1,36 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore import { Component, OnInit } from "@angular/core"; -import { FormGroup } from "@angular/forms"; -import { ActivatedRoute, Router } from "@angular/router"; +import { FormGroup, ReactiveFormsModule } from "@angular/forms"; +import { ActivatedRoute, Router, RouterLink } from "@angular/router"; import { first } from "rxjs/operators"; +import { JslibModule } from "@bitwarden/angular/jslib.module"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { VerifyDeleteRecoverRequest } from "@bitwarden/common/models/request/verify-delete-recover.request"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { ToastService } from "@bitwarden/components"; +import { + AsyncActionsModule, + ButtonModule, + CalloutComponent, + ToastService, + TypographyModule, +} from "@bitwarden/components"; // FIXME(https://bitwarden.atlassian.net/browse/CL-764): Migrate to OnPush // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection @Component({ selector: "app-verify-recover-delete", templateUrl: "verify-recover-delete.component.html", - standalone: false, + imports: [ + ReactiveFormsModule, + RouterLink, + JslibModule, + AsyncActionsModule, + ButtonModule, + CalloutComponent, + TypographyModule, + ], }) export class VerifyRecoverDeleteComponent implements OnInit { email: string; @@ -28,7 +42,6 @@ export class VerifyRecoverDeleteComponent implements OnInit { constructor( private router: Router, private apiService: ApiService, - private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private route: ActivatedRoute, private toastService: ToastService, diff --git a/apps/web/src/app/shared/loose-components.module.ts b/apps/web/src/app/shared/loose-components.module.ts index f096ef6a292..ff7a5f02c77 100644 --- a/apps/web/src/app/shared/loose-components.module.ts +++ b/apps/web/src/app/shared/loose-components.module.ts @@ -1,9 +1,5 @@ import { NgModule } from "@angular/core"; -import { RecoverDeleteComponent } from "../auth/recover-delete.component"; -import { RecoverTwoFactorComponent } from "../auth/recover-two-factor.component"; -import { VerifyEmailTokenComponent } from "../auth/verify-email-token.component"; -import { VerifyRecoverDeleteComponent } from "../auth/verify-recover-delete.component"; import { FreeBitwardenFamiliesComponent } from "../billing/members/free-bitwarden-families.component"; import { SponsoredFamiliesComponent } from "../billing/settings/sponsored-families.component"; import { SponsoringOrgRowComponent } from "../billing/settings/sponsoring-org-row.component"; @@ -18,20 +14,10 @@ import { SharedModule } from "./shared.module"; @NgModule({ imports: [SharedModule, HeaderModule, OrganizationBadgeModule, PipesModule], declarations: [ - RecoverDeleteComponent, - RecoverTwoFactorComponent, SponsoredFamiliesComponent, FreeBitwardenFamiliesComponent, SponsoringOrgRowComponent, - VerifyEmailTokenComponent, - VerifyRecoverDeleteComponent, - ], - exports: [ - RecoverDeleteComponent, - RecoverTwoFactorComponent, - SponsoredFamiliesComponent, - VerifyEmailTokenComponent, - VerifyRecoverDeleteComponent, ], + exports: [SponsoredFamiliesComponent], }) export class LooseComponentsModule {}