op_set_metadata_test.go

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