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}