-
Notifications
You must be signed in to change notification settings - Fork 3
/
tester.go
139 lines (109 loc) · 2.54 KB
/
tester.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
132
133
134
135
136
137
138
139
package coal
import "github.com/globalsign/mgo/bson"
// A Tester provides facilities to the test a fire API.
type Tester struct {
// The store to use for cleaning the database.
Store *Store
// The registered models.
Models []Model
}
// NewTester returns a new tester.
func NewTester(store *Store, models ...Model) *Tester {
return &Tester{
Store: store,
Models: models,
}
}
// Clean will remove the collections of models that have been registered and
// reset the header map.
func (t *Tester) Clean() {
store := t.Store.Copy()
defer store.Close()
for _, model := range t.Models {
// remove all is faster than dropping the collection
_, err := store.C(model).RemoveAll(nil)
if err != nil {
panic(err)
}
}
}
// Save will save the specified model.
func (t *Tester) Save(model Model) Model {
store := t.Store.Copy()
defer store.Close()
// initialize model
model = Init(model)
// insert to collection
err := store.C(model).Insert(model)
if err != nil {
panic(err)
}
return model
}
// FindAll will return all saved models.
func (t *Tester) FindAll(model Model) interface{} {
store := t.Store.Copy()
defer store.Close()
// initialize model
model = Init(model)
// find all documents
list := model.Meta().MakeSlice()
err := store.C(model).Find(nil).Sort("-_id").All(list)
if err != nil {
panic(err)
}
// initialize list
InitSlice(list)
return list
}
// FindLast will return the last saved model.
func (t *Tester) FindLast(model Model) Model {
store := t.Store.Copy()
defer store.Close()
// find last document
err := store.C(model).Find(nil).Sort("-_id").One(model)
if err != nil {
panic(err)
}
// initialize model
Init(model)
return model
}
// Fetch will return the saved model.
func (t *Tester) Fetch(model Model, id bson.ObjectId) Model {
store := t.Store.Copy()
defer store.Close()
// find specific document
err := store.C(model).FindId(id).One(model)
if err != nil {
panic(err)
}
// initialize model
Init(model)
return model
}
// Update will update the specified model.
func (t *Tester) Update(model Model) Model {
store := t.Store.Copy()
defer store.Close()
// initialize model
model = Init(model)
// insert to collection
err := store.C(model).UpdateId(model.ID(), model)
if err != nil {
panic(err)
}
return model
}
// Delete will delete the specified model.
func (t *Tester) Delete(model Model) {
store := t.Store.Copy()
defer store.Close()
// initialize model
model = Init(model)
// insert to collection
err := store.C(model).RemoveId(model.ID())
if err != nil {
panic(err)
}
}