test(portal-frontend): add failing spec for case-actions mode-driven rendering
Red: case-actions has no template yet. Encodes the legacy-vs-owned actions contract from CaseDetailResponseFactory - record-assessment renders as a link only in redirect mode, take/release-ownership buttons follow presence of their optional action key.
This commit is contained in:
@@ -0,0 +1 @@
|
||||
<p>case-actions works!</p>
|
||||
@@ -0,0 +1,51 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
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] }).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();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,13 @@
|
||||
import { Component, input } from '@angular/core';
|
||||
|
||||
import { CaseDetailActions } from '../case-detail.types';
|
||||
|
||||
@Component({
|
||||
selector: 'app-case-actions',
|
||||
imports: [],
|
||||
templateUrl: './case-actions.html',
|
||||
styleUrl: './case-actions.css',
|
||||
})
|
||||
export class CaseActions {
|
||||
readonly actions = input.required<CaseDetailActions>();
|
||||
}
|
||||
Reference in New Issue
Block a user