From 5969818478a0a04432149543ee84aee3e7f9b33c Mon Sep 17 00:00:00 2001 From: ncoronel Date: Tue, 7 Jul 2026 12:51:17 -0300 Subject: [PATCH] feat(login): implement full page reload on successful login and refactor navigation logic --- .../store/pages/login-page/login-page.component.spec.ts | 6 ++++-- .../store/pages/login-page/login-page.component.ts | 9 ++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/app/features/store/pages/login-page/login-page.component.spec.ts b/src/app/features/store/pages/login-page/login-page.component.spec.ts index 5b467e4..f08aaea 100644 --- a/src/app/features/store/pages/login-page/login-page.component.spec.ts +++ b/src/app/features/store/pages/login-page/login-page.component.spec.ts @@ -10,7 +10,7 @@ describe('LoginPageComponent', () => { TestBed.resetTestingModule(); }); - it('submits credentials and navigates to home on success', async () => { + it('submits credentials and redirects to home with a full page reload on success', async () => { const authService = { login: vi.fn().mockReturnValue( of({ @@ -30,6 +30,7 @@ describe('LoginPageComponent', () => { const component = fixture.componentInstance as any; const router = TestBed.inject(Router); const navigateSpy = vi.spyOn(router, 'navigate').mockResolvedValue(true); + const redirectSpy = vi.spyOn(component, 'redirectToHome').mockImplementation(() => undefined); component.form.setValue({ email: 'ada@example.com', @@ -42,7 +43,8 @@ describe('LoginPageComponent', () => { email: 'ada@example.com', password: 'secret123' }); - expect(navigateSpy).toHaveBeenCalledWith(['/']); + expect(redirectSpy).toHaveBeenCalled(); + expect(navigateSpy).not.toHaveBeenCalled(); }); it('surfaces backend login errors', async () => { diff --git a/src/app/features/store/pages/login-page/login-page.component.ts b/src/app/features/store/pages/login-page/login-page.component.ts index 5593950..c664b13 100644 --- a/src/app/features/store/pages/login-page/login-page.component.ts +++ b/src/app/features/store/pages/login-page/login-page.component.ts @@ -1,3 +1,4 @@ +import { DOCUMENT } from '@angular/common'; import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core'; import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; import { Router } from '@angular/router'; @@ -20,6 +21,7 @@ export class LoginPageComponent { private readonly formBuilder = inject(FormBuilder); private readonly router = inject(Router); private readonly authService = inject(AuthService); + private readonly document = inject(DOCUMENT); private readonly submittedState = signal(false); private readonly serverErrorState = signal(null); @@ -51,7 +53,7 @@ export class LoginPageComponent { this.authService.login(this.form.getRawValue()).subscribe({ next: () => { this.isSubmittingState.set(false); - void this.router.navigate(['/']); + this.redirectToHome(); }, error: (error: unknown) => { this.isSubmittingState.set(false); @@ -100,6 +102,11 @@ export class LoginPageComponent { return 'El valor ingresado no es valido.'; } + protected redirectToHome(): void { + const homeUrl = this.router.serializeUrl(this.router.createUrlTree(['/'])); + this.document.location.assign(homeUrl); + } + private resolveErrorMessage(error: unknown): string { const errorPayload = typeof error === 'object' && error !== null && 'error' in error