-
Notifications
You must be signed in to change notification settings - Fork 0
/
model_test.go
88 lines (77 loc) · 1.57 KB
/
model_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package utils
import (
"testing"
"errors"
"reflect"
"github.com/stretchr/testify/assert"
)
type testMod2 struct {
Model
}
type testMod struct {
Model
Field1 string
Field2 string
Field3 string
Field4 int `gorm:"-"`
Field5 int
}
func newMod() *testMod {
m := &testMod{}
m.SetParent(m)
m.SetDB(_db)
return m
}
func newMod2() *testMod2 {
m := &testMod2{}
m.SetParent(m)
return m
}
func (m *testMod) IsValid() error {
return errors.New("error for test")
}
func TestModel_IsValid(t *testing.T) {
mod := newMod()
mod2 := newMod2()
if mod.UpsertLight() == nil {
t.Fatal("check mod.IsValid failed")
}
err := mod2.UpsertLight()
if err != nil {
t.Fatal("check mod2.IsValid failed")
}
t.Log("IsVaild Pass")
}
func checkInterface(m IModel) bool {
return true
}
func TestGetIDs(t *testing.T) {
m := &Model{}
checkInterface(m)
}
type TestA struct {
Model
FieldB uint32
}
func TestModel_New(t *testing.T) {
a := &TestA{}
a.ID = 1
a.SetParent(a)
ta := reflect.TypeOf(a).Elem()
n := reflect.New(ta)
nele := n.Elem()
for i := 0; i < nele.NumField(); i++ {
t.Log(nele.Field(i).Type().String())
}
nele.FieldByName("Model").Set(reflect.ValueOf(Model{ID: 2}))
b := PtrOf(a)
reflect.ValueOf(b).Elem().FieldByName("Model").Set(reflect.ValueOf(Model{ID: 3}))
assert.Equal(t, uint32(2), nele.Addr().Interface().(*TestA).ID)
assert.Equal(t, uint32(1), a.ID)
assert.Equal(t, uint32(3), b.(*TestA).ID)
}
func TestModel_GetFieldsSql(t *testing.T) {
mod := newMod()
t.Log(mod.GetFieldsSql([]string{"field3"}, "b.", ""))
t.Log(mod.GetFieldsSql([]string{"field3"}, "b.", "c_"))
}