-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathtests.go
130 lines (105 loc) · 4.22 KB
/
tests.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package tests
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/code-payments/code-server/pkg/code/data/deposit"
"github.com/code-payments/code-server/pkg/code/data/transaction"
)
func RunTests(t *testing.T, s deposit.Store, teardown func()) {
for _, tf := range []func(t *testing.T, s deposit.Store){
testRoundTrip,
testGetAmounts,
} {
tf(t, s)
teardown()
}
}
func testRoundTrip(t *testing.T, s deposit.Store) {
t.Run("testRoundTrip", func(t *testing.T) {
ctx := context.Background()
start := time.Now()
record := &deposit.Record{
Signature: "txn",
Destination: "destination",
Amount: 1,
UsdMarketValue: 1.23,
Slot: 0,
ConfirmationState: transaction.ConfirmationConfirmed,
}
cloned := record.Clone()
_, err := s.Get(ctx, record.Signature, record.Destination)
assert.Equal(t, deposit.ErrDepositNotFound, err)
require.NoError(t, s.Save(ctx, record))
assert.True(t, record.Id > 0)
assert.True(t, record.CreatedAt.After(start))
actual, err := s.Get(ctx, cloned.Signature, cloned.Destination)
require.NoError(t, err)
assertEquivalentRecords(t, &cloned, actual)
record.Slot = 12345
record.ConfirmationState = transaction.ConfirmationFinalized
cloned = record.Clone()
require.NoError(t, s.Save(ctx, record))
actual, err = s.Get(ctx, cloned.Signature, cloned.Destination)
require.NoError(t, err)
assertEquivalentRecords(t, &cloned, actual)
})
}
func testGetAmounts(t *testing.T, s deposit.Store) {
t.Run("testGetAmounts", func(t *testing.T) {
ctx := context.Background()
start := time.Now()
destination1 := "destination1"
destination2 := "destination2"
quarks, err := s.GetKinAmount(ctx, destination1)
require.NoError(t, err)
assert.EqualValues(t, 0, quarks)
quarksByAccount, err := s.GetKinAmountBatch(ctx, destination1, destination2)
require.NoError(t, err)
require.Len(t, quarksByAccount, 2)
assert.EqualValues(t, 0, quarksByAccount[destination1])
assert.EqualValues(t, 0, quarksByAccount[destination2])
usd, err := s.GetUsdAmount(ctx, destination1)
require.NoError(t, err)
assert.EqualValues(t, 0, usd)
records := []*deposit.Record{
{Signature: "txn1", Destination: destination1, Amount: 1, UsdMarketValue: 2, Slot: 12345, ConfirmationState: transaction.ConfirmationConfirmed},
{Signature: "txn2", Destination: destination1, Amount: 10, UsdMarketValue: 20, Slot: 12345, ConfirmationState: transaction.ConfirmationFailed},
{Signature: "txn3", Destination: destination1, Amount: 100, UsdMarketValue: 200, Slot: 12345, ConfirmationState: transaction.ConfirmationFinalized},
{Signature: "txn4", Destination: destination1, Amount: 1000, UsdMarketValue: 2000, Slot: 12345, ConfirmationState: transaction.ConfirmationFinalized},
{Signature: "txn1", Destination: destination2, Amount: 10000, UsdMarketValue: 20000, Slot: 12345, ConfirmationState: transaction.ConfirmationFinalized},
}
for _, record := range records {
require.NoError(t, s.Save(ctx, record))
assert.True(t, record.Id > 0)
assert.True(t, record.CreatedAt.After(start))
}
quarks, err = s.GetKinAmount(ctx, destination1)
require.NoError(t, err)
assert.EqualValues(t, 1100, quarks)
quarks, err = s.GetKinAmount(ctx, destination2)
require.NoError(t, err)
assert.EqualValues(t, 10000, quarks)
quarksByAccount, err = s.GetKinAmountBatch(ctx, destination1, destination2, destination2)
require.NoError(t, err)
require.Len(t, quarksByAccount, 2)
assert.EqualValues(t, 1100, quarksByAccount[destination1])
assert.EqualValues(t, 10000, quarksByAccount[destination2])
usd, err = s.GetUsdAmount(ctx, destination1)
require.NoError(t, err)
assert.EqualValues(t, 2200, usd)
usd, err = s.GetUsdAmount(ctx, destination2)
require.NoError(t, err)
assert.EqualValues(t, 20000, usd)
})
}
func assertEquivalentRecords(t *testing.T, obj1, obj2 *deposit.Record) {
assert.Equal(t, obj1.Signature, obj2.Signature)
assert.Equal(t, obj1.Destination, obj2.Destination)
assert.Equal(t, obj1.Amount, obj2.Amount)
assert.Equal(t, obj1.UsdMarketValue, obj2.UsdMarketValue)
assert.Equal(t, obj1.Slot, obj2.Slot)
assert.Equal(t, obj1.ConfirmationState, obj2.ConfirmationState)
}