version_test.go

 1package identity
 2
 3import (
 4	"encoding/json"
 5	"testing"
 6	"time"
 7
 8	"github.com/stretchr/testify/assert"
 9	"github.com/stretchr/testify/require"
10
11	"github.com/MichaelMure/git-bug/entity"
12	"github.com/MichaelMure/git-bug/repository"
13	"github.com/MichaelMure/git-bug/util/lamport"
14)
15
16func makeIdentityTestRepo(t *testing.T) repository.ClockedRepo {
17	repo := repository.NewMockRepo()
18
19	clock1, err := repo.GetOrCreateClock("foo")
20	require.NoError(t, err)
21	err = clock1.Witness(42) // clock goes to 43
22	require.NoError(t, err)
23
24	clock2, err := repo.GetOrCreateClock("bar")
25	require.NoError(t, err)
26	err = clock2.Witness(34) // clock goes to 35
27	require.NoError(t, err)
28
29	return repo
30}
31
32func TestVersionSerialize(t *testing.T) {
33	repo := makeIdentityTestRepo(t)
34
35	keys := []*Key{
36		{
37			Fingerprint: "fingerprint1",
38			PubKey:      "pubkey1",
39		},
40		{
41			Fingerprint: "fingerprint2",
42			PubKey:      "pubkey2",
43		},
44	}
45
46	before, err := newVersion(repo, "name", "email", "login", "avatarUrl", keys)
47	require.NoError(t, err)
48
49	before.SetMetadata("key1", "value1")
50	before.SetMetadata("key2", "value2")
51
52	expected := &version{
53		id:        entity.UnsetId,
54		name:      "name",
55		email:     "email",
56		login:     "login",
57		avatarURL: "avatarUrl",
58		unixTime:  time.Now().Unix(),
59		times: map[string]lamport.Time{
60			"foo": 43,
61			"bar": 35,
62		},
63		keys:  keys,
64		nonce: before.nonce,
65		metadata: map[string]string{
66			"key1": "value1",
67			"key2": "value2",
68		},
69	}
70
71	require.Equal(t, expected, before)
72
73	data, err := json.Marshal(before)
74	assert.NoError(t, err)
75
76	var after version
77	err = json.Unmarshal(data, &after)
78	assert.NoError(t, err)
79
80	// make sure we now have an Id
81	expected.Id()
82
83	assert.Equal(t, expected, &after)
84}