github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/examples/gno.land/p/demo/grc/grc20/user_token_test.gno (about) 1 package grc20 2 3 import ( 4 "std" 5 "testing" 6 ) 7 8 func TestUserTokenImpl(t *testing.T) { 9 dummyAdmin := NewAdminToken("Dummy", "DUMMY", 4) 10 dummyUser := dummyAdmin.GRC20() 11 _ = dummyUser 12 } 13 14 func TestUserApprove(t *testing.T) { 15 owner := std.Address("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj") 16 spender := std.Address("g1us8428u2a5satrlxzagsqa5m6vmuze027sxc8x") 17 dest := std.Address("g1us8428m6a5satrlxzagsqa5m6vmuze02tyelwj") 18 19 dummyAdmin := NewAdminToken("Dummy", "DUMMY", 6) 20 21 // Set owner as the original caller 22 std.TestSetOrigCaller(owner) 23 // Mint 100000000 tokens for owner 24 assertE(t, dummyAdmin.Mint(owner, 100000000)) 25 26 dummyUser := dummyAdmin.GRC20() 27 // Approve spender to spend 5000000 tokens 28 assertE(t, dummyUser.Approve(spender, 5000000)) 29 30 // Set spender as the original caller 31 std.TestSetOrigCaller(spender) 32 // Try to transfer 10000000 tokens from owner to dest, should fail because it exceeds allowance 33 err := dummyUser.TransferFrom(owner, dest, 10000000) 34 assert(t, err != nil, "should not be able to transfer more than approved") 35 36 // Define a set of test data with spend amount and expected remaining allowance 37 tests := []struct { 38 spend uint64 // Spend amount 39 exp uint64 // Remaining allowance 40 }{ 41 {3, 4999997}, 42 {999997, 4000000}, 43 {4000000, 0}, 44 } 45 46 // perform transfer operation,and check if allowance and balance are correct 47 for _, tt := range tests { 48 b0, _ := dummyUser.BalanceOf(dest) 49 // Perform transfer from owner to dest 50 assertE(t, dummyUser.TransferFrom(owner, dest, tt.spend)) 51 a, _ := dummyUser.Allowance(owner, spender) 52 // Check if allowance equals expected value 53 assert(t, a == tt.exp, "allowance exp: %d,got %d", tt.exp, a) 54 55 // Get dest current balance 56 b, _ := dummyUser.BalanceOf(dest) 57 // Calculate expected balance ,should be initial balance plus transfer amount 58 expB := b0 + tt.spend 59 // Check if balance equals expected value 60 assert(t, b == expB, "balance exp: %d,got %d", expB, b) 61 } 62 63 // Try to transfer one token from owner to dest ,should fail because no allowance left 64 err = dummyUser.TransferFrom(owner, dest, 1) 65 assert(t, err != nil, "no allowance") 66 }