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/git-bug/git-bug/entity"
12	"github.com/git-bug/git-bug/repository"
13	"github.com/git-bug/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)
22	require.NoError(t, err)
23
24	clock2, err := repo.GetOrCreateClock("bar")
25	require.NoError(t, err)
26	err = clock2.Witness(34)
27	require.NoError(t, err)
28
29	return repo
30}
31
32func TestVersionJSON(t *testing.T) {
33	repo := makeIdentityTestRepo(t)
34
35	testIdentity := &mockIdentity{
36		name:  "name",
37		email: "email",
38		login: "login",
39	}
40
41	keys := []*Key{
42		generatePublicKey(testIdentity),
43		generatePublicKey(testIdentity),
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": 42,
61			"bar": 34,
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	// Compare versions without Key objects since entities may differ in internal structure after deserialization
84	assert.Equal(t, expected.name, after.name)
85	assert.Equal(t, expected.email, after.email)
86	assert.Equal(t, expected.login, after.login)
87	assert.Equal(t, expected.avatarURL, after.avatarURL)
88	assert.Equal(t, expected.unixTime, after.unixTime)
89	assert.Equal(t, expected.times, after.times)
90	assert.Equal(t, expected.metadata, after.metadata)
91	assert.Equal(t, expected.id, after.id)
92	assert.Equal(t, expected.commitHash, after.commitHash)
93	assert.Equal(t, len(expected.keys), len(after.keys))
94	for i, key := range expected.keys {
95		assert.Equal(t, key.public.Fingerprint[:], after.keys[i].public.Fingerprint[:])
96	}
97}