@@ -205,19 +205,20 @@ describe('_deriveObjectId', () => {
205205 } ) ;
206206
207207 describe ( 'Soft-Deleted S3 Object' , ( ) => {
208- it ( 'Returns a new uuid if valid found ' , async ( ) => {
208+ it ( 'Returns an existing uuid from "coms-id" S3 tag if no conflict with existing COMS object ' , async ( ) => {
209209 listAllObjectVersionsSpy . mockResolvedValue ( { Versions : [ { VersionId : '2' } , { VersionId : '1' } ] } ) ;
210- getObjectTaggingSpy . mockResolvedValueOnce ( { TagSet : [ ] } ) ;
211210 getObjectTaggingSpy . mockResolvedValueOnce ( {
212211 TagSet : [ { Key : 'coms-id' , Value : validUuidv4 } ]
213212 } ) ;
213+ existsSpy . mockResolvedValueOnce ( false ) ;
214+ putObjectTaggingSpy . mockResolvedValue ( { } ) ;
214215
215216 const result = await service . _deriveObjectId ( true , path , bucketId ) ;
216217
217218 expect ( result ) . toBeTruthy ( ) ;
218219 expect ( typeof result ) . toBe ( 'string' ) ;
219- expect ( result ) . toMatch ( validUuidv4 ) ;
220- expect ( getObjectTaggingSpy ) . toHaveBeenCalledTimes ( 2 ) ;
220+ expect ( result ) . toEqual ( validUuidv4 ) ;
221+ expect ( getObjectTaggingSpy ) . toHaveBeenCalledTimes ( 1 ) ;
221222 expect ( listAllObjectVersionsSpy ) . toHaveBeenCalledTimes ( 1 ) ;
222223 expect ( listAllObjectVersionsSpy ) . toHaveBeenCalledWith ( expect . objectContaining ( {
223224 filePath : path ,
@@ -226,6 +227,28 @@ describe('_deriveObjectId', () => {
226227 expect ( putObjectTaggingSpy ) . toHaveBeenCalledTimes ( 0 ) ;
227228 } ) ;
228229
230+ it ( 'Returns a new uuid if "coms-id" S3 tag conflicts with existing COMS object' , async ( ) => {
231+ listAllObjectVersionsSpy . mockResolvedValue ( { Versions : [ { VersionId : '2' } , { VersionId : '1' } ] } ) ;
232+ getObjectTaggingSpy . mockResolvedValueOnce ( {
233+ TagSet : [ { Key : 'coms-id' , Value : validUuidv4 } ]
234+ } ) ;
235+ existsSpy . mockResolvedValueOnce ( true ) ;
236+ putObjectTaggingSpy . mockResolvedValueOnce ( { } ) ;
237+
238+ const result = await service . _deriveObjectId ( true , path , bucketId ) ;
239+
240+ expect ( result ) . toBeTruthy ( ) ;
241+ expect ( typeof result ) . toBe ( 'string' ) ;
242+ expect ( result ) . not . toEqual ( validUuidv4 ) ;
243+ expect ( getObjectTaggingSpy ) . toHaveBeenCalledTimes ( 1 ) ;
244+ expect ( listAllObjectVersionsSpy ) . toHaveBeenCalledTimes ( 1 ) ;
245+ expect ( listAllObjectVersionsSpy ) . toHaveBeenCalledWith ( expect . objectContaining ( {
246+ filePath : path ,
247+ bucketId : bucketId
248+ } ) ) ;
249+ expect ( putObjectTaggingSpy ) . toHaveBeenCalledTimes ( 1 ) ;
250+ } ) ;
251+
229252 it ( 'Returns a new uuid if valid not found' , async ( ) => {
230253 listAllObjectVersionsSpy . mockResolvedValue ( { Versions : [ { VersionId : '1' } ] } ) ;
231254 getObjectTaggingSpy . mockResolvedValueOnce ( { TagSet : [ ] } ) ;
0 commit comments