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
16
17
18func makeIdentityTestRepo(t *testing.T) repository.ClockedRepo {
19	repo := repository.NewMockRepo()
20
21	clock1, err := repo.GetOrCreateClock("foo")
22	require.NoError(t, err)
23	err = clock1.Witness(42)
24	require.NoError(t, err)
25
26	clock2, err := repo.GetOrCreateClock("bar")
27	require.NoError(t, err)
28	err = clock2.Witness(34)
29	require.NoError(t, err)
30
31	return repo
32}
33
34func TestVersionJSON(t *testing.T) {
35	repo := makeIdentityTestRepo(t)
36
37	testIdentity := &mockIdentity{name: "name", email: "email", login: "login"}
38	keys := []*Key{
39		generatePublicKey(testIdentity),
40		generatePublicKey(testIdentity),
41	}
42
43	before, err := newVersion(repo, "name", "email", "login", "avatarUrl", keys)
44	require.NoError(t, err)
45
46	before.SetMetadata("key1", "value1")
47	before.SetMetadata("key2", "value2")
48
49	expected := &version{
50		id:        entity.UnsetId,
51		name:      "name",
52		email:     "email",
53		login:     "login",
54		avatarURL: "avatarUrl",
55		unixTime:  time.Now().Unix(),
56		times: map[string]lamport.Time{
57			"foo": 42,
58			"bar": 34,
59		},
60		keys:  keys,
61		nonce: before.nonce,
62		metadata: map[string]string{
63			"key1": "value1",
64			"key2": "value2",
65		},
66	}
67
68	require.Equal(t, expected, before)
69
70	data, err := json.Marshal(before)
71	assert.NoError(t, err)
72
73	var after version
74	err = json.Unmarshal(data, &after)
75	assert.NoError(t, err)
76
77	// make sure we now have an Id
78	expected.Id()
79
80	// Compare versions without Key objects since entities may differ in internal structure after deserialization
81	assert.Equal(t, expected.name, after.name)
82	assert.Equal(t, expected.email, after.email)
83	assert.Equal(t, expected.login, after.login)
84	assert.Equal(t, expected.avatarURL, after.avatarURL)
85	assert.Equal(t, expected.unixTime, after.unixTime)
86	assert.Equal(t, expected.times, after.times)
87	assert.Equal(t, expected.metadata, after.metadata)
88	assert.Equal(t, expected.id, after.id)
89	assert.Equal(t, expected.commitHash, after.commitHash)
90	assert.Equal(t, len(expected.keys), len(after.keys))
91	for i, key := range expected.keys {
92		assert.Equal(t, key.public.Fingerprint[:], after.keys[i].public.Fingerprint[:])
93	}
94}