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  }