github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/examples/gno.land/p/demo/grc/grc20/admin_token_test.gno (about) 1 package grc20 2 3 import ( 4 "std" 5 "testing" 6 ) 7 8 func TestAdminTokenImpl(t *testing.T) { 9 dummy := NewAdminToken("Dummy", "DUMMY", 4) 10 if dummy == nil { 11 t.Errorf("should not be nil") 12 } 13 } 14 15 func TestAllowance(t *testing.T) { 16 owner := std.Address("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj") 17 spender := std.Address("g1us8428u2a5satrlxzagsqa5m6vmuze027sxc8x") 18 dest := std.Address("g1us8428m6a5satrlxzagsqa5m6vmuze02tyelwj") 19 20 token := NewAdminToken("Dummy", "DUMMY", 6) 21 assertE(t, token.Mint(owner, 100000000)) 22 assertE(t, token.Approve(owner, spender, 5000000)) 23 24 err := token.TransferFrom(spender, owner, dest, 10000000) 25 assert(t, err != nil, "should not be able to transfer more than approved") 26 27 tests := []struct { 28 spend uint64 29 exp uint64 30 }{ 31 {3, 4999997}, 32 {999997, 4000000}, 33 {4000000, 0}, 34 } 35 36 for _, tt := range tests { 37 b0, _ := token.BalanceOf(dest) 38 assertE(t, token.TransferFrom(spender, owner, dest, tt.spend)) 39 a, _ := token.Allowance(owner, spender) 40 assert(t, a == tt.exp, "allowance exp: %d, got %d", tt.exp, a) 41 42 b, _ := token.BalanceOf(dest) 43 expB := b0 + tt.spend 44 assert(t, b == expB, "balance exp: %d, got %d", expB, b) 45 } 46 47 err = token.TransferFrom(spender, owner, dest, 1) 48 assert(t, err != nil, "no allowance") 49 50 key := allowanceKey(owner, spender) 51 assert(t, !token.allowances.Has(key), "allowance should be removed") 52 } 53 54 func assertE(t *testing.T, err error) { 55 if err != nil { 56 t.Fatalf("unexpected error: %s", err.Error()) 57 } 58 } 59 60 func assert(t *testing.T, cond bool, format string, args ...interface{}) { 61 if !cond { 62 t.Fatalf(format, args...) 63 } 64 }