@@ -152,3 +152,60 @@ func TestOverrideJoinTable(t *testing.T) {
152152 t .Errorf ("person's addresses expects 2, got %v" , count )
153153 }
154154}
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