| 316 | } |
| 317 | |
| 318 | func TestSelectWithUpdateWithMap(t *testing.T) { |
| 319 | user := *GetUser("select_update_map", Config{Account: true, Pets: 3, Toys: 3, Company: true, Manager: true, Team: 3, Languages: 3, Friends: 4}) |
| 320 | DB.Create(&user) |
| 321 | |
| 322 | var result User |
| 323 | DB.First(&result, user.ID) |
| 324 | |
| 325 | user2 := *GetUser("select_update_map_new", Config{Account: true, Pets: 3, Toys: 3, Company: true, Manager: true, Team: 3, Languages: 3, Friends: 4}) |
| 326 | updateValues := map[string]interface{}{ |
| 327 | "Name": user2.Name, |
| 328 | "Age": 50, |
| 329 | "Account": user2.Account, |
| 330 | "Pets": user2.Pets, |
| 331 | "Toys": user2.Toys, |
| 332 | "Company": user2.Company, |
| 333 | "Manager": user2.Manager, |
| 334 | "Team": user2.Team, |
| 335 | "Languages": user2.Languages, |
| 336 | "Friends": user2.Friends, |
| 337 | } |
| 338 | |
| 339 | DB.Model(&result).Omit("name", "updated_at").Updates(updateValues) |
| 340 | |
| 341 | var result2 User |
| 342 | DB.Preload("Account").Preload("Pets").Preload("Toys").Preload("Company").Preload("Manager").Preload("Team").Preload("Languages").Preload("Friends").First(&result2, user.ID) |
| 343 | |
| 344 | result.Languages = append(user.Languages, result.Languages...) |
| 345 | result.Toys = append(user.Toys, result.Toys...) |
| 346 | |
| 347 | sort.Slice(result.Languages, func(i, j int) bool { |
| 348 | return strings.Compare(result.Languages[i].Code, result.Languages[j].Code) > 0 |
| 349 | }) |
| 350 | |
| 351 | sort.Slice(result.Toys, func(i, j int) bool { |
| 352 | return result.Toys[i].ID < result.Toys[j].ID |
| 353 | }) |
| 354 | |
| 355 | sort.Slice(result2.Languages, func(i, j int) bool { |
| 356 | return strings.Compare(result2.Languages[i].Code, result2.Languages[j].Code) > 0 |
| 357 | }) |
| 358 | |
| 359 | sort.Slice(result2.Toys, func(i, j int) bool { |
| 360 | return result2.Toys[i].ID < result2.Toys[j].ID |
| 361 | }) |
| 362 | |
| 363 | AssertObjEqual(t, result2, result, "Name", "Account", "Toys", "Manager", "ManagerID", "Languages") |
| 364 | } |
| 365 | |
| 366 | func TestWithUpdateWithInvalidMap(t *testing.T) { |
| 367 | user := *GetUser("update_with_invalid_map", Config{}) |