From ee83e7ab32ede84041f2b845e088ff4c94902a4f Mon Sep 17 00:00:00 2001 From: ncoronel Date: Thu, 2 Jul 2026 12:19:18 -0300 Subject: [PATCH] feat(modal): refactor confirm delete modal handling and improve test coverage --- .../reutilizables-test-page.component.spec.ts | 56 ++++++++++++++++++- .../reutilizables-test-page.component.ts | 15 +++-- 2 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/app/features/componentes-test/pages/reutilizables-test-page/reutilizables-test-page.component.spec.ts b/src/app/features/componentes-test/pages/reutilizables-test-page/reutilizables-test-page.component.spec.ts index 793a80c..5fc1474 100644 --- a/src/app/features/componentes-test/pages/reutilizables-test-page/reutilizables-test-page.component.spec.ts +++ b/src/app/features/componentes-test/pages/reutilizables-test-page/reutilizables-test-page.component.spec.ts @@ -186,9 +186,61 @@ describe('ReutilizablesTestPageComponent', () => { ).toContain('Todavia no se abrio ningun modal.'); confirmButton.click(); + fixture.detectChanges(); deleteButton.click(); + fixture.detectChanges(); - expect(modalServiceStub.openConfirm).toHaveBeenCalled(); - expect(modalServiceStub.openConfirmDelete).toHaveBeenCalled(); + expect(modalServiceStub.openConfirm).toHaveBeenCalledWith({ + title: 'Confirmar accion', + content: 'Caso base para verificar apertura, cierre y devolucion de resultado.', + confirmLabel: 'Confirmar' + }); + expect(modalServiceStub.openConfirmDelete).toHaveBeenCalledWith({ + title: 'Eliminar producto', + content: + 'Esta accion eliminara el producto del catalogo. Podras volver a crearlo manualmente.', + confirmLabel: 'Eliminar' + }); + expect( + element.querySelector('[data-testid="modal-last-result"]')?.textContent + ).toContain('Resultado: false'); + }); + + it('updates the visible result when the confirm modal resolves to true', async () => { + const modalServiceStub = createModalServiceStub(); + await TestBed.configureTestingModule({ + imports: [ReutilizablesTestPageComponent], + providers: [ + { + provide: TenantService, + useValue: createTenantServiceStub(tenant) + }, + { + provide: ToastService, + useValue: createToastServiceStub() + }, + { + provide: ModalService, + useValue: modalServiceStub + } + ] + }).compileComponents(); + + const fixture = TestBed.createComponent(ReutilizablesTestPageComponent); + fixture.detectChanges(); + + const element = fixture.nativeElement as HTMLElement; + const confirmButton = Array.from( + element.querySelectorAll('.button-group app-button button') + ).find((button) => + button.textContent?.includes('Abrir confirm modal') + ) as HTMLButtonElement; + + confirmButton.click(); + fixture.detectChanges(); + + expect( + element.querySelector('[data-testid="modal-last-result"]')?.textContent + ).toContain('Resultado: true'); }); }); diff --git a/src/app/features/componentes-test/pages/reutilizables-test-page/reutilizables-test-page.component.ts b/src/app/features/componentes-test/pages/reutilizables-test-page/reutilizables-test-page.component.ts index 3ea52d4..a2e6448 100644 --- a/src/app/features/componentes-test/pages/reutilizables-test-page/reutilizables-test-page.component.ts +++ b/src/app/features/componentes-test/pages/reutilizables-test-page/reutilizables-test-page.component.ts @@ -198,14 +198,11 @@ export class ReutilizablesTestPageComponent { } protected openConfirmDeleteModal(): void { - this.modalService.openConfirmDelete({ + this.openConfirmDelete({ title: 'Eliminar producto', content: 'Esta accion eliminara el producto del catalogo. Podras volver a crearlo manualmente.', - confirmLabel: 'Eliminar', - cancelLabel: 'Conservar' - }).subscribe((confirmed) => { - this.lastModalResult = `Resultado: ${confirmed}`; + confirmLabel: 'Eliminar' }); } @@ -234,4 +231,12 @@ export class ReutilizablesTestPageComponent { this.lastModalResult = `Resultado: ${confirmed}`; }); } + + private openConfirmDelete( + config: Parameters[0] + ): void { + this.modalService.openConfirmDelete(config).subscribe((confirmed) => { + this.lastModalResult = `Resultado: ${confirmed}`; + }); + } }