@@ -20,6 +20,7 @@ import {
2020 getBasePath ,
2121 getModelNameByPath ,
2222 createWrongFootprintMixed2D3D ,
23+ createFootprint ,
2324} from '../../helpers/helpers' ;
2425import { getApp } from '../../../src/app' ;
2526import { SERVICES } from '../../../src/common/constants' ;
@@ -127,6 +128,75 @@ describe('ModelController', function () {
127128 expect ( response . status ) . toBe ( StatusCodes . CREATED ) ;
128129 expect ( response ) . toSatisfyApiSpec ( ) ;
129130 } ) ;
131+
132+ it ( 'should return 201 status code if footprint has 3D coordinates and pass footprint 2D to storeTrigger' , async function ( ) {
133+ const payload = createIngestionPayload ( 'Sphere' ) ;
134+ payload . metadata . minResolutionMeter = 11 ;
135+ payload . metadata . producerName = 'aa' ;
136+ payload . metadata . footprint = createFootprint ( 'Sphere' , true ) ;
137+ const expectedFootprint = createFootprint ( 'Sphere' , false ) ;
138+
139+ const storeTriggerResult : StoreTriggerResponse = {
140+ jobId : faker . string . uuid ( ) ,
141+ status : OperationStatus . IN_PROGRESS ,
142+ } ;
143+ mockAxios . get . mockResolvedValueOnce ( { status : StatusCodes . OK } ) ;
144+ mockAxios . get . mockResolvedValueOnce ( { data : [ { value : payload . metadata . classification } ] as ILookupOption [ ] } ) ;
145+ mockAxios . post . mockResolvedValueOnce ( { data : storeTriggerResult } ) ;
146+
147+ const storeTriggerCallPostPayloadSpy = jest . spyOn ( StoreTriggerCall . prototype , 'postPayload' ) ;
148+
149+ const response = await requestSender . createModel ( payload ) ;
150+
151+ expect ( storeTriggerCallPostPayloadSpy ) . toHaveBeenCalledTimes ( 1 ) ;
152+
153+ const subsetPostPayloadMetadata = {
154+ absoluteAccuracyLE90 : payload . metadata . absoluteAccuracyLE90 ,
155+ accuracySE90 : payload . metadata . accuracySE90 ,
156+ classification : payload . metadata . classification ,
157+ creationDate : payload . metadata . creationDate ?. toISOString ( ) ,
158+ description : payload . metadata . description ,
159+ footprint : expectedFootprint ,
160+ geographicArea : payload . metadata . geographicArea ,
161+ heightRangeFrom : payload . metadata . heightRangeFrom ,
162+ heightRangeTo : payload . metadata . heightRangeTo ,
163+ maxAccuracyCE90 : payload . metadata . maxAccuracyCE90 ,
164+ maxFlightAlt : payload . metadata . maxFlightAlt ,
165+ maxResolutionMeter : payload . metadata . maxResolutionMeter ,
166+ minFlightAlt : payload . metadata . minFlightAlt ,
167+ minResolutionMeter : payload . metadata . minResolutionMeter ,
168+ producerName : payload . metadata . producerName ,
169+ productId : payload . metadata . productId ,
170+ productName : payload . metadata . productName ,
171+ productSource : '\\\\tmp\\tilesets\\models\\Sphere' ,
172+ productStatus : 'UNPUBLISHED' ,
173+ productType : '3DPhotoRealistic' ,
174+ productionSystem : payload . metadata . productionSystem ,
175+ productionSystemVer : payload . metadata . productionSystemVer ,
176+ region : payload . metadata . region ,
177+ relativeAccuracySE90 : payload . metadata . relativeAccuracySE90 ,
178+ sensors : payload . metadata . sensors ,
179+ sourceDateEnd : `${ payload . metadata . sourceDateEnd ?. toISOString ( ) } ` ,
180+ sourceDateStart : `${ payload . metadata . sourceDateStart ?. toISOString ( ) } ` ,
181+ srsId : payload . metadata . srsId ,
182+ srsName : payload . metadata . srsName ,
183+ type : 'RECORD_3D' ,
184+ visualAccuracy : payload . metadata . visualAccuracy ,
185+ } ;
186+
187+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
188+ expect ( storeTriggerCallPostPayloadSpy ) . toHaveBeenCalledWith (
189+ expect . objectContaining ( {
190+ modelId : expect . any ( String ) ,
191+ pathToTileset : 'Sphere' ,
192+ tilesetFilename : 'tileset.json' ,
193+ metadata : subsetPostPayloadMetadata ,
194+ } )
195+ ) ;
196+
197+ expect ( response . status ) . toBe ( StatusCodes . CREATED ) ;
198+ expect ( response ) . toSatisfyApiSpec ( ) ;
199+ } ) ;
130200 } ) ;
131201
132202 describe ( 'Sad Path 😥, createModel' , function ( ) {
0 commit comments