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