@@ -4025,6 +4025,94 @@ func TestRepository_Preload_scanErrors(t *testing.T) {
4025
4025
cur .AssertExpectations (t )
4026
4026
}
4027
4027
4028
+ type ScheduledQuestion struct {
4029
+ ID int
4030
+ QuestionID int
4031
+ Question * Question
4032
+ }
4033
+
4034
+ type Question struct {
4035
+ ID int
4036
+ Answers []Answers
4037
+ }
4038
+
4039
+ type Answers struct {
4040
+ ID int
4041
+ QuestionID int
4042
+ }
4043
+
4044
+ func TestRepository_Preload_nestedWithDuplicatePtrBelongsTo (t * testing.T ) {
4045
+ var (
4046
+ adapter = & testAdapter {}
4047
+ repo = New (adapter )
4048
+ scheduledQuestions = []ScheduledQuestion {}
4049
+ cur = & testCursor {}
4050
+ )
4051
+
4052
+ {
4053
+ adapter .On ("Query" , From ("scheduled_questions" )).Return (cur , nil ).Once ()
4054
+ cur .On ("Close" ).Return (nil ).Once ()
4055
+ cur .On ("Fields" ).Return ([]string {"id" , "question_id" }, nil ).Once ()
4056
+ cur .On ("Next" ).Return (true ).Times (2 )
4057
+ cur .MockScan (1 , 1 ).Once ()
4058
+ cur .MockScan (2 , 1 ).Once ()
4059
+ cur .On ("Next" ).Return (false ).Once ()
4060
+
4061
+ assert .Nil (t , repo .FindAll (context .TODO (), & scheduledQuestions ))
4062
+ }
4063
+
4064
+ {
4065
+ adapter .On ("Query" , From ("questions" ).Where (In ("id" , 1 ))).Return (cur , nil ).Once ()
4066
+ cur .On ("Close" ).Return (nil ).Once ()
4067
+ cur .On ("Fields" ).Return ([]string {"id" }, nil ).Once ()
4068
+ cur .On ("Next" ).Return (true ).Times (1 )
4069
+ cur .MockScan (1 ).Once ()
4070
+ cur .On ("Next" ).Return (false ).Once ()
4071
+
4072
+ assert .Nil (t , repo .Preload (context .TODO (), & scheduledQuestions , "question" ))
4073
+ }
4074
+
4075
+ {
4076
+ adapter .On ("Query" , From ("answers" ).Where (In ("question_id" , 1 ))).Return (cur , nil ).Once ()
4077
+ cur .On ("Close" ).Return (nil ).Once ()
4078
+ cur .On ("Fields" ).Return ([]string {"id" , "question_id" }, nil ).Once ()
4079
+ cur .On ("Next" ).Return (true ).Times (1 )
4080
+ cur .MockScan (1 , 1 ).Once ()
4081
+ cur .On ("Next" ).Return (false ).Once ()
4082
+
4083
+ assert .Nil (t , repo .Preload (context .TODO (), & scheduledQuestions , "question.answers" ))
4084
+ }
4085
+
4086
+ assert .Equal (t , []ScheduledQuestion {
4087
+ {
4088
+ ID : 1 ,
4089
+ QuestionID : 1 ,
4090
+ Question : & Question {
4091
+ ID : 1 ,
4092
+ Answers : []Answers {
4093
+ {
4094
+ ID : 1 ,
4095
+ QuestionID : 1 ,
4096
+ },
4097
+ },
4098
+ },
4099
+ },
4100
+ {
4101
+ ID : 2 ,
4102
+ QuestionID : 1 ,
4103
+ Question : & Question {
4104
+ ID : 1 ,
4105
+ Answers : []Answers {
4106
+ {
4107
+ ID : 1 ,
4108
+ QuestionID : 1 ,
4109
+ },
4110
+ },
4111
+ },
4112
+ },
4113
+ }, scheduledQuestions )
4114
+ }
4115
+
4028
4116
func TestRepository_MustPreload (t * testing.T ) {
4029
4117
var (
4030
4118
adapter = & testAdapter {}
0 commit comments