import { ComponentFixture, TestBed } from '@angular/core/testing'; import { CaseDetailService } from '../case-detail.service'; import { CaseDetailActions } from '../case-detail.types'; import { CaseActions } from './case-actions'; describe('CaseActions', () => { let fixture: ComponentFixture; function render(actions: CaseDetailActions): HTMLElement { fixture = TestBed.createComponent(CaseActions); fixture.componentRef.setInput('actions', actions); fixture.detectChanges(); return fixture.nativeElement as HTMLElement; } beforeEach(async () => { await TestBed.configureTestingModule({ imports: [CaseActions], providers: [{ provide: CaseDetailService, useValue: { recordAssessment: () => { throw new Error('not stubbed'); } } }], }).compileComponents(); }); const legacyActions: CaseDetailActions = { editApplicantDetails: { mode: 'writeThrough', href: '/api/worklist/legacy/1001/details' }, recordAssessment: { mode: 'redirect', href: '/legacy/aanvraag/1001/beoordeling' }, takeOwnership: { mode: 'transition', href: '/api/worklist/legacy/1001/take-ownership' }, }; const ownedActions: CaseDetailActions = { editApplicantDetails: { mode: 'owned', href: '/api/worklist/owned/00000000-0000-0000-0000-000000000002/details' }, recordAssessment: { mode: 'owned', href: '/api/worklist/owned/00000000-0000-0000-0000-000000000002/assessment' }, releaseOwnership: { mode: 'transition', href: '/api/worklist/owned/00000000-0000-0000-0000-000000000002/ownership' }, }; it('given a legacy-origin case, renders record-assessment as a link, shows take-ownership, hides release-ownership', () => { const el = render(legacyActions); const link = el.querySelector('[data-testid="record-assessment-link"]'); expect(link).toBeTruthy(); expect(link!.getAttribute('href')).toBe('/legacy/aanvraag/1001/beoordeling'); expect(el.querySelector('[data-testid="record-assessment-form"]')).toBeFalsy(); expect(el.querySelector('[data-testid="take-ownership-button"]')).toBeTruthy(); expect(el.querySelector('[data-testid="release-ownership-button"]')).toBeFalsy(); }); it('given an owned-origin case, renders record-assessment as a form trigger, shows release-ownership, hides take-ownership', () => { const el = render(ownedActions); expect(el.querySelector('[data-testid="record-assessment-form"]')).toBeTruthy(); expect(el.querySelector('[data-testid="record-assessment-link"]')).toBeFalsy(); expect(el.querySelector('[data-testid="release-ownership-button"]')).toBeTruthy(); expect(el.querySelector('[data-testid="take-ownership-button"]')).toBeFalsy(); }); });