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}