Search Apps Documentation Source Content File Folder Download Copy Actions Download

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