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}