ownable_test.gno
2.62 Kb ยท 139 lines
1package ownable
2
3import (
4 "std"
5 "testing"
6
7 "gno.land/p/demo/testutils"
8 "gno.land/p/demo/uassert"
9 "gno.land/p/demo/urequire"
10)
11
12var (
13 alice = testutils.TestAddress("alice")
14 bob = testutils.TestAddress("bob")
15)
16
17func TestNew(t *testing.T) {
18 testing.SetOriginCaller(alice)
19
20 o := New()
21 got := o.Owner()
22 uassert.Equal(t, got, alice)
23}
24
25func TestNewWithAddress(t *testing.T) {
26 o := NewWithAddress(alice)
27
28 got := o.Owner()
29 uassert.Equal(t, got, alice)
30}
31
32func TestTransferOwnership(t *testing.T) {
33 testing.SetOriginCaller(alice)
34
35 o := New()
36
37 err := o.TransferOwnership(bob)
38 urequire.NoError(t, err)
39
40 got := o.Owner()
41
42 uassert.Equal(t, got, bob)
43}
44
45func TestCallerIsOwner(t *testing.T) {
46 testing.SetRealm(std.NewUserRealm(alice))
47
48 o := New()
49 unauthorizedCaller := bob
50
51 testing.SetOriginCaller(unauthorizedCaller)
52
53 uassert.False(t, o.CallerIsOwner())
54}
55
56func TestDropOwnership(t *testing.T) {
57 testing.SetRealm(std.NewUserRealm(alice))
58
59 o := New()
60
61 err := o.DropOwnership()
62 urequire.NoError(t, err, "DropOwnership failed")
63
64 owner := o.Owner()
65 uassert.Empty(t, owner, "owner should be empty")
66}
67
68// Errors
69
70func TestErrUnauthorized(t *testing.T) {
71 testing.SetOriginCaller(alice)
72
73 o := New()
74
75 testing.SetOriginCaller(bob)
76
77 uassert.ErrorContains(t, o.TransferOwnership(alice), ErrUnauthorized.Error())
78 uassert.ErrorContains(t, o.DropOwnership(), ErrUnauthorized.Error())
79}
80
81func TestErrInvalidAddress(t *testing.T) {
82 testing.SetOriginCaller(alice)
83
84 o := New()
85
86 err := o.TransferOwnership("")
87 uassert.ErrorContains(t, err, ErrInvalidAddress.Error())
88
89 err = o.TransferOwnership("10000000001000000000100000000010000000001000000000")
90 uassert.ErrorContains(t, err, ErrInvalidAddress.Error())
91}
92
93func TestAssertCallerIsOwner(t *testing.T) {
94 testing.SetRealm(std.NewUserRealm(alice))
95 testing.SetOriginCaller(alice)
96
97 o := New()
98
99 // Should not panic when caller is owner
100 o.AssertCallerIsOwner()
101
102 // Should panic when caller is not owner
103 testing.SetRealm(std.NewUserRealm(bob))
104 testing.SetOriginCaller(bob)
105
106 defer func() {
107 r := recover()
108 if r == nil {
109 t.Error("expected panic but got none")
110 }
111 if r != ErrUnauthorized {
112 t.Errorf("expected ErrUnauthorized but got %v", r)
113 }
114 }()
115 o.AssertCallerIsOwner()
116}
117
118func TestNilReceiver(t *testing.T) {
119 var o *Ownable
120
121 owner := o.Owner()
122 if owner != std.Address("") {
123 t.Errorf("expected empty address but got %v", owner)
124 }
125
126 isOwner := o.CallerIsOwner()
127 uassert.False(t, isOwner)
128
129 defer func() {
130 r := recover()
131 if r == nil {
132 t.Error("expected panic but got none")
133 }
134 if r != ErrUnauthorized {
135 t.Errorf("expected ErrUnauthorized but got %v", r)
136 }
137 }()
138 o.AssertCallerIsOwner()
139}