Search Apps Documentation Source Content File Folder Download Copy

banker_test.gno

1.46 Kb ยท 51 lines
 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}