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}