import { Injectable } from '@angular/core'; import { GCMockModule } from '@core/mocks/gc-module.mock'; import { BATCH_STATUS } from '@core/typings/status.typing'; import { BeforeEach, Spec, TestCase } from '@yourcause/test-decorators'; import { DescribeAngularService } from '@yourcause/test-decorators/angular'; import { expect } from 'chai'; import { StatusService } from './status.service'; @Injectable({ providedIn: 'root' }) @DescribeAngularService(StatusService, { imports: [ GCMockModule ] }) export class StatusServiceSpec implements Spec { appStatuses = [{ id: 1, name: 'Awaiting Review' }, { id: 2, name: 'In Progress' }, { id: 3, name: 'Approved' }, { id: 4, name: 'Declined' }, { id: 5, name: 'Hold' }]; @BeforeEach() mock (service: StatusService) { service.preparePaymentStatuses(); service.prepareApplicationStatuses(); service.prepareFormStatuses(); } @TestCase('setStatusMap should abide by includeDraft') setStatusMapTest (service: StatusService) { const statusOptions = BATCH_STATUS; const map = service.setStatusMap(statusOptions); expect(map[0]).to.be.undefined; } @TestCase('should be able to set application status map') setStatusMap (service: StatusService) { expect(service.applicationStatusMap[0].name).to.be.equal('Draft'); expect(service.applicationStatusMap[1].name).to.be.equal('Awaiting Review'); } @TestCase('should be able to set standard app status options') setStandardAppStatusOptions (service: StatusService) { service.setAppStatusOptions(); const draftOption = service.appStatusOptions.find((opt) => { return opt.label === 'Draft'; }); expect(draftOption).to.be.undefined; const valuesAreNumbers = service.appStatusOptions.every((opt) => { return typeof opt.value === 'number'; }); expect(valuesAreNumbers).to.be.true; } @TestCase('should be able to set ad hoc app status options') setAdHocAppStatusOptions (service: StatusService) { service.setAppStatusOptions(); const hasNullDraft = service.adHocStatusOptions.find((opt) => { return opt.value === null && opt.label === 'Draft'; }); expect(hasNullDraft).to.not.be.undefined; const theRest = service.adHocStatusOptions.filter((opt) => { return opt.value !== null; }); const restAreStrings = theRest.every((opt) => { return typeof opt.value === 'string'; }); expect(restAreStrings).to.be.true; } }