forked from mirror/gorm
Update association tests
This commit is contained in:
parent
4c1f03fee3
commit
a563efdd27
|
@ -257,8 +257,8 @@ func (association *Association) Delete(values ...interface{}) *Association {
|
||||||
|
|
||||||
association.Field.Set(leftValues)
|
association.Field.Set(leftValues)
|
||||||
} else if association.Field.Field.Kind() == reflect.Struct {
|
} else if association.Field.Field.Kind() == reflect.Struct {
|
||||||
|
primaryKey := association.getPrimaryKeys(deletingResourcePrimaryFieldNames, association.Field.Field.Interface())[0]
|
||||||
for _, pk := range deletingPrimaryKeys {
|
for _, pk := range deletingPrimaryKeys {
|
||||||
primaryKey := association.getPrimaryKeys(deletingResourcePrimaryFieldNames, association.Field.Field)[0]
|
|
||||||
if equalAsString(primaryKey, pk) {
|
if equalAsString(primaryKey, pk) {
|
||||||
association.Field.Set(reflect.Zero(association.Field.Field.Type()))
|
association.Field.Set(reflect.Zero(association.Field.Field.Type()))
|
||||||
break
|
break
|
||||||
|
|
|
@ -97,14 +97,20 @@ func TestBelongsTo(t *testing.T) {
|
||||||
|
|
||||||
// Delete
|
// Delete
|
||||||
DB.Model(&post).Association("Category").Delete(&category2)
|
DB.Model(&post).Association("Category").Delete(&category2)
|
||||||
fmt.Println(post)
|
|
||||||
fmt.Println(post.Category)
|
|
||||||
if DB.Model(&post).Related(&Category{}).RecordNotFound() {
|
if DB.Model(&post).Related(&Category{}).RecordNotFound() {
|
||||||
t.Errorf("Should not delete any category when Delete a unrelated Category")
|
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)
|
DB.Model(&post).Association("Category").Delete(&category3)
|
||||||
|
|
||||||
|
if post.Category.Name != "" {
|
||||||
|
t.Errorf("Post's category should be reseted after Delete")
|
||||||
|
}
|
||||||
|
|
||||||
var category41 Category
|
var category41 Category
|
||||||
DB.Model(&post).Related(&category41)
|
DB.Model(&post).Related(&category41)
|
||||||
if category41.Name != "" {
|
if category41.Name != "" {
|
||||||
|
@ -124,8 +130,16 @@ func TestBelongsTo(t *testing.T) {
|
||||||
t.Errorf("Should find category after append")
|
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()
|
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() {
|
if !DB.Model(&post).Related(&Category{}).RecordNotFound() {
|
||||||
t.Errorf("Should not find any category after Clear")
|
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")
|
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
|
// Append
|
||||||
var creditcard2 = CreditCard{
|
var creditcard2 = CreditCard{
|
||||||
Number: "411111111112",
|
Number: "411111111112",
|
||||||
|
@ -180,6 +198,10 @@ func TestHasOne(t *testing.T) {
|
||||||
t.Errorf("CreditCard should be updated with Append")
|
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
|
// Replace
|
||||||
var creditcard3 = CreditCard{
|
var creditcard3 = CreditCard{
|
||||||
Number: "411111111113",
|
Number: "411111111113",
|
||||||
|
@ -196,6 +218,10 @@ func TestHasOne(t *testing.T) {
|
||||||
t.Errorf("CreditCard should be updated with Replace")
|
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
|
// Delete
|
||||||
DB.Model(&user).Association("CreditCard").Delete(&creditcard2)
|
DB.Model(&user).Association("CreditCard").Delete(&creditcard2)
|
||||||
var creditcard4 CreditCard
|
var creditcard4 CreditCard
|
||||||
|
@ -204,11 +230,19 @@ func TestHasOne(t *testing.T) {
|
||||||
t.Errorf("Should not delete credit card when Delete a unrelated CreditCard")
|
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)
|
DB.Model(&user).Association("CreditCard").Delete(&creditcard3)
|
||||||
if !DB.Model(&user).Related(&CreditCard{}).RecordNotFound() {
|
if !DB.Model(&user).Related(&CreditCard{}).RecordNotFound() {
|
||||||
t.Errorf("Should delete credit card with Delete")
|
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
|
// Clear
|
||||||
var creditcard5 = CreditCard{
|
var creditcard5 = CreditCard{
|
||||||
Number: "411111111115",
|
Number: "411111111115",
|
||||||
|
@ -219,10 +253,18 @@ func TestHasOne(t *testing.T) {
|
||||||
t.Errorf("Should added credit card with Append")
|
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()
|
DB.Model(&user).Association("CreditCard").Clear()
|
||||||
if !DB.Model(&user).Related(&CreditCard{}).RecordNotFound() {
|
if !DB.Model(&user).Related(&CreditCard{}).RecordNotFound() {
|
||||||
t.Errorf("Credit card should be deleted with Clear")
|
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) {
|
func TestHasMany(t *testing.T) {
|
||||||
|
@ -269,6 +311,10 @@ func TestHasMany(t *testing.T) {
|
||||||
t.Errorf("Query has many relations with Related")
|
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
|
// Append
|
||||||
DB.Model(&post).Association("Comments").Append(&Comment{Content: "Comment 3"})
|
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")
|
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
|
// Delete
|
||||||
DB.Model(&post).Association("Comments").Delete(comments11)
|
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")
|
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
|
// Replace
|
||||||
DB.Model(&Post{Id: 999}).Association("Comments").Replace()
|
DB.Model(&Post{Id: 999}).Association("Comments").Replace()
|
||||||
|
|
||||||
var comments4 []Comment
|
var comments4 []Comment
|
||||||
DB.Model(&post).Related(&comments4)
|
DB.Model(&post).Related(&comments4)
|
||||||
if len(comments4) == 0 {
|
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"})
|
DB.Model(&post).Association("Comments").Replace(&Comment{Content: "Comment 4"}, &Comment{Content: "Comment 5"})
|
||||||
|
|
Loading…
Reference in New Issue