import { Injectable } from '@angular/core'; import { GCMockModule } from '@core/mocks/gc-module.mock'; import { FormStatuses, RelativeFormDueDateFields } from '@features/configure-forms/form.typing'; import { Spec, TestCase } from '@yourcause/test-decorators'; import { DescribeAngularService } from '@yourcause/test-decorators/angular'; import { expect } from 'chai'; import { FormStatusService } from './form-status.service'; @Injectable({ providedIn: 'root' }) @DescribeAngularService(FormStatusService, { imports: [ GCMockModule ] }) export class FormStatusServiceSpec implements Spec { @TestCase('should be able to get form status options for managers') getFormStatusOptionsManager (service: FormStatusService) { const managerOptions = service.getFormStatusOptions(true); const foundNotSubmitted = managerOptions.find((opt) => { return opt.customValue === FormStatuses.Submitted; }); expect(foundNotSubmitted).to.not.be.undefined; const foundNotStarted = managerOptions.find((opt) => { return opt.customColumn === 'applicationFormId'; }); expect(foundNotStarted).to.not.be.undefined; } @TestCase('should be able to get form status options for applicants') getFormStatusOptionsApplicant (service: FormStatusService) { const applicantOptions = service.getFormStatusOptions(false); const foundRevRequested = applicantOptions.find((opt) => { return opt.value === FormStatuses.RevisionRequested; }); expect(foundRevRequested).to.not.be.undefined; const foundNotSent = applicantOptions.find((opt) => { return opt.value === FormStatuses.NotSent; }); expect(foundNotSent).to.not.be.undefined; } @TestCase('should be able to get relative form due date options') relativeFormDueDateOptions (service: FormStatusService) { const options = service.relativeFormDueDateOptions; const hasCorrectOptions = options.every((opt) => { return [ RelativeFormDueDateFields.SUBMITTED_DATE, RelativeFormDueDateFields.ENTERED_WFL_DATE, RelativeFormDueDateFields.FORM_SENT_DATE, RelativeFormDueDateFields.CYCLE_CLOSE_DATE, RelativeFormDueDateFields.CYCLE_OPEN_DATE, RelativeFormDueDateFields.APPROVAL_DATE, RelativeFormDueDateFields.AWARD_DATE, RelativeFormDueDateFields.LAST_PAYMENT_DATE, RelativeFormDueDateFields.STATUS_CHANGE_DATE ].includes(opt.value); }); expect(hasCorrectOptions).to.be.true; } }