field_test.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package schema_test
  2. import (
  3. "reflect"
  4. "sync"
  5. "testing"
  6. "time"
  7. "github.com/jinzhu/gorm"
  8. "github.com/jinzhu/gorm/schema"
  9. "github.com/jinzhu/gorm/tests"
  10. )
  11. func TestFieldValuerAndSetter(t *testing.T) {
  12. var (
  13. cacheMap = sync.Map{}
  14. userSchema, _ = schema.Parse(&tests.User{}, &cacheMap, schema.NamingStrategy{})
  15. user = tests.User{
  16. Model: gorm.Model{
  17. ID: 10,
  18. CreatedAt: time.Now(),
  19. DeletedAt: tests.Now(),
  20. },
  21. Name: "valuer_and_setter",
  22. Age: 18,
  23. Birthday: tests.Now(),
  24. }
  25. reflectValue = reflect.ValueOf(user)
  26. )
  27. values := map[string]interface{}{
  28. "name": user.Name,
  29. "id": user.ID,
  30. "created_at": user.CreatedAt,
  31. "deleted_at": user.DeletedAt,
  32. "age": user.Age,
  33. "birthday": user.Birthday,
  34. }
  35. for k, v := range values {
  36. if rv := userSchema.FieldsByDBName[k].ValueOf(reflectValue); rv != v {
  37. t.Errorf("user's %v value should equal %+v, but got %+v", k, v, rv)
  38. }
  39. }
  40. newValues := map[string]interface{}{
  41. "name": "valuer_and_setter_2",
  42. "id": "2",
  43. "created_at": time.Now(),
  44. "deleted_at": tests.Now(),
  45. "age": 20,
  46. "birthday": time.Now(),
  47. }
  48. for k, v := range newValues {
  49. if err := userSchema.FieldsByDBName[k].Set(reflectValue, v); err != nil {
  50. t.Errorf("no error should happen when assign value to field %v", k)
  51. }
  52. if rv := userSchema.FieldsByDBName[k].ValueOf(reflectValue); rv != v {
  53. t.Errorf("user's %v value should equal %+v after assign new value, but got %+v", k, v, rv)
  54. }
  55. }
  56. }