From 991578a75ca94e409a5d3daa21dc3a854abc4a84 Mon Sep 17 00:00:00 2001 From: Daniel Haselhan Date: Wed, 22 May 2024 10:25:11 -0700 Subject: [PATCH] Add Default Description to certain documents --- .../application-document.controller.spec.ts | 41 +++++++++++++++++-- .../application-document.controller.ts | 29 ++++++++++--- .../application-document.service.spec.ts | 12 +++--- .../application-document.service.ts | 16 ++++---- 4 files changed, 76 insertions(+), 22 deletions(-) diff --git a/services/apps/alcs/src/alcs/application/application-document/application-document.controller.spec.ts b/services/apps/alcs/src/alcs/application/application-document/application-document.controller.spec.ts index a57281d884..6300b556be 100644 --- a/services/apps/alcs/src/alcs/application/application-document/application-document.controller.spec.ts +++ b/services/apps/alcs/src/alcs/application/application-document/application-document.controller.spec.ts @@ -1,11 +1,12 @@ -import { classes } from 'automapper-classes'; -import { AutomapperModule } from 'automapper-nestjs'; import { createMock, DeepMocked } from '@golevelup/nestjs-testing'; import { BadRequestException } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; +import { classes } from 'automapper-classes'; +import { AutomapperModule } from 'automapper-nestjs'; import { ClsService } from 'nestjs-cls'; import { mockKeyCloakProviders } from '../../../../test/mocks/mockTypes'; import { ApplicationProfile } from '../../../common/automapper/application.automapper.profile'; +import { DOCUMENT_TYPE } from '../../../document/document-code.entity'; import { DOCUMENT_SOURCE } from '../../../document/document.dto'; import { Document } from '../../../document/document.entity'; import { ApplicationOwner } from '../../../portal/application-submission/application-owner/application-owner.entity'; @@ -14,7 +15,6 @@ import { ApplicationParcel } from '../../../portal/application-submission/applic import { ApplicationParcelService } from '../../../portal/application-submission/application-parcel/application-parcel.service'; import { User } from '../../../user/user.entity'; import { CodeService } from '../../code/code.service'; -import { DOCUMENT_TYPE } from '../../../document/document-code.entity'; import { ApplicationDocumentController } from './application-document.controller'; import { ApplicationDocument } from './application-document.entity'; import { ApplicationDocumentService } from './application-document.service'; @@ -116,6 +116,41 @@ describe('ApplicationDocumentController', () => { expect(callData.user).toEqual(mockUser); }); + it('should set a default document description for OTHER when source is APPLICANT', async () => { + const mockFile = {}; + const mockUser = {}; + + appDocumentService.attachDocument.mockResolvedValue(mockDocument); + + const res = await controller.attachDocument('fileNumber', { + isMultipart: () => true, + body: { + documentType: { + value: DOCUMENT_TYPE.OTHER, + }, + fileName: { + value: 'file', + }, + source: { + value: DOCUMENT_SOURCE.APPLICANT, + }, + visibilityFlags: { + value: '', + }, + file: mockFile, + }, + user: { + entity: mockUser, + }, + }); + + expect(res.mimeType).toEqual(mockDocument.document.mimeType); + + expect(appDocumentService.attachDocument).toHaveBeenCalledTimes(1); + const callData = appDocumentService.attachDocument.mock.calls[0][0]; + expect(callData.description).toEqual('Added on behalf of applicant'); + }); + it('should throw an exception if request is not the right type', async () => { const mockFile = {}; const mockUser = {}; diff --git a/services/apps/alcs/src/alcs/application/application-document/application-document.controller.ts b/services/apps/alcs/src/alcs/application/application-document/application-document.controller.ts index d9f3ffc3d8..10f9e5c5a8 100644 --- a/services/apps/alcs/src/alcs/application/application-document/application-document.controller.ts +++ b/services/apps/alcs/src/alcs/application/application-document/application-document.controller.ts @@ -1,5 +1,3 @@ -import { Mapper } from 'automapper-core'; -import { InjectMapper } from 'automapper-nestjs'; import { BadRequestException, Body, @@ -12,11 +10,17 @@ import { UseGuards, } from '@nestjs/common'; import { ApiOAuth2 } from '@nestjs/swagger'; +import { Mapper } from 'automapper-core'; +import { InjectMapper } from 'automapper-nestjs'; import * as config from 'config'; import * as path from 'path'; import { ANY_AUTH_ROLE } from '../../../common/authorization/roles'; import { RolesGuard } from '../../../common/authorization/roles-guard.service'; import { UserRoles } from '../../../common/authorization/roles.decorator'; +import { + DOCUMENT_TYPE, + DocumentCode, +} from '../../../document/document-code.entity'; import { DOCUMENT_SOURCE, DOCUMENT_SYSTEM, @@ -24,10 +28,6 @@ import { } from '../../../document/document.dto'; import { ApplicationOwnerService } from '../../../portal/application-submission/application-owner/application-owner.service'; import { ApplicationParcelService } from '../../../portal/application-submission/application-parcel/application-parcel.service'; -import { - DocumentCode, - DOCUMENT_TYPE, -} from '../../../document/document-code.entity'; import { ApplicationDocumentDto } from './application-document.dto'; import { ApplicationDocument, @@ -35,6 +35,12 @@ import { } from './application-document.entity'; import { ApplicationDocumentService } from './application-document.service'; +const TYPES_REQUIRING_DESCRIPTION = [ + DOCUMENT_TYPE.PHOTOGRAPH, + DOCUMENT_TYPE.OTHER, + DOCUMENT_TYPE.PROFESSIONAL_REPORT, +]; + @ApiOAuth2(config.get('KEYCLOAK.SCOPES')) @UseGuards(RolesGuard) @Controller('application-document') @@ -291,6 +297,16 @@ export class ApplicationDocumentController { const documentSource = req.body.source.value as DOCUMENT_SOURCE; const visibilityFlags = req.body.visibilityFlags.value.split(', '); + //Set Default description to prevent issues when returning to Government + let description: string | undefined; + if ( + documentSource === DOCUMENT_SOURCE.APPLICANT && + documentType && + TYPES_REQUIRING_DESCRIPTION.includes(documentType) + ) { + description = 'Added on behalf of applicant'; + } + return await this.applicationDocumentService.attachDocument({ fileNumber, fileName, @@ -300,6 +316,7 @@ export class ApplicationDocumentController { source: documentSource, visibilityFlags, system: DOCUMENT_SYSTEM.ALCS, + description, }); } } diff --git a/services/apps/alcs/src/alcs/application/application-document/application-document.service.spec.ts b/services/apps/alcs/src/alcs/application/application-document/application-document.service.spec.ts index c7b0ce051e..590e597272 100644 --- a/services/apps/alcs/src/alcs/application/application-document/application-document.service.spec.ts +++ b/services/apps/alcs/src/alcs/application/application-document/application-document.service.spec.ts @@ -5,6 +5,10 @@ import { Test, TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { initApplicationMockEntity } from '../../../../test/mocks/mockEntities'; +import { + DOCUMENT_TYPE, + DocumentCode, +} from '../../../document/document-code.entity'; import { DOCUMENT_SOURCE, DOCUMENT_SYSTEM, @@ -14,10 +18,6 @@ import { DocumentService } from '../../../document/document.service'; import { User } from '../../../user/user.entity'; import { UserService } from '../../../user/user.service'; import { ApplicationService } from '../application.service'; -import { - DocumentCode, - DOCUMENT_TYPE, -} from '../../../document/document-code.entity'; import { ApplicationDocument } from './application-document.entity'; import { ApplicationDocumentService } from './application-document.service'; @@ -233,7 +233,7 @@ describe('ApplicationDocumentService', () => { mockDocumentService.softRemove.mockResolvedValue(); mockRepository.remove.mockResolvedValue({} as any); - const res = await service.deleteByType(DOCUMENT_TYPE.STAFF_REPORT, ''); + await service.deleteByType(DOCUMENT_TYPE.STAFF_REPORT, ''); expect(mockRepository.find).toHaveBeenCalledTimes(1); expect(mockDocumentService.softRemove).toHaveBeenCalledTimes(2); @@ -324,7 +324,7 @@ describe('ApplicationDocumentService', () => { mockDocumentService.create.mockResolvedValue(new Document()); mockDocumentService.softRemove.mockResolvedValue(); - const res = await service.update({ + await service.update({ source: DOCUMENT_SOURCE.APPLICANT, fileName: 'fileName', user: new User(), diff --git a/services/apps/alcs/src/alcs/application/application-document/application-document.service.ts b/services/apps/alcs/src/alcs/application/application-document/application-document.service.ts index f93e8d68c2..8674d59f98 100644 --- a/services/apps/alcs/src/alcs/application/application-document/application-document.service.ts +++ b/services/apps/alcs/src/alcs/application/application-document/application-document.service.ts @@ -12,6 +12,10 @@ import { In, Repository, } from 'typeorm'; +import { + DOCUMENT_TYPE, + DocumentCode, +} from '../../../document/document-code.entity'; import { DOCUMENT_SOURCE, DOCUMENT_SYSTEM, @@ -20,10 +24,6 @@ import { DocumentService } from '../../../document/document.service'; import { PortalApplicationDocumentUpdateDto } from '../../../portal/application-document/application-document.dto'; import { User } from '../../../user/user.entity'; import { ApplicationService } from '../application.service'; -import { - DocumentCode, - DOCUMENT_TYPE, -} from '../../../document/document-code.entity'; import { ApplicationDocument, VISIBILITY_FLAG, @@ -54,6 +54,7 @@ export class ApplicationDocumentService { system, source = DOCUMENT_SOURCE.ALC, visibilityFlags, + description, }: { fileNumber: string; fileName: string; @@ -63,6 +64,7 @@ export class ApplicationDocumentService { source?: DOCUMENT_SOURCE; system: DOCUMENT_SYSTEM; visibilityFlags: VISIBILITY_FLAG[]; + description?: string; }) { const application = await this.applicationService.getOrFail(fileNumber); const document = await this.documentService.create( @@ -78,6 +80,7 @@ export class ApplicationDocumentService { application, document, visibilityFlags, + description, }); return this.applicationDocumentRepository.save(appDocument); @@ -192,9 +195,8 @@ export class ApplicationDocumentService { visibilityFlags, }); - const savedDocument = await this.applicationDocumentRepository.save( - document, - ); + const savedDocument = + await this.applicationDocumentRepository.save(document); return this.get(savedDocument.uuid); }