op_set_metadata_test.go

 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}