feat(cart): integrate confirmation modals for item removal in cart component
This commit is contained in:
@@ -14,6 +14,7 @@ import {
|
||||
it,
|
||||
vi
|
||||
} from 'vitest';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
|
||||
import { ConfirmDeleteModalComponent } from '../../shared/components/confirm-delete-modal/confirm-delete-modal.component';
|
||||
import { ConfirmModalComponent } from '../../shared/components/confirm-modal/confirm-modal.component';
|
||||
@@ -134,7 +135,7 @@ describe('ModalService', () => {
|
||||
});
|
||||
|
||||
it('opens the standard confirm modal with default labels', () => {
|
||||
const ref = service.openConfirm({
|
||||
const result$ = service.openConfirm({
|
||||
title: 'Confirmar compra',
|
||||
content: 'Esto confirmara la compra actual.'
|
||||
});
|
||||
@@ -142,7 +143,7 @@ describe('ModalService', () => {
|
||||
const activeModal = service.activeModal();
|
||||
|
||||
expect(activeModal?.component).toBe(ConfirmModalComponent);
|
||||
expect(activeModal?.ref).toBe(ref);
|
||||
expect(result$).toBeDefined();
|
||||
expect(activeModal?.config).toEqual({
|
||||
title: 'Confirmar compra',
|
||||
data: {
|
||||
@@ -157,6 +158,32 @@ describe('ModalService', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('maps the confirm modal close result to true', async () => {
|
||||
const result$ = service.openConfirm({
|
||||
title: 'Confirmar compra',
|
||||
content: 'Esto confirmara la compra actual.'
|
||||
});
|
||||
const activeModal = service.activeModal();
|
||||
const resultPromise = firstValueFrom(result$);
|
||||
|
||||
activeModal?.ref.close(true);
|
||||
|
||||
await expect(resultPromise).resolves.toBe(true);
|
||||
});
|
||||
|
||||
it('maps dismissing a confirm modal to false', async () => {
|
||||
const result$ = service.openConfirmDelete({
|
||||
title: 'Eliminar producto',
|
||||
content: 'Se eliminara el producto.'
|
||||
});
|
||||
const activeModal = service.activeModal();
|
||||
const resultPromise = firstValueFrom(result$);
|
||||
|
||||
activeModal?.ref.dismiss('escape');
|
||||
|
||||
await expect(resultPromise).resolves.toBe(false);
|
||||
});
|
||||
|
||||
it('opens the delete confirm modal preserving modal overrides', () => {
|
||||
service.openConfirmDelete({
|
||||
title: 'Eliminar producto',
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { InjectionToken, Injectable, Type, signal } from '@angular/core';
|
||||
import { Observable, Subject } from 'rxjs';
|
||||
import { Observable, Subject, map } from 'rxjs';
|
||||
import { ConfirmDeleteModalComponent } from '../../shared/components/confirm-delete-modal/confirm-delete-modal.component';
|
||||
import { ConfirmModalComponent } from '../../shared/components/confirm-modal/confirm-modal.component';
|
||||
|
||||
@@ -135,11 +135,23 @@ export class ModalService {
|
||||
return ref;
|
||||
}
|
||||
|
||||
openConfirm(config: ConfirmModalConfig): ModalRef<boolean> {
|
||||
openConfirm(config: ConfirmModalConfig): Observable<boolean> {
|
||||
return this.openConfirmRef(config).afterClosed$.pipe(
|
||||
map((result) => result === true)
|
||||
);
|
||||
}
|
||||
|
||||
openConfirmDelete(config: ConfirmModalConfig): Observable<boolean> {
|
||||
return this.openConfirmDeleteRef(config).afterClosed$.pipe(
|
||||
map((result) => result === true)
|
||||
);
|
||||
}
|
||||
|
||||
openConfirmRef(config: ConfirmModalConfig): ModalRef<boolean> {
|
||||
return this.open(ConfirmModalComponent, this.buildConfirmModalConfig(config));
|
||||
}
|
||||
|
||||
openConfirmDelete(config: ConfirmModalConfig): ModalRef<boolean> {
|
||||
openConfirmDeleteRef(config: ConfirmModalConfig): ModalRef<boolean> {
|
||||
return this.open(
|
||||
ConfirmDeleteModalComponent,
|
||||
this.buildConfirmModalConfig(config)
|
||||
|
||||
Reference in New Issue
Block a user