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 bootstrap "github.com/MichaelMure/git-bug/entity/boostrap"
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)
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 keys := []*Key{
36 generatePublicKey(),
37 generatePublicKey(),
38 }
39
40 before, err := newVersion(repo, "name", "email", "login", "avatarUrl", keys)
41 require.NoError(t, err)
42
43 before.SetMetadata("key1", "value1")
44 before.SetMetadata("key2", "value2")
45
46 expected := &version{
47 id: bootstrap.UnsetId,
48 name: "name",
49 email: "email",
50 login: "login",
51 avatarURL: "avatarUrl",
52 unixTime: time.Now().Unix(),
53 times: map[string]lamport.Time{
54 "foo": 42,
55 "bar": 34,
56 },
57 keys: keys,
58 nonce: before.nonce,
59 metadata: map[string]string{
60 "key1": "value1",
61 "key2": "value2",
62 },
63 }
64
65 require.Equal(t, expected, before)
66
67 data, err := json.Marshal(before)
68 assert.NoError(t, err)
69
70 var after version
71 err = json.Unmarshal(data, &after)
72 assert.NoError(t, err)
73
74 // make sure we now have an Id
75 expected.Id()
76
77 assert.Equal(t, expected, &after)
78}