forked from geoffreybauduin/yaorm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexecutorhook_test.go
131 lines (120 loc) · 3.85 KB
/
executorhook_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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package yaorm_test
import (
"context"
"os"
"testing"
"github.com/geoffreybauduin/yaorm"
"github.com/geoffreybauduin/yaorm/yaormfilter"
"github.com/stretchr/testify/assert"
)
type customExecutorHookForTesting struct {
yaorm.DefaultExecutorHook
query string
args []interface{}
}
var query_ string
var args_ []interface{}
func register(query string, args ...interface{}) {
query_ = query
args_ = args
}
func (h *customExecutorHookForTesting) BeforeSelectOne(ctx context.Context, query string, args ...interface{}) {
register(query, args...)
}
func (h *customExecutorHookForTesting) AfterSelectOne(ctx context.Context, query string, args ...interface{}) {
register(query, args...)
}
func (h *customExecutorHookForTesting) BeforeSelect(ctx context.Context, query string, args ...interface{}) {
register(query, args...)
}
func (h *customExecutorHookForTesting) AfterSelect(ctx context.Context, query string, args ...interface{}) {
register(query, args...)
}
func (h *customExecutorHookForTesting) BeforeInsert(ctx context.Context, query string, args ...interface{}) {
register(query, args...)
}
func (h *customExecutorHookForTesting) BeforeUpdate(ctx context.Context, query string, args ...interface{}) {
register(query, args...)
}
func (h *customExecutorHookForTesting) BeforeDelete(ctx context.Context, query string, args ...interface{}) {
register(query, args...)
}
type fakeModel struct {
yaorm.DatabaseModel
ID int64 `db:"id"`
Name string `db:"name"`
}
type fakeModelFilter struct {
yaormfilter.ModelFilter
}
func TestExecutorHook_BeforeSelectOne(t *testing.T) {
defer func() {
os.Remove("/tmp/test_test.sqlite")
yaorm.UnregisterDB("test")
}()
yaorm.NewTable("test", "model", &fakeModel{}).WithFilter(&fakeModelFilter{})
err := yaorm.RegisterDB(&yaorm.DatabaseConfiguration{
Name: "test",
DSN: "/tmp/test_test.sqlite",
System: yaorm.DatabaseSqlite3,
AutoCreateTables: true,
ExecutorHook: &customExecutorHookForTesting{},
})
assert.Nil(t, err)
dbp, err := yaorm.NewDBProvider(context.TODO(), "test")
assert.Nil(t, err)
yaorm.GenericSelectOne(dbp, &fakeModelFilter{})
assert.Equal(t, `SELECT "model"."id", "model"."name" FROM "model" AS "model"`, query_)
assert.Len(t, args_, 0)
}
func TestExecutorHook_BeforeInsert(t *testing.T) {
defer func() {
os.Remove("/tmp/test_test.sqlite")
yaorm.UnregisterDB("test")
}()
yaorm.NewTable("test", "model", &fakeModel{}).WithFilter(&fakeModelFilter{})
err := yaorm.RegisterDB(&yaorm.DatabaseConfiguration{
Name: "test",
DSN: "/tmp/test_test.sqlite",
System: yaorm.DatabaseSqlite3,
AutoCreateTables: true,
ExecutorHook: &customExecutorHookForTesting{},
})
assert.Nil(t, err)
dbp, err := yaorm.NewDBProvider(context.TODO(), "test")
assert.Nil(t, err)
m := &fakeModel{Name: "test"}
m.SetDBP(dbp)
err = yaorm.GenericSave(m)
assert.Nil(t, err)
assert.Equal(t, `INSERT INTO model (name) VALUES ($1)`, query_)
assert.Len(t, args_, 1)
assert.Equal(t, args_[0], "test")
}
func TestExecutorHook_BeforeUpdate(t *testing.T) {
defer func() {
os.Remove("/tmp/test_test.sqlite")
yaorm.UnregisterDB("test")
}()
yaorm.NewTable("test", "model", &fakeModel{}).WithFilter(&fakeModelFilter{})
err := yaorm.RegisterDB(&yaorm.DatabaseConfiguration{
Name: "test",
DSN: "/tmp/test_test.sqlite",
System: yaorm.DatabaseSqlite3,
AutoCreateTables: true,
ExecutorHook: &customExecutorHookForTesting{},
})
assert.Nil(t, err)
dbp, err := yaorm.NewDBProvider(context.TODO(), "test")
assert.Nil(t, err)
m := &fakeModel{Name: "test"}
m.SetDBP(dbp)
err = yaorm.GenericSave(m)
assert.Nil(t, err)
err = yaorm.GenericSave(m)
assert.Nil(t, err)
assert.Equal(t, `UPDATE model SET name = $1 WHERE id = $2`, query_)
assert.Len(t, args_, 2)
assert.Equal(t, args_[0], "test")
assert.Equal(t, args_[1], m.ID)
}