import { Injectable } from '@angular/core'; import { GCMockModule } from '@core/mocks/gc-module.mock'; import { AfterEach, BeforeEach, Spec, TestCase } from '@yourcause/test-decorators'; import { DescribeAngularService } from '@yourcause/test-decorators/angular'; import { expect, spy } from 'chai'; import { HelpContentService } from './help-content.service'; import { BaseHelpContent, HelpContent } from './help-content.typing'; @Injectable({ providedIn: 'root' }) @DescribeAngularService(HelpContentService, { imports: [GCMockModule] }) export class HelpContentServiceSpec implements Spec { mockData: HelpContent[]; @BeforeEach() doMock (service: HelpContentService) { this.mockData = [{ id: 1, name: 'name 1', description: 'description 1', helpContentLink: 'help link 1', grantsConnectLink: 'gc link 1' }, { id: 2, name: 'name 2', description: 'description 2', helpContentLink: 'help link 2', grantsConnectLink: 'gc link 2' }]; spy.on(service['confirmAndTakeActionService'], 'genericTakeAction', async (fn) => { await fn(); return { passed: true, endpointResponse: null }; }); spy.on(service['confirmAndTakeActionService'], 'genericConfirmAndTakeAction', async (fn) => { await fn(); return { passed: true, endpointResponse: null }; }); spy.on(service['resources'], 'getContents', () => this.mockData); spy.on(service['resources'], 'saveHelpContent', () => {}); spy.on(service['resources'], 'deleteHelpContent', () => {}); } @AfterEach() restore () { spy.restore(); } @TestCase('should be able to fetch') async testShouldFetch (service: HelpContentService) { await service.getContents(); expect(service.contents).to.equal(this.mockData); expect(service['resources'].getContents).to.have.been.called.once; } @TestCase('should be able to save') async testSave (service: HelpContentService) { await service.saveHelpContent({ id: 3, name: 'name 3', description: 'description 3', helpContentLink: 'help link 3', grantsConnectLink: 'gc link 3' } as BaseHelpContent); expect(service['resources'].saveHelpContent).to.have.been.called.once; expect(service['resources'].getContents).to.have.been.called.once; expect(service['confirmAndTakeActionService'].genericTakeAction).to.have.been.called.once; } @TestCase('should be able to delete') async testDelete (service: HelpContentService) { await service.deleteHelpContent(1); expect(service['resources'].deleteHelpContent).to.have.been.called.once; expect(service['resources'].getContents).to.have.been.called.once; expect(service['confirmAndTakeActionService'].genericConfirmAndTakeAction).to.have.been.called.once; } }