1package bug
2
3import (
4 "encoding/json"
5 "testing"
6 "time"
7
8 "github.com/MichaelMure/git-bug/identity"
9 "github.com/stretchr/testify/assert"
10)
11
12func TestSetMetadata(t *testing.T) {
13 snapshot := Snapshot{}
14
15 var rene = identity.NewIdentity("René Descartes", "rene@descartes.fr")
16
17 unix := time.Now().Unix()
18
19 create := NewCreateOp(rene, unix, "title", "create", nil)
20 create.SetMetadata("key", "value")
21 create.Apply(&snapshot)
22 snapshot.Operations = append(snapshot.Operations, create)
23
24 hash1, err := create.Hash()
25 if err != nil {
26 t.Fatal(err)
27 }
28
29 comment := NewAddCommentOp(rene, unix, "comment", nil)
30 comment.SetMetadata("key2", "value2")
31 comment.Apply(&snapshot)
32 snapshot.Operations = append(snapshot.Operations, comment)
33
34 hash2, err := comment.Hash()
35 if err != nil {
36 t.Fatal(err)
37 }
38
39 op1 := NewSetMetadataOp(rene, unix, hash1, map[string]string{
40 "key": "override",
41 "key2": "value",
42 })
43
44 op1.Apply(&snapshot)
45 snapshot.Operations = append(snapshot.Operations, op1)
46
47 createMetadata := snapshot.Operations[0].AllMetadata()
48 assert.Equal(t, len(createMetadata), 2)
49 // original key is not overrided
50 assert.Equal(t, createMetadata["key"], "value")
51 // new key is set
52 assert.Equal(t, createMetadata["key2"], "value")
53
54 commentMetadata := snapshot.Operations[1].AllMetadata()
55 assert.Equal(t, len(commentMetadata), 1)
56 assert.Equal(t, commentMetadata["key2"], "value2")
57
58 op2 := NewSetMetadataOp(rene, unix, hash2, map[string]string{
59 "key2": "value",
60 "key3": "value3",
61 })
62
63 op2.Apply(&snapshot)
64 snapshot.Operations = append(snapshot.Operations, op2)
65
66 createMetadata = snapshot.Operations[0].AllMetadata()
67 assert.Equal(t, len(createMetadata), 2)
68 assert.Equal(t, createMetadata["key"], "value")
69 assert.Equal(t, createMetadata["key2"], "value")
70
71 commentMetadata = snapshot.Operations[1].AllMetadata()
72 assert.Equal(t, len(commentMetadata), 2)
73 // original key is not overrided
74 assert.Equal(t, commentMetadata["key2"], "value2")
75 // new key is set
76 assert.Equal(t, commentMetadata["key3"], "value3")
77
78 op3 := NewSetMetadataOp(rene, unix, hash1, map[string]string{
79 "key": "override",
80 "key2": "override",
81 })
82
83 op3.Apply(&snapshot)
84 snapshot.Operations = append(snapshot.Operations, op3)
85
86 createMetadata = snapshot.Operations[0].AllMetadata()
87 assert.Equal(t, len(createMetadata), 2)
88 // original key is not overrided
89 assert.Equal(t, createMetadata["key"], "value")
90 // previously set key is not overrided
91 assert.Equal(t, createMetadata["key2"], "value")
92
93 commentMetadata = snapshot.Operations[1].AllMetadata()
94 assert.Equal(t, len(commentMetadata), 2)
95 assert.Equal(t, commentMetadata["key2"], "value2")
96 assert.Equal(t, commentMetadata["key3"], "value3")
97}
98
99func TestSetMetadataSerialize(t *testing.T) {
100 var rene = identity.NewBare("René Descartes", "rene@descartes.fr")
101 unix := time.Now().Unix()
102 before := NewSetMetadataOp(rene, unix, "message", map[string]string{
103 "key1": "value1",
104 "key2": "value2",
105 })
106
107 data, err := json.Marshal(before)
108 assert.NoError(t, err)
109
110 var after SetMetadataOperation
111 err = json.Unmarshal(data, &after)
112 assert.NoError(t, err)
113
114 assert.Equal(t, before, &after)
115}