Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

external_test.gno

2.29 Kb · 59 lines
 1package abt_test
 2
 3import (
 4	"chain"
 5	"chain/runtime"
 6	"testing"
 7
 8	"gno.land/p/nt/testutils/v0"
 9	"gno.land/p/nt/uassert/v0"
10	"gno.land/r/akkadia/beta/abt"
11	"gno.land/r/akkadia/beta/admin"
12)
13
14func TestExternalWrapperLifecycle(cur realm, t *testing.T) {
15	caller := testutils.TestAddress("abtExternalAdmin")
16	owner := testutils.TestAddress("abtExternalOwner")
17	other := testutils.TestAddress("abtExternalOther")
18	testing.SetOriginCaller(admin.GetAdmin())
19	testing.SetRealm(testing.NewUserRealm(admin.GetAdmin()))
20	admin.TransferAdmin(cross(cur), caller)
21	testing.SetOriginCaller(caller)
22	testing.SetRealm(testing.NewUserRealm(caller))
23	admin.AcceptAdmin(cross(cur))
24	testing.SetOriginSend(chain.Coins{})
25	testing.SetRealm(runtime.NewRealm(caller, "gno.land/e/"+caller.String()+"/run"))
26	abt.SetFrozen(cross(cur), true)
27	supplyBefore := abt.TotalSupply()
28	abt.Mint(cross(cur), owner, 20)
29	uassert.Equal(t, "Akkadia Beta Token", abt.GetName())
30	uassert.Equal(t, "abt", abt.GetSymbol())
31	uassert.Equal(t, 6, abt.GetDecimals())
32	uassert.Equal(t, supplyBefore+20, abt.TotalSupply())
33	uassert.True(t, abt.IsFrozen())
34	abt.SetFrozen(cross(cur), false)
35	testing.SetOriginCaller(owner)
36	testing.SetRealm(testing.NewUserRealm(owner))
37	abt.Transfer(cross(cur), other, 2)
38	abt.Approve(cross(cur), other, 5)
39	testing.SetOriginCaller(other)
40	testing.SetRealm(testing.NewUserRealm(other))
41	abt.TransferFrom(cross(cur), owner, other, 3)
42	uassert.Equal(t, int64(15), abt.BalanceOf(owner))
43	uassert.Equal(t, int64(5), abt.BalanceOf(other))
44	uassert.Equal(t, int64(2), abt.Allowance(owner, other))
45	uassert.Equal(t, "15", abt.Render("balance/"+owner.String()))
46	// A later failing transfer must preserve allowance even if its abort is caught.
47	uassert.AbortsWithMessage(t, cur, "abt transfer failed: cannot send transfer to self", func() {
48		abt.TransferFrom(cross(cur), owner, owner, 1)
49	})
50	uassert.Equal(t, int64(2), abt.Allowance(owner, other))
51	testing.SetOriginCaller(caller)
52	testing.SetRealm(testing.NewUserRealm(caller))
53	abt.SetFrozen(cross(cur), true)
54	testing.SetOriginCaller(other)
55	testing.SetRealm(testing.NewUserRealm(other))
56	uassert.AbortsWithMessage(t, cur, "abt is frozen", func() { abt.TransferFrom(cross(cur), owner, other, 2) })
57	uassert.Equal(t, int64(2), abt.Allowance(owner, other))
58	uassert.Equal(t, supplyBefore+20, abt.TotalSupply())
59}