1package bug
2
3import (
4 "encoding/json"
5 "testing"
6 "time"
7
8 "github.com/MichaelMure/git-bug/identity"
9 "github.com/MichaelMure/git-bug/util/git"
10 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/require"
12)
13
14func TestOperationPackSerialize(t *testing.T) {
15 opp := &OperationPack{}
16
17 rene := identity.NewBare("René Descartes", "rene@descartes.fr")
18 createOp := NewCreateOp(rene, time.Now().Unix(), "title", "message", nil)
19 setTitleOp := NewSetTitleOp(rene, time.Now().Unix(), "title2", "title1")
20 addCommentOp := NewAddCommentOp(rene, time.Now().Unix(), "message2", nil)
21 setStatusOp := NewSetStatusOp(rene, time.Now().Unix(), ClosedStatus)
22 labelChangeOp := NewLabelChangeOperation(rene, time.Now().Unix(), []Label{"added"}, []Label{"removed"})
23
24 opp.Append(createOp)
25 opp.Append(setTitleOp)
26 opp.Append(addCommentOp)
27 opp.Append(setStatusOp)
28 opp.Append(labelChangeOp)
29
30 opMeta := NewSetTitleOp(rene, time.Now().Unix(), "title3", "title2")
31 opMeta.SetMetadata("key", "value")
32 opp.Append(opMeta)
33
34 assert.Equal(t, 1, len(opMeta.Metadata))
35
36 opFile := NewAddCommentOp(rene, time.Now().Unix(), "message", []git.Hash{
37 "abcdef",
38 "ghijkl",
39 })
40 opp.Append(opFile)
41
42 assert.Equal(t, 2, len(opFile.Files))
43
44 data, err := json.Marshal(opp)
45 assert.NoError(t, err)
46
47 var opp2 *OperationPack
48 err = json.Unmarshal(data, &opp2)
49 assert.NoError(t, err)
50
51 ensureHash(t, opp)
52
53 assert.Equal(t, opp, opp2)
54}
55
56func ensureHash(t *testing.T, opp *OperationPack) {
57 for _, op := range opp.Operations {
58 _, err := op.Hash()
59 require.NoError(t, err)
60 }
61}