@@ -664,3 +664,101 @@ func TestCreateGameCreators(t *testing.T) {
664664 })
665665 }
666666}
667+
668+ func TestGetGameCreatorsByUserIDs (t * testing.T ) {
669+ creatorSchema1 := & schema.GameCreatorTable {
670+ ID : uuid .New (),
671+ UserID : uuid .New (),
672+ UserName : "user" ,
673+ CreatedAt : time .Now (),
674+ Game : schema.GameTable2 {
675+ ID : uuid .New (),
676+ Name : "game" ,
677+ VisibilityTypeID : 1 ,
678+ },
679+ }
680+ creator1 := domain .NewGameCreator (
681+ values .GameCreatorID (creatorSchema1 .ID ),
682+ values .NewTrapMemberID (creatorSchema1 .UserID ),
683+ values .GameID (creatorSchema1 .Game .ID ),
684+ values .NewTrapMemberName (creatorSchema1 .UserName ),
685+ creatorSchema1 .CreatedAt ,
686+ )
687+ creatorSchema2 := & schema.GameCreatorTable {
688+ ID : uuid .New (),
689+ UserID : uuid .New (),
690+ UserName : "user" ,
691+ CreatedAt : time .Now ().Add (- time .Hour ),
692+ Game : schema.GameTable2 {
693+ ID : creatorSchema1 .Game .ID ,
694+ Name : "game" ,
695+ VisibilityTypeID : 1 ,
696+ },
697+ }
698+ creator2 := domain .NewGameCreator (
699+ values .GameCreatorID (creatorSchema2 .ID ),
700+ values .NewTrapMemberID (creatorSchema2 .UserID ),
701+ values .GameID (creatorSchema2 .Game .ID ),
702+ values .NewTrapMemberName (creatorSchema2 .UserName ),
703+ creatorSchema2 .CreatedAt ,
704+ )
705+
706+ testCases := map [string ]struct {
707+ creators []* schema.GameCreatorTable
708+ gameID values.GameID
709+ userIDs []values.TraPMemberID
710+ result []* domain.GameCreator
711+ }{
712+ "ユーザー1人に対して1件のcreatorを取得できる" : {
713+ creators : []* schema.GameCreatorTable {creatorSchema1 },
714+ gameID : values .NewGameIDFromUUID (creatorSchema1 .Game .ID ),
715+ userIDs : []values.TraPMemberID {creator1 .GetUserID ()},
716+ result : []* domain.GameCreator {creator1 },
717+ },
718+ "複数ユーザーに対してcreatorを取得できる" : {
719+ creators : []* schema.GameCreatorTable {creatorSchema1 , creatorSchema2 },
720+ gameID : values .NewGameIDFromUUID (creatorSchema1 .Game .ID ),
721+ userIDs : []values.TraPMemberID {creator1 .GetUserID (), creator2 .GetUserID ()},
722+ result : []* domain.GameCreator {creator1 , creator2 },
723+ },
724+ "該当するcreatorがいないので空配列" : {
725+ creators : []* schema.GameCreatorTable {creatorSchema1 , creatorSchema2 },
726+ gameID : values .NewGameID (),
727+ userIDs : []values.TraPMemberID {values .NewTrapMemberID (uuid .New ())},
728+ result : []* domain.GameCreator {},
729+ },
730+ }
731+
732+ for name , testCase := range testCases {
733+ t .Run (name , func (t * testing.T ) {
734+ ctx := t .Context ()
735+ db , err := testDB .getDB (ctx )
736+ require .NoError (t , err )
737+
738+ if len (testCase .creators ) > 0 {
739+ err = db .Create (testCase .creators ).Error
740+ require .NoError (t , err )
741+ t .Cleanup (func () {
742+ db , err := testDB .getDB (context .Background ())
743+ require .NoError (t , err )
744+ err = db .Session (& gorm.Session {AllowGlobalUpdate : true }).Delete (testCase .creators ).Error
745+ require .NoError (t , err )
746+ })
747+ }
748+
749+ repo := NewGameCreator (testDB )
750+
751+ result , err := repo .GetGameCreatorsByUserIDs (t .Context (), testCase .gameID , testCase .userIDs )
752+
753+ assert .NoError (t , err )
754+ assert .Len (t , result , len (testCase .result ))
755+ for i , expected := range testCase .result {
756+ assert .Equal (t , expected .GetID (), result [i ].GetID ())
757+ assert .Equal (t , expected .GetGameID (), result [i ].GetGameID ())
758+ assert .Equal (t , expected .GetUserID (), result [i ].GetUserID ())
759+ assert .Equal (t , expected .GetUserName (), result [i ].GetUserName ())
760+ assert .WithinDuration (t , expected .GetCreatedAt (), result [i ].GetCreatedAt (), time .Second )
761+ }
762+ })
763+ }
764+ }
0 commit comments