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}