import { Injectable } from '@angular/core'; import { GCMockModule } from '@core/mocks/gc-module.mock'; import { UserTypes } from '@core/typings/client-user.typing'; import { CommunicationVisibility } from '@features/communications/communications.typing'; import { EmailNotificationType } from '@features/system-emails/email.typing'; import { Spec, TestCase } from '@yourcause/test-decorators'; import { DescribeAngularService } from '@yourcause/test-decorators/angular'; import { expect } from 'chai'; import { ApplicationAttachmentService } from './application-attachments.service'; import { ApplicationAttachmentFromApi, AttachmentType } from './application-attachments.typing'; @Injectable({ providedIn: 'root' }) @DescribeAngularService(ApplicationAttachmentService, { imports: [ GCMockModule ] }) export class ApplicationAttachmentServiceSpec implements Spec { formId = 1; multiValueUploadId = 100; externalFileId = 101; commFileId = 102; emailFileId = 103; fileUploadId = 104; applicationAttachmentsFromApi: ApplicationAttachmentFromApi = { communicationFileInfo: [{ documentVisibility: CommunicationVisibility.MANAGERS_IN_LEVEL, attachmentId: 1, fileName: 'sample string 2', uploadedBy: { firstName: 'stringman', lastName: 'stringerson', email: 'string@asd.com', userType: 123, impersonatedBy: 'string stringy', fullName: 'stringman stringeron' }, attachmentType: AttachmentType.COMMUNICATION, uploadedDate: '2020-04-08T12:51:53.2497112Z', fileUploadId: 123, fileInfo: [{ fileName: 'sample file name', fileUploadId: this.commFileId, uploadedDate: '1/1/1991', uploadedBy: { firstName: 'string', lastName: 'string', email: 'string', userType: 123, impersonatedBy: 'string', fullName: 'string' } }] }], emailFileInfo: [{ emailNotificationType: EmailNotificationType.ApplicationApproved, emailSentDate: '2020-04-08T12:51:53.2506898Z', attachmentId: 1, attachmentType: AttachmentType.EMAIL, uploadedDate: '2020-04-08T12:51:53.2506898Z', fileInfo: [{ fileName: 'sample file name', fileUploadId: this.emailFileId, uploadedDate: '1/1/1991', uploadedBy: { firstName: 'string', lastName: 'string', email: 'string', userType: 123, impersonatedBy: 'string', fullName: 'string' } }], uploadedBy: { firstName: 'sample string 1', lastName: 'sample string 2', email: 'sample string 3', userType: 1, impersonatedBy: 'sample string 4' } }], formFileInfo: [{ formId: this.formId, formName: 'sample string 2', attachmentId: 3, fileName: 'sample string 4', attachmentType: AttachmentType.FORM, uploadedDate: '2020-04-08T12:51:53.2506898Z', fileInfo: [{ fileName: 'sample file name', fileUploadId: this.fileUploadId, uploadedDate: '1/1/1991', uploadedBy: { firstName: 'string', lastName: 'string', email: 'string', userType: 123, impersonatedBy: 'string', fullName: 'string' } }], uploadedBy: { firstName: 'sample string 1', lastName: 'sample string 2', email: 'sample string 3', userType: 1, impersonatedBy: 'sample string 4' }, multiValueFileInfo: [], fileUploadId: 6 }, { formId: this.formId, formName: 'sample string 2', attachmentId: 3, fileName: 'sample string 4', attachmentType: AttachmentType.FORM, uploadedDate: '2020-04-08T12:51:53.2506898Z', fileInfo: [{ fileName: 'sample file name', fileUploadId: this.multiValueUploadId, uploadedDate: '1/1/1991', uploadedBy: { firstName: 'string', lastName: 'string', email: 'string', userType: 123, impersonatedBy: 'string', fullName: 'string' } }], uploadedBy: { firstName: 'sample string 1', lastName: 'sample string 2', email: 'sample string 3', userType: 1, impersonatedBy: 'sample strign 4' }, multiValueFileInfo: [{ fileName: 'multi value file info', fileUploadId: this.multiValueUploadId, uploadedBy: { firstName: '', fullName: '', lastName: '', email: '', impersonatedBy: '', userType: UserTypes.APPLICANT }, uploadedDate: '' }], fileUploadId: 7 }], externalFileInfo: [{ documentVisibility: CommunicationVisibility.ALL_GRANT_MANAGERS, applicantCanView: true, canRemoveAttachment: true, attachmentId: 3, attachmentType: AttachmentType.EXTERNAL, uploadedDate: '2020-04-08T12:51:53.2506898Z', uploadedBy: { firstName: 'sample string 1', lastName: 'sample string 2', email: 'sample string 3', userType: 1, impersonatedBy: 'sample string 4' }, fileInfo: [{ fileName: 'sample file name', fileUploadId: this.externalFileId, uploadedDate: '1/1/1991', uploadedBy: { firstName: 'string', lastName: 'string', email: 'string', userType: 123, impersonatedBy: 'string', fullName: 'string' } }] }], mergeDocumentFileInfo: [] }; @TestCase('should be able to get document visibility options') async getDocumentVisibilityOptions (service: ApplicationAttachmentService) { const options = service.getDocumentVisibilityOptions(); expect(options.length).to.be.equal(3); } @TestCase('should be able to adapt application attachments') async adaptApplicationAttachmentsForUI (service: ApplicationAttachmentService) { const adapted = service.adaptApplicationAttachmentsForUI( this.applicationAttachmentsFromApi ); expect(adapted.length).to.be.equal(5); expect(adapted[0].attachmentType).to.be.equal(AttachmentType.COMMUNICATION); expect(adapted[1].emailNotificationType).to.be.equal(EmailNotificationType.ApplicationApproved); expect(adapted[2].formId).to.be.equal(this.formId); expect(adapted[3].formId).to.be.equal(this.formId); expect(adapted[3].fileInfo[0].fileUploadId).to.be.equal(this.multiValueUploadId); expect(adapted[4].applicantCanView).to.be.equal(true); } }