diff --git a/association.go b/association.go index c97bc157..6ae65964 100644 --- a/association.go +++ b/association.go @@ -257,8 +257,8 @@ func (association *Association) Delete(values ...interface{}) *Association { association.Field.Set(leftValues) } else if association.Field.Field.Kind() == reflect.Struct { + primaryKey := association.getPrimaryKeys(deletingResourcePrimaryFieldNames, association.Field.Field.Interface())[0] for _, pk := range deletingPrimaryKeys { - primaryKey := association.getPrimaryKeys(deletingResourcePrimaryFieldNames, association.Field.Field)[0] if equalAsString(primaryKey, pk) { association.Field.Set(reflect.Zero(association.Field.Field.Type())) break diff --git a/association_test.go b/association_test.go index 92249065..0e61d51f 100644 --- a/association_test.go +++ b/association_test.go @@ -97,14 +97,20 @@ func TestBelongsTo(t *testing.T) { // Delete DB.Model(&post).Association("Category").Delete(&category2) - fmt.Println(post) - fmt.Println(post.Category) if DB.Model(&post).Related(&Category{}).RecordNotFound() { t.Errorf("Should not delete any category when Delete a unrelated Category") } + if post.Category.Name == "" { + t.Errorf("Post's category should not be reseted when Delete a unrelated Category") + } + DB.Model(&post).Association("Category").Delete(&category3) + if post.Category.Name != "" { + t.Errorf("Post's category should be reseted after Delete") + } + var category41 Category DB.Model(&post).Related(&category41) if category41.Name != "" { @@ -124,8 +130,16 @@ func TestBelongsTo(t *testing.T) { t.Errorf("Should find category after append") } + if post.Category.Name == "" { + t.Errorf("Post's category should has value after Append") + } + DB.Model(&post).Association("Category").Clear() + if post.Category.Name != "" { + t.Errorf("Post's category should be cleared after Clear") + } + if !DB.Model(&post).Related(&Category{}).RecordNotFound() { t.Errorf("Should not find any category after Clear") } @@ -164,6 +178,10 @@ func TestHasOne(t *testing.T) { t.Errorf("Query has one relations with Related") } + if DB.Model(&user).Association("CreditCard").Count() != 1 { + t.Errorf("User's credit card count should be 1") + } + // Append var creditcard2 = CreditCard{ Number: "411111111112", @@ -180,6 +198,10 @@ func TestHasOne(t *testing.T) { t.Errorf("CreditCard should be updated with Append") } + if DB.Model(&user).Association("CreditCard").Count() != 1 { + t.Errorf("User's credit card count should be 1") + } + // Replace var creditcard3 = CreditCard{ Number: "411111111113", @@ -196,6 +218,10 @@ func TestHasOne(t *testing.T) { t.Errorf("CreditCard should be updated with Replace") } + if DB.Model(&user).Association("CreditCard").Count() != 1 { + t.Errorf("User's credit card count should be 1") + } + // Delete DB.Model(&user).Association("CreditCard").Delete(&creditcard2) var creditcard4 CreditCard @@ -204,11 +230,19 @@ func TestHasOne(t *testing.T) { t.Errorf("Should not delete credit card when Delete a unrelated CreditCard") } + if DB.Model(&user).Association("CreditCard").Count() != 1 { + t.Errorf("User's credit card count should be 1") + } + DB.Model(&user).Association("CreditCard").Delete(&creditcard3) if !DB.Model(&user).Related(&CreditCard{}).RecordNotFound() { t.Errorf("Should delete credit card with Delete") } + if DB.Model(&user).Association("CreditCard").Count() != 0 { + t.Errorf("User's credit card count should be 0 after Delete") + } + // Clear var creditcard5 = CreditCard{ Number: "411111111115", @@ -219,10 +253,18 @@ func TestHasOne(t *testing.T) { t.Errorf("Should added credit card with Append") } + if DB.Model(&user).Association("CreditCard").Count() != 1 { + t.Errorf("User's credit card count should be 1") + } + DB.Model(&user).Association("CreditCard").Clear() if !DB.Model(&user).Related(&CreditCard{}).RecordNotFound() { t.Errorf("Credit card should be deleted with Clear") } + + if DB.Model(&user).Association("CreditCard").Count() != 0 { + t.Errorf("User's credit card count should be 0 after Clear") + } } func TestHasMany(t *testing.T) { @@ -269,6 +311,10 @@ func TestHasMany(t *testing.T) { t.Errorf("Query has many relations with Related") } + if DB.Model(&post).Association("Comments").Count() != 2 { + t.Errorf("Post's comments count should be 2") + } + // Append DB.Model(&post).Association("Comments").Append(&Comment{Content: "Comment 3"}) @@ -278,6 +324,10 @@ func TestHasMany(t *testing.T) { t.Errorf("Append new record to has many relations") } + if DB.Model(&post).Association("Comments").Count() != 3 { + t.Errorf("Post's comments count should be 3 after Append") + } + // Delete DB.Model(&post).Association("Comments").Delete(comments11) @@ -287,13 +337,17 @@ func TestHasMany(t *testing.T) { t.Errorf("Delete an existing resource for has many relations") } + if DB.Model(&post).Association("Comments").Count() != 1 { + t.Errorf("Post's comments count should be 1 after Delete 2") + } + // Replace DB.Model(&Post{Id: 999}).Association("Comments").Replace() var comments4 []Comment DB.Model(&post).Related(&comments4) if len(comments4) == 0 { - t.Errorf("Replace should not clear all comments") + t.Errorf("Replace for other resource should not clear all comments") } DB.Model(&post).Association("Comments").Replace(&Comment{Content: "Comment 4"}, &Comment{Content: "Comment 5"})