@@ -152,3 +152,60 @@ func TestOverrideJoinTable(t *testing.T) {
152
152
t .Errorf ("person's addresses expects 2, got %v" , count )
153
153
}
154
154
}
155
+
156
+ func TestOverrideJoinTableInvalidAssociation (t * testing.T ) {
157
+ DB .Migrator ().DropTable (& Person {}, & Address {}, & PersonAddress {})
158
+ if err := DB .SetupJoinTable (& Person {}, "Addresses" , & PersonAddress {}); err != nil {
159
+ t .Fatalf ("Failed to setup join table for person, got error %v" , err )
160
+ }
161
+ if err := DB .AutoMigrate (& Person {}, & Address {}); err != nil {
162
+ t .Fatalf ("Failed to migrate, got %v" , err )
163
+ }
164
+
165
+ person := Person {Name : "invalid-assoc" }
166
+ DB .Create (& person )
167
+
168
+ err := DB .Model (& person ).Association ("NonExistent" ).Find (& []Address {})
169
+ if err == nil {
170
+ t .Fatalf ("Expected error when accessing non-existent association, got nil" )
171
+ }
172
+ }
173
+
174
+ func TestOverrideJoinTableClearWithoutAssociations (t * testing.T ) {
175
+ DB .Migrator ().DropTable (& Person {}, & Address {}, & PersonAddress {})
176
+ if err := DB .SetupJoinTable (& Person {}, "Addresses" , & PersonAddress {}); err != nil {
177
+ t .Fatalf ("Failed to setup join table for person, got error %v" , err )
178
+ }
179
+ if err := DB .AutoMigrate (& Person {}, & Address {}); err != nil {
180
+ t .Fatalf ("Failed to migrate, got %v" , err )
181
+ }
182
+
183
+ person := Person {Name : "no-assoc" }
184
+ DB .Create (& person )
185
+
186
+ if err := DB .Model (& person ).Association ("Addresses" ).Clear (); err != nil {
187
+ t .Fatalf ("Expected no error clearing empty associations, got %v" , err )
188
+ }
189
+
190
+ if count := DB .Model (& person ).Association ("Addresses" ).Count (); count != 0 {
191
+ t .Fatalf ("Expected 0 associations, got %v" , count )
192
+ }
193
+ }
194
+
195
+ func TestOverrideJoinTableDeleteNonExistentAssociation (t * testing.T ) {
196
+ DB .Migrator ().DropTable (& Person {}, & Address {}, & PersonAddress {})
197
+ if err := DB .SetupJoinTable (& Person {}, "Addresses" , & PersonAddress {}); err != nil {
198
+ t .Fatalf ("Failed to setup join table for person, got error %v" , err )
199
+ }
200
+ if err := DB .AutoMigrate (& Person {}, & Address {}); err != nil {
201
+ t .Fatalf ("Failed to migrate, got %v" , err )
202
+ }
203
+
204
+ address := Address {Name : "non-existent" }
205
+ person := Person {Name : "test-delete" }
206
+ DB .Create (& person )
207
+
208
+ if err := DB .Model (& person ).Association ("Addresses" ).Delete (& address ); err != nil {
209
+ t .Fatalf ("Expected no error when deleting non-existent association, got %v" , err )
210
+ }
211
+ }
0 commit comments