-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathrepository_test.go
99 lines (72 loc) · 1.53 KB
/
repository_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
package midgard_test
import (
"fmt"
"testing"
"errors"
"os"
"github.com/it-chain/midgard"
"github.com/it-chain/midgard/store"
"github.com/it-chain/midgard/store/leveldb"
"github.com/stretchr/testify/assert"
)
//aggregate
type UserAggregate struct {
Name string
midgard.EventModel
}
func (u *UserAggregate) On(event midgard.Event) error {
switch v := event.(type) {
case *UserCreated:
u.ID = v.ID
case *UserUpdated:
u.Name = v.Name
default:
return errors.New(fmt.Sprintf("unhandled event [%s]", v))
}
return nil
}
//event
type UserCreated struct {
midgard.EventModel
}
//event
type UserUpdated struct {
Name string
midgard.EventModel
}
func TestNewRepository(t *testing.T) {
path := "test"
defer os.RemoveAll(path)
store := leveldb.NewEventStore(path, store.NewSerializer(UserCreated{}, UserUpdated{}))
r := midgard.NewRepo(store, nil)
aggregateID := "123"
err := r.Save(aggregateID, UserCreated{
EventModel: midgard.EventModel{
ID: aggregateID,
Type: "User",
},
})
assert.NoError(t, err)
err = r.Save(aggregateID, UserUpdated{
EventModel: midgard.EventModel{
ID: aggregateID,
Type: "User",
},
Name: "jun",
})
assert.NoError(t, err)
err = r.Save(aggregateID, UserUpdated{
EventModel: midgard.EventModel{
ID: aggregateID,
Type: "User",
},
Name: "jun2",
})
assert.NoError(t, err)
user := &UserAggregate{}
err = r.Load(user, aggregateID)
assert.NoError(t, err)
assert.Equal(t, user.ID, aggregateID)
assert.Equal(t, user.Name, "jun2")
fmt.Println(user)
}