Owned-mode form embedded in case-actions where the redirect link isn't used. verifiedItems is comma-split client-side for convenience only; the server re-validates everything regardless. closurePending renders as a neutral success note (ADR-001), never as an error. 422 InvariantViolationResponse surfaces invariant+message verbatim in a banner, matching the edit-details form's approach.
56 lines
2.7 KiB
TypeScript
56 lines
2.7 KiB
TypeScript
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<CaseActions>;
|
|
|
|
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<HTMLAnchorElement>('[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();
|
|
});
|
|
});
|