-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreate-entity-ev_test.go
107 lines (88 loc) · 2.25 KB
/
create-entity-ev_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
package event
import (
"context"
"testing"
"github.com/HouzuoGuo/tiedot/db"
"github.com/ajainc/chain/ctx/docdb"
"github.com/ajainc/chain/ctx/docdb/dbtestutil"
"github.com/ajainc/chain/ctx/logger"
"github.com/ajainc/chain/event/dao"
"github.com/ajainc/chain/grpc/gen"
"github.com/stretchr/testify/assert"
)
type crateEntityTestData struct {
input []CreateEntityEv
expected []gen.Entity
optionalCheck func(string, int, *db.DB, CreateEntityEv, gen.Entity, gen.Entity)
errChech func(string, error)
redoCheck func(string, int, *db.DB, CreateEntityEv)
}
func TestCreateEntity(t *testing.T) {
var datas []crateEntityTestData
{
input := gen.Entity{
ObjectID: "test_id",
Coord: &gen.Coord{
X: 110.5,
Y: 223.2,
},
WidthHeight: &gen.WidthHeight{
W: 1000.1,
H: 800.2,
},
Columns: []*gen.Column{},
}
expected := input
expected.Name = "NewEntity"
d := crateEntityTestData{}
d.input = []CreateEntityEv{{Entity: input}}
d.expected = []gen.Entity{expected}
datas = append(datas, d)
}
for _, data := range datas {
doErrCheck := data.errChech != nil
didErrCheck := false
doRedoCheck := data.redoCheck != nil
c := context.Background()
c, _ = logger.WithContext(c, logger.DiscardLogger)
c, closeDB, err := dbtestutil.WithTestDBContext(c)
errCheckIfNeed := func(data crateEntityTestData, err error) {
if err != nil {
// test error case if func for check is set
if doErrCheck {
didErrCheck = true
data.errChech("errCheck", err)
} else {
t.Error(err)
}
}
}
func() {
defer closeDB()
if err != nil {
panic(err)
}
d := docdb.FromContext(c)
for idx, ev := range data.input {
err = ev.Exec(c)
if err != nil {
// test error case if func for check is set
errCheckIfNeed(data, err)
continue
}
_, result, err := docdb.GetByObjectID(d, docdb.COLL_ENTITY, ev.Entity.ObjectID)
errCheckIfNeed(data, err)
var actual gen.Entity
err = dao.UnmarshalEntity(result, &actual)
errCheckIfNeed(data, err)
assert.Equal(t, data.expected[idx], actual)
if doRedoCheck {
data.redoCheck("redocheck", idx, d, ev)
}
}
if doErrCheck && !didErrCheck {
t.Error("error check has never ran")
}
}()
}
}