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	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}