@@ -466,15 +466,48 @@ describe("FilesService", () => {
466466 } ) ;
467467
468468 describe ( "upsertReleaseRecord" , ( ) => {
469- it ( "should upsert game versions atomically via query builder" , async ( ) => {
470- const execute = jest . fn ( ) . mockResolvedValue ( undefined ) ;
471- const orUpdate = jest . fn ( ) . mockReturnValue ( { execute } ) ;
472- const values = jest . fn ( ) . mockReturnValue ( { orUpdate } ) ;
473- const into = jest . fn ( ) . mockReturnValue ( { values } ) ;
474- const insert = jest . fn ( ) . mockReturnValue ( { into } ) ;
475- const qb = { insert } ;
469+ it ( "should create a new release row when none exists" , async ( ) => {
470+ gameVersionRepository . findOne . mockResolvedValueOnce ( null ) ;
471+ gameVersionRepository . save . mockResolvedValueOnce ( undefined ) ;
476472
477- gameVersionRepository . createQueryBuilder . mockReturnValue ( qb as any ) ;
473+ await ( service as any ) . upsertReleaseRecord ( 9 , {
474+ file_path : "/tmp/test-files/Game (v2).zip" ,
475+ version : "v2" ,
476+ size : 2000n ,
477+ release_date : new Date ( "2025-01-01T00:00:00.000Z" ) ,
478+ early_access : true ,
479+ type : "WINDOWS_PORTABLE" ,
480+ } ) ;
481+
482+ expect ( gameVersionRepository . findOne ) . toHaveBeenCalledWith (
483+ expect . objectContaining ( {
484+ where : {
485+ game : { id : 9 } ,
486+ file_path : "/tmp/test-files/Game (v2).zip" ,
487+ } ,
488+ withDeleted : true ,
489+ } ) ,
490+ ) ;
491+ expect ( gameVersionRepository . save ) . toHaveBeenCalledWith (
492+ expect . objectContaining ( {
493+ id : undefined ,
494+ game : { id : 9 } ,
495+ file_path : "/tmp/test-files/Game (v2).zip" ,
496+ version : "v2" ,
497+ size : 2000n ,
498+ early_access : true ,
499+ type : "WINDOWS_PORTABLE" ,
500+ deleted_at : null ,
501+ } ) ,
502+ ) ;
503+ } ) ;
504+
505+ it ( "should update an existing release row by reusing its id" , async ( ) => {
506+ gameVersionRepository . findOne . mockResolvedValueOnce ( {
507+ id : 42 ,
508+ file_path : "/tmp/test-files/Game (v2).zip" ,
509+ } ) ;
510+ gameVersionRepository . save . mockResolvedValueOnce ( undefined ) ;
478511
479512 await ( service as any ) . upsertReleaseRecord ( 9 , {
480513 file_path : "/tmp/test-files/Game (v2).zip" ,
@@ -485,12 +518,14 @@ describe("FilesService", () => {
485518 type : "WINDOWS_PORTABLE" ,
486519 } ) ;
487520
488- expect ( gameVersionRepository . createQueryBuilder ) . toHaveBeenCalled ( ) ;
489- expect ( orUpdate ) . toHaveBeenCalledWith (
490- expect . arrayContaining ( [ "deleted_at" , "updated_at" ] ) ,
491- [ "game_id" , "file_path" ] ,
521+ expect ( gameVersionRepository . save ) . toHaveBeenCalledWith (
522+ expect . objectContaining ( {
523+ id : 42 ,
524+ game : { id : 9 } ,
525+ file_path : "/tmp/test-files/Game (v2).zip" ,
526+ deleted_at : null ,
527+ } ) ,
492528 ) ;
493- expect ( execute ) . toHaveBeenCalled ( ) ;
494529 } ) ;
495530 } ) ;
496531
0 commit comments