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