UNPKG

@ministryofjustice/hmpps-prison-permissions-lib

Version:

A library to centralise the process of determining whether a user should have access to create/read/update/delete a prison resource, for example, accessing a prisoner's Prisoner Profile.

54 lines (53 loc) 2.62 kB
import { HmppsUser } from '../types/internal/user/HmppsUser'; import Prisoner from '../data/hmppsPrisonerSearch/interfaces/Prisoner'; import { Role } from '../types/internal/user/Role'; import CaseLoad from '../types/internal/user/CaseLoad'; import { PrisonerPermission } from '../types/public/permissions/prisoner/PrisonerPermissions'; import { PermissionCheckStatus } from '../types/internal/permissions/PermissionCheckStatus'; export declare function userWithActiveCaseLoad(caseLoad: string): RolesOrCaseLoadBuilder; export declare class TestScenario { readonly user: HmppsUser; readonly prisoner: Prisoner; readonly expectedStatus: PermissionCheckStatus; constructor({ user, prisoner, expectedStatus, }: { user: HmppsUser; prisoner: Prisoner; expectedStatus: PermissionCheckStatus; }); withUserRoles(roles: Role[]): TestScenario; withoutUserRoles(roles: Role[]): TestScenario; withCaseLoads(caseLoads: CaseLoad[]): TestScenario; withExpectedStatus(expectedStatus: PermissionCheckStatus): TestScenario; toTestArray(): (string | string[] | this | undefined)[]; } export declare class TestScenarios { scenarios: TestScenario[]; constructor(scenarios: TestScenario[]); and(that: TestScenarios): TestScenarios; andScenarioWhere(that: TestScenario): TestScenarios; withUserRoles(roles: Role[]): TestScenarios; withUserRole(role: Role): TestScenarios; withoutUserRoles(roles: Role[]): TestScenarios; withCaseLoads(caseLoads: CaseLoad[]): TestScenarios; withExpectedStatus(expectedBaseCheckStatus: PermissionCheckStatus): TestScenarios; toTestArray(): (string | string[] | TestScenario | undefined)[][]; } interface RolesOrCaseLoadBuilder { withAdditionalCaseLoads: (caseLoads: string[]) => RolesBuilder; withRoles: (roles: Role[]) => PrisonerBuilder; } interface RolesBuilder { withRoles: (roles: Role[]) => PrisonerBuilder; } interface PrisonerBuilder { accessingTransferringPrisoner: () => ExpectedBaseStatusBuilder; accessingReleasedPrisoner: () => ExpectedBaseStatusBuilder; accessingPrisonerAt: (prisonId: string) => ExpectedBaseStatusBuilder; accessingRestrictedPatientSupportedBy: (prisonId: string) => ExpectedBaseStatusBuilder; } interface ExpectedBaseStatusBuilder { expectsStatus: (status: PermissionCheckStatus) => TestScenario; } export declare function scenarioTest(permissionUnderTest: PrisonerPermission, scenarios: TestScenarios): void; export declare function scenarioTests<T extends PrisonerPermission>(permissionScenarios: Record<T, TestScenarios>): void; export {};