Search Apps Documentation Source Content File Folder Download Copy Actions Download

z_3_prop4_filetest.gno

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