Browse Source

Update association tests

Jinzhu 8 years ago
parent
commit
a563efdd27
2 changed files with 58 additions and 4 deletions
  1. 1 1
      association.go
  2. 57 3
      association_test.go

+ 1 - 1
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

+ 57 - 3
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"})