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

1.77 Kb · 49 lines
 1package definition_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/admin"
11	"gno.land/r/akkadia/beta/definition"
12)
13
14func TestExternalDefinitionsAndAdminRun(cur realm, t *testing.T) {
15	caller := testutils.TestAddress("definitionExternal")
16	testing.SetOriginCaller(admin.GetAdmin())
17	testing.SetRealm(testing.NewUserRealm(admin.GetAdmin()))
18	admin.TransferAdmin(cross(cur), caller)
19	testing.SetOriginCaller(caller)
20	testing.SetRealm(testing.NewUserRealm(caller))
21	admin.AcceptAdmin(cross(cur))
22	testing.SetOriginSend(chain.Coins{})
23	testing.SetRealm(runtime.NewRealm(caller, "gno.land/e/"+caller.String()+"/run"))
24	definition.SetDefinitions(cross(cur), "x", "name=before")
25	value, found := definition.GetField("x", "name")["value"]
26	uassert.True(t, found)
27	uassert.Equal(t, "before", value)
28
29	// A forged code path with the admin address still is not a user call/run.
30	testing.SetRealm(runtime.NewRealm(caller, "gno.land/r/example/forged_definition_admin"))
31	uassert.AbortsWithMessage(t, cur, "direct user call or run required", func() {
32		definition.DeleteAll(cross(cur))
33	})
34	uassert.AbortsWithMessage(t, cur, "direct user call or run required", func() {
35		definition.SetDefinitions(cross(cur), "x", "name=forged")
36	})
37	value, _ = definition.GetField("x", "name")["value"]
38	uassert.Equal(t, "before", value)
39
40	testing.SetRealm(runtime.NewRealm(caller, "gno.land/e/"+caller.String()+"/run"))
41	definition.DeleteAll(cross(cur))
42	uassert.Equal(t, len(definition.Get("x")), 0)
43	definition.SetDefinitions(cross(cur), "x", "fresh=value")
44	_, found = definition.GetField("x", "name")["value"]
45	uassert.False(t, found)
46	value, found = definition.GetField("x", "fresh")["value"]
47	uassert.True(t, found)
48	uassert.Equal(t, "value", value)
49}