github.com/rjgonzale/pop/v5@v5.1.3-dev/model_test.go (about) 1 package pop 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 10 "github.com/gobuffalo/pop/v5/testdata/models/a" 11 "github.com/gobuffalo/pop/v5/testdata/models/b" 12 ) 13 14 func Test_Model_TableName(t *testing.T) { 15 r := require.New(t) 16 17 m := Model{Value: User{}} 18 r.Equal(m.TableName(), "users") 19 20 m = Model{Value: &User{}} 21 r.Equal(m.TableName(), "users") 22 23 m = Model{Value: &Users{}} 24 r.Equal(m.TableName(), "users") 25 26 m = Model{Value: []User{}} 27 r.Equal(m.TableName(), "users") 28 29 m = Model{Value: &[]User{}} 30 r.Equal(m.TableName(), "users") 31 32 m = Model{Value: []*User{}} 33 r.Equal(m.TableName(), "users") 34 35 } 36 37 type tn struct{} 38 39 func (tn) TableName() string { 40 return "this is my table name" 41 } 42 43 // A failing test case for #477 44 func Test_TableNameCache(t *testing.T) { 45 r := assert.New(t) 46 r.Equal("usera", (&Model{Value: a.User{}}).TableName()) 47 r.Equal("userb", (&Model{Value: b.User{}}).TableName()) 48 r.Equal("usera", (&Model{Value: []a.User{}}).TableName()) 49 r.Equal("userb", (&Model{Value: []b.User{}}).TableName()) 50 } 51 52 func Test_TableName(t *testing.T) { 53 r := require.New(t) 54 55 cases := []interface{}{ 56 tn{}, 57 []tn{}, 58 } 59 for _, tc := range cases { 60 m := Model{Value: tc} 61 r.Equal("this is my table name", m.TableName()) 62 } 63 } 64 65 type TimeTimestamp struct { 66 ID int `db:"id"` 67 CreatedAt time.Time `db:"created_at"` 68 UpdatedAt time.Time `db:"updated_at"` 69 } 70 71 type UnixTimestamp struct { 72 ID int `db:"id"` 73 CreatedAt int `db:"created_at"` 74 UpdatedAt int `db:"updated_at"` 75 } 76 77 func Test_Touch_Time_Timestamp(t *testing.T) { 78 r := require.New(t) 79 80 m := Model{Value: &TimeTimestamp{}} 81 82 // Override time.Now() 83 t0, _ := time.Parse(time.RFC3339, "2019-07-14T00:00:00Z") 84 nowFunc = func() time.Time { return t0 } 85 defer func() { nowFunc = time.Now }() 86 87 m.touchCreatedAt() 88 m.touchUpdatedAt() 89 v := m.Value.(*TimeTimestamp) 90 r.Equal(t0, v.CreatedAt) 91 r.Equal(t0, v.UpdatedAt) 92 } 93 94 func Test_Touch_Time_Timestamp_With_Existing_Value(t *testing.T) { 95 r := require.New(t) 96 97 // Override time.Now() 98 t0, _ := time.Parse(time.RFC3339, "2019-07-14T00:00:00Z") 99 nowFunc = func() time.Time { return t0 } 100 defer func() { nowFunc = time.Now }() 101 102 createdAt := nowFunc().Add(-36 * time.Hour) 103 104 m := Model{Value: &TimeTimestamp{CreatedAt: createdAt}} 105 m.touchCreatedAt() 106 m.touchUpdatedAt() 107 v := m.Value.(*TimeTimestamp) 108 r.Equal(createdAt, v.CreatedAt) 109 r.Equal(t0, v.UpdatedAt) 110 } 111 112 func Test_Touch_Unix_Timestamp(t *testing.T) { 113 r := require.New(t) 114 115 m := Model{Value: &UnixTimestamp{}} 116 117 // Override time.Now() 118 t0, _ := time.Parse(time.RFC3339, "2019-07-14T00:00:00Z") 119 nowFunc = func() time.Time { return t0 } 120 defer func() { nowFunc = time.Now }() 121 122 m.touchCreatedAt() 123 m.touchUpdatedAt() 124 v := m.Value.(*UnixTimestamp) 125 r.Equal(int(t0.Unix()), v.CreatedAt) 126 r.Equal(int(t0.Unix()), v.UpdatedAt) 127 } 128 129 func Test_Touch_Unix_Timestamp_With_Existing_Value(t *testing.T) { 130 r := require.New(t) 131 132 // Override time.Now() 133 t0, _ := time.Parse(time.RFC3339, "2019-07-14T00:00:00Z") 134 nowFunc = func() time.Time { return t0 } 135 defer func() { nowFunc = time.Now }() 136 137 createdAt := int(time.Now().Add(-36 * time.Hour).Unix()) 138 139 m := Model{Value: &UnixTimestamp{CreatedAt: createdAt}} 140 m.touchCreatedAt() 141 m.touchUpdatedAt() 142 v := m.Value.(*UnixTimestamp) 143 r.Equal(createdAt, v.CreatedAt) 144 r.Equal(int(t0.Unix()), v.UpdatedAt) 145 } 146 147 func Test_IDField(t *testing.T) { 148 r := require.New(t) 149 150 type testCustomID struct { 151 ID int `db:"custom_id"` 152 } 153 m := Model{Value: &testCustomID{ID: 1}} 154 r.Equal("custom_id", m.IDField()) 155 156 type testNormalID struct { 157 ID int 158 } 159 m = Model{Value: &testNormalID{ID: 1}} 160 r.Equal("id", m.IDField()) 161 }