op_set_metadata_test.go

  1package dag
  2
  3import (
  4	"testing"
  5	"time"
  6
  7	"github.com/MichaelMure/git-bug/entities/identity"
  8	"github.com/MichaelMure/git-bug/repository"
  9
 10	"github.com/stretchr/testify/require"
 11)
 12
 13type snapshotMock struct {
 14	ops []Operation
 15}
 16
 17func (s *snapshotMock) AllOperations() []Operation {
 18	return s.ops
 19}
 20
 21func TestSetMetadata(t *testing.T) {
 22	snap := &snapshotMock{}
 23
 24	repo := repository.NewMockRepo()
 25
 26	rene, err := identity.NewIdentity(repo, "René Descartes", "rene@descartes.fr")
 27	require.NoError(t, err)
 28
 29	unix := time.Now().Unix()
 30
 31	target1 := NewNoOpOp[*snapshotMock](1, rene, unix)
 32	target1.SetMetadata("key", "value")
 33	snap.ops = append(snap.ops, target1)
 34
 35	target2 := NewNoOpOp[*snapshotMock](1, rene, unix)
 36	target2.SetMetadata("key2", "value2")
 37	snap.ops = append(snap.ops, target2)
 38
 39	op1 := NewSetMetadataOp[*snapshotMock](2, rene, unix, target1.Id(), map[string]string{
 40		"key":  "override",
 41		"key2": "value",
 42	})
 43
 44	op1.Apply(snap)
 45	snap.ops = append(snap.ops, op1)
 46
 47	target1Metadata := snap.AllOperations()[0].AllMetadata()
 48	require.Len(t, target1Metadata, 2)
 49	// original key is not overrided
 50	require.Equal(t, target1Metadata["key"], "value")
 51	// new key is set
 52	require.Equal(t, target1Metadata["key2"], "value")
 53
 54	target2Metadata := snap.AllOperations()[1].AllMetadata()
 55	require.Len(t, target2Metadata, 1)
 56	require.Equal(t, target2Metadata["key2"], "value2")
 57
 58	op2 := NewSetMetadataOp[*snapshotMock](2, rene, unix, target2.Id(), map[string]string{
 59		"key2": "value",
 60		"key3": "value3",
 61	})
 62
 63	op2.Apply(snap)
 64	snap.ops = append(snap.ops, op2)
 65
 66	target1Metadata = snap.AllOperations()[0].AllMetadata()
 67	require.Len(t, target1Metadata, 2)
 68	require.Equal(t, target1Metadata["key"], "value")
 69	require.Equal(t, target1Metadata["key2"], "value")
 70
 71	target2Metadata = snap.AllOperations()[1].AllMetadata()
 72	require.Len(t, target2Metadata, 2)
 73	// original key is not overrided
 74	require.Equal(t, target2Metadata["key2"], "value2")
 75	// new key is set
 76	require.Equal(t, target2Metadata["key3"], "value3")
 77
 78	op3 := NewSetMetadataOp[*snapshotMock](2, rene, unix, target1.Id(), map[string]string{
 79		"key":  "override",
 80		"key2": "override",
 81	})
 82
 83	op3.Apply(snap)
 84	snap.ops = append(snap.ops, op3)
 85
 86	target1Metadata = snap.AllOperations()[0].AllMetadata()
 87	require.Len(t, target1Metadata, 2)
 88	// original key is not overrided
 89	require.Equal(t, target1Metadata["key"], "value")
 90	// previously set key is not overrided
 91	require.Equal(t, target1Metadata["key2"], "value")
 92
 93	target2Metadata = snap.AllOperations()[1].AllMetadata()
 94	require.Len(t, target2Metadata, 2)
 95	require.Equal(t, target2Metadata["key2"], "value2")
 96	require.Equal(t, target2Metadata["key3"], "value3")
 97}
 98
 99func TestSetMetadataSerialize(t *testing.T) {
100	SerializeRoundTripTest(t, func(author identity.Interface, unixTime int64) *SetMetadataOperation[*snapshotMock] {
101		return NewSetMetadataOp[*snapshotMock](1, author, unixTime, "message", map[string]string{
102			"key1": "value1",
103			"key2": "value2",
104		})
105	})
106}