1package cla23import (4 "testing"56 "gno.land/p/moul/addrset/v0"7 "gno.land/p/nt/uassert/v0"8)910// cur is a zero-value realm used as a placeholder when forwarding to11// uassert/urequire dispatch helpers that gained an `rlm realm` param.12// These tests pass `func()` callbacks (no crossing inside the callback),13// so rlm is ignored — a nil realm here is safe.14var cur realm1516const (17 testHash1 = "abc123def456"18 testHash2 = "xyz789uvw012"19 testUser1 = "g1user1address1234567890"20 testUser2 = "g1user2address0987654321"21)2223func resetState() {24 signatures = addrset.Set{}25 requiredHash = ""26 claURL = ""27}2829func TestSign(cur realm, t *testing.T) {30 resetState()3132 setRequiredHash(testHash1)3334 testing.SetRealm(testing.NewUserRealm(testUser1))35 Sign(cross(cur), testHash1)3637 uassert.True(t, HasValidSignature(address(testUser1)))38}3940func TestSign_WrongHash(cur realm, t *testing.T) {41 resetState()4243 setRequiredHash(testHash1)4445 testing.SetRealm(testing.NewUserRealm(testUser1))46 uassert.AbortsWithMessage(t, cur, "hash does not match required CLA hash", func() {47 Sign(cross(cur), testHash2)48 })4950 uassert.False(t, HasValidSignature(address(testUser1)))51}5253func TestHasValidSignature_Disabled(t *testing.T) {54 resetState()5556 uassert.Equal(t, "", requiredHash)57 uassert.True(t, HasValidSignature(address(testUser1)))58 uassert.True(t, HasValidSignature(address(testUser2)))59}6061func TestHasValidSignature_Valid(cur realm, t *testing.T) {62 resetState()6364 setRequiredHash(testHash1)6566 testing.SetRealm(testing.NewUserRealm(testUser1))67 Sign(cross(cur), testHash1)6869 uassert.True(t, HasValidSignature(address(testUser1)))70}7172func TestHasValidSignature_NotSigned(t *testing.T) {73 resetState()7475 setRequiredHash(testHash1)7677 uassert.False(t, HasValidSignature(address(testUser1)))78}7980func TestSetRequiredHash_ResetsSignatures(cur realm, t *testing.T) {81 resetState()8283 setRequiredHash(testHash1)8485 testing.SetRealm(testing.NewUserRealm(testUser1))86 Sign(cross(cur), testHash1)87 uassert.True(t, HasValidSignature(address(testUser1)))88 uassert.Equal(t, 1, signatures.Size())8990 // Update hash - should reset signatures91 setRequiredHash(testHash2)9293 uassert.False(t, HasValidSignature(address(testUser1)))94 uassert.Equal(t, 0, signatures.Size())95}96HasValidSignature(addr string) bool
ProposeNewCLA(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, newHash string, newURL string) struct{title string; description string; executor gno.land/r/gov/dao.Executor; filter gno.land/r/gov/dao.Filter}
Render(path string) string
Sign(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, hash string)
Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.
vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.