op_set_metadata_test.go

  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}