1package grc20
2
3import (
4 "testing"
5
6 "gno.land/p/demo/testutils"
7 "gno.land/p/demo/ufmt"
8 "gno.land/p/demo/urequire"
9)
10
11func TestBankerImpl(t *testing.T) {
12 dummy := NewBanker("Dummy", "DUMMY", 4)
13 urequire.False(t, dummy == nil, "dummy should not be nil")
14}
15
16func TestAllowance(t *testing.T) {
17 var (
18 owner = testutils.TestAddress("owner")
19 spender = testutils.TestAddress("spender")
20 dest = testutils.TestAddress("dest")
21 )
22
23 b := NewBanker("Dummy", "DUMMY", 6)
24 urequire.NoError(t, b.Mint(owner, 100000000))
25 urequire.NoError(t, b.Approve(owner, spender, 5000000))
26 urequire.Error(t, b.TransferFrom(spender, owner, dest, 10000000), ErrInsufficientAllowance.Error(), "should not be able to transfer more than approved")
27
28 tests := []struct {
29 spend uint64
30 exp uint64
31 }{
32 {3, 4999997},
33 {999997, 4000000},
34 {4000000, 0},
35 }
36
37 for _, tt := range tests {
38 b0 := b.BalanceOf(dest)
39 urequire.NoError(t, b.TransferFrom(spender, owner, dest, tt.spend))
40 a := b.Allowance(owner, spender)
41 urequire.Equal(t, a, tt.exp, ufmt.Sprintf("allowance exp: %d, got %d", tt.exp, a))
42 b := b.BalanceOf(dest)
43 expB := b0 + tt.spend
44 urequire.Equal(t, b, expB, ufmt.Sprintf("balance exp: %d, got %d", expB, b))
45 }
46
47 urequire.Error(t, b.TransferFrom(spender, owner, dest, 1), "no allowance")
48 key := allowanceKey(owner, spender)
49 urequire.False(t, b.allowances.Has(key), "allowance should be removed")
50 urequire.Equal(t, b.Allowance(owner, spender), uint64(0), "allowance should be 0")
51}
banker_test.gno
1.46 Kb ยท 51 lines