z_3_prop4_filetest.gno
2.10 Kb · 62 lines
1// PKGPATH: gno.land/r/sys/namereg/v1/filetests/z_3_prop4_filetest
2
3package z_3_prop4_filetest
4
5import (
6 "chain"
7 "chain/runtime/unsafe"
8 "testing"
9
10 "gno.land/r/gov/dao"
11 daov3init "gno.land/r/gov/dao/v3/init"
12 users "gno.land/r/sys/namereg/v1"
13 susers "gno.land/r/sys/users"
14)
15
16// Test the full governance-driven pause/unpause flow:
17// 1. propose pause via NewSetPausedExecutor(true), vote YES, execute,
18// observe IsPaused() flip to true.
19// 2. propose unpause via NewSetPausedExecutor(false), vote YES, execute,
20// observe IsPaused() flip back to false.
21// 3. Register works again post-unpause.
22var c address = unsafe.OriginCaller()
23
24func init(cur realm) {
25 // Whitelist this realm as a controller so its Register() can reach r/sys/users.
26 testing.SetHeight(0)
27 susers.AddControllerAtGenesis(cross(cur), chain.PackageAddress("gno.land/r/sys/namereg/v1"))
28 testing.SetHeight(123)
29
30 daov3init.InitWithUsers(cross(cur), c)
31}
32
33func main(cur realm) {
34 testing.SetOriginCaller(c)
35 testing.SetRealm(testing.NewUserRealm(c))
36
37 println("paused before:", users.IsPaused())
38
39 // Propose, vote, execute: pause.
40 dao.MustCreateProposal(cross(cur), users.NewSetPausedExecutor(cross(cur), true))
41 dao.MustVoteOnProposal(cross(cur), dao.NewVoteRequest(dao.YesVote, dao.ProposalID(0)))
42 dao.ExecuteProposal(cross(cur), dao.ProposalID(0))
43 println("paused after pause prop:", users.IsPaused())
44
45 // Propose, vote, execute: unpause.
46 dao.MustCreateProposal(cross(cur), users.NewSetPausedExecutor(cross(cur), false))
47 dao.MustVoteOnProposal(cross(cur), dao.NewVoteRequest(dao.YesVote, dao.ProposalID(1)))
48 dao.ExecuteProposal(cross(cur), dao.ProposalID(1))
49 println("paused after unpause prop:", users.IsPaused())
50
51 // Register works again (the pause check inside Register would have
52 // panicked with ErrPaused had the unpause executor not run).
53 users.Register(cross(cur), "nym-alice123")
54 data, _ := susers.ResolveName("nym-alice123")
55 println("registered alice at:", data.Addr())
56}
57
58// Output:
59// paused before: false
60// paused after pause prop: true
61// paused after unpause prop: false
62// registered alice at: g1wymu47drhr0kuq2098m792lytgtj2nyx77yrsm