1package entity
2
3import (
4 "encoding/json"
5 "fmt"
6 "testing"
7
8 "github.com/stretchr/testify/require"
9
10 "github.com/MichaelMure/git-bug/repository"
11)
12
13// func TestFoo(t *testing.T) {
14// repo, err := repository.OpenGoGitRepo("~/dev/git-bug", nil)
15// require.NoError(t, err)
16//
17// b, err := ReadBug(repo, Id("8b22e548c93a6ed23c31fd4e337c6286c3d1e5c9cae5537bc8e5842e11bd1099"))
18// require.NoError(t, err)
19//
20// fmt.Println(b)
21// }
22
23type op1 struct {
24 OperationType int `json:"type"`
25 Field1 string `json:"field_1"`
26}
27
28func newOp1(field1 string) *op1 {
29 return &op1{OperationType: 1, Field1: field1}
30}
31
32func (o op1) Id() Id {
33 data, _ := json.Marshal(o)
34 return DeriveId(data)
35}
36
37func (o op1) Validate() error { return nil }
38
39type op2 struct {
40 OperationType int `json:"type"`
41 Field2 string `json:"field_2"`
42}
43
44func newOp2(field2 string) *op2 {
45 return &op2{OperationType: 2, Field2: field2}
46}
47
48func (o op2) Id() Id {
49 data, _ := json.Marshal(o)
50 return DeriveId(data)
51}
52
53func (o op2) Validate() error { return nil }
54
55var def = Definition{
56 typename: "foo",
57 namespace: "foos",
58 operationUnmarshaler: unmarshaller,
59 formatVersion: 1,
60}
61
62func unmarshaller(raw json.RawMessage) (Operation, error) {
63 var t struct {
64 OperationType int `json:"type"`
65 }
66
67 if err := json.Unmarshal(raw, &t); err != nil {
68 return nil, err
69 }
70
71 switch t.OperationType {
72 case 1:
73 op := &op1{}
74 err := json.Unmarshal(raw, &op)
75 return op, err
76 case 2:
77 op := &op2{}
78 err := json.Unmarshal(raw, &op)
79 return op, err
80 default:
81 return nil, fmt.Errorf("unknown operation type %v", t.OperationType)
82 }
83}
84
85func TestWriteRead(t *testing.T) {
86 repo := repository.NewMockRepo()
87
88 entity := New(def)
89 require.False(t, entity.NeedCommit())
90
91 entity.Append(newOp1("foo"))
92 entity.Append(newOp2("bar"))
93
94 require.True(t, entity.NeedCommit())
95 require.NoError(t, entity.CommitAdNeeded(repo))
96 require.False(t, entity.NeedCommit())
97
98 entity.Append(newOp2("foobar"))
99 require.True(t, entity.NeedCommit())
100 require.NoError(t, entity.CommitAdNeeded(repo))
101 require.False(t, entity.NeedCommit())
102
103 read, err := Read(def, repo, entity.Id())
104 require.NoError(t, err)
105
106 fmt.Println(*read)
107}