1package grc721
2
3import (
4 "std"
5 "testing"
6
7 "gno.land/p/demo/uassert"
8)
9
10var (
11 dummyNFTName = "DummyNFT"
12 dummyNFTSymbol = "DNFT"
13)
14
15func TestNewBasicNFT(t *testing.T) {
16 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
17 uassert.True(t, dummy != nil, "should not be nil")
18}
19
20func TestName(t *testing.T) {
21 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
22 uassert.True(t, dummy != nil, "should not be nil")
23
24 name := dummy.Name()
25 uassert.Equal(t, dummyNFTName, name)
26}
27
28func TestSymbol(t *testing.T) {
29 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
30 uassert.True(t, dummy != nil, "should not be nil")
31
32 symbol := dummy.Symbol()
33 uassert.Equal(t, dummyNFTSymbol, symbol)
34}
35
36func TestTokenCount(t *testing.T) {
37 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
38 uassert.True(t, dummy != nil, "should not be nil")
39
40 count := dummy.TokenCount()
41 uassert.Equal(t, uint64(0), count)
42
43 dummy.mint("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm", TokenID("1"))
44 dummy.mint("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm", TokenID("2"))
45
46 count = dummy.TokenCount()
47 uassert.Equal(t, uint64(2), count)
48}
49
50func TestBalanceOf(t *testing.T) {
51 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
52 uassert.True(t, dummy != nil, "should not be nil")
53
54 addr1 := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
55 addr2 := std.Address("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj")
56
57 balanceAddr1, err := dummy.BalanceOf(addr1)
58 uassert.NoError(t, err, "should not result in error")
59 uassert.Equal(t, uint64(0), balanceAddr1)
60
61 dummy.mint(addr1, TokenID("1"))
62 dummy.mint(addr1, TokenID("2"))
63 dummy.mint(addr2, TokenID("3"))
64
65 balanceAddr1, err = dummy.BalanceOf(addr1)
66 uassert.NoError(t, err, "should not result in error")
67
68 balanceAddr2, err := dummy.BalanceOf(addr2)
69 uassert.NoError(t, err, "should not result in error")
70
71 uassert.Equal(t, uint64(2), balanceAddr1)
72 uassert.Equal(t, uint64(1), balanceAddr2)
73}
74
75func TestOwnerOf(t *testing.T) {
76 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
77 uassert.True(t, dummy != nil, "should not be nil")
78
79 addr1 := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
80 addr2 := std.Address("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj")
81
82 owner, err := dummy.OwnerOf(TokenID("invalid"))
83 uassert.Error(t, err, "should not result in error")
84
85 dummy.mint(addr1, TokenID("1"))
86 dummy.mint(addr2, TokenID("2"))
87
88 // Checking for token id "1"
89 owner, err = dummy.OwnerOf(TokenID("1"))
90 uassert.NoError(t, err, "should not result in error")
91 uassert.Equal(t, addr1.String(), owner.String())
92
93 // Checking for token id "2"
94 owner, err = dummy.OwnerOf(TokenID("2"))
95 uassert.NoError(t, err, "should not result in error")
96 uassert.Equal(t, addr2.String(), owner.String())
97}
98
99func TestIsApprovedForAll(t *testing.T) {
100 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
101 uassert.True(t, dummy != nil, "should not be nil")
102
103 addr1 := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
104 addr2 := std.Address("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj")
105
106 isApprovedForAll := dummy.IsApprovedForAll(addr1, addr2)
107 uassert.False(t, isApprovedForAll)
108}
109
110func TestSetApprovalForAll(t *testing.T) {
111 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
112 uassert.True(t, dummy != nil, "should not be nil")
113
114 caller := std.PrevRealm().Addr()
115 addr := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
116
117 isApprovedForAll := dummy.IsApprovedForAll(caller, addr)
118 uassert.False(t, isApprovedForAll)
119
120 err := dummy.SetApprovalForAll(addr, true)
121 uassert.NoError(t, err, "should not result in error")
122
123 isApprovedForAll = dummy.IsApprovedForAll(caller, addr)
124 uassert.True(t, isApprovedForAll)
125}
126
127func TestGetApproved(t *testing.T) {
128 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
129 uassert.True(t, dummy != nil, "should not be nil")
130
131 _, err := dummy.GetApproved(TokenID("invalid"))
132 uassert.Error(t, err, "should result in error")
133}
134
135func TestApprove(t *testing.T) {
136 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
137 uassert.True(t, dummy != nil, "should not be nil")
138
139 caller := std.PrevRealm().Addr()
140 addr := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
141
142 dummy.mint(caller, TokenID("1"))
143
144 _, err := dummy.GetApproved(TokenID("1"))
145 uassert.Error(t, err, "should result in error")
146
147 err = dummy.Approve(addr, TokenID("1"))
148 uassert.NoError(t, err, "should not result in error")
149
150 approvedAddr, err := dummy.GetApproved(TokenID("1"))
151 uassert.NoError(t, err, "should result in error")
152 uassert.Equal(t, addr.String(), approvedAddr.String())
153}
154
155func TestTransferFrom(t *testing.T) {
156 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
157 uassert.True(t, dummy != nil, "should not be nil")
158
159 caller := std.PrevRealm().Addr()
160 addr := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
161
162 dummy.mint(caller, TokenID("1"))
163 dummy.mint(caller, TokenID("2"))
164
165 err := dummy.TransferFrom(caller, addr, TokenID("1"))
166 uassert.NoError(t, err, "should result in error")
167
168 // Check balance of caller after transfer
169 balanceOfCaller, err := dummy.BalanceOf(caller)
170 uassert.NoError(t, err, "should result in error")
171 uassert.Equal(t, uint64(1), balanceOfCaller)
172
173 // Check balance of addr after transfer
174 balanceOfAddr, err := dummy.BalanceOf(addr)
175 uassert.NoError(t, err, "should not result in error")
176 uassert.Equal(t, uint64(1), balanceOfAddr)
177
178 // Check Owner of transferred Token id
179 owner, err := dummy.OwnerOf(TokenID("1"))
180 uassert.NoError(t, err, "should result in error")
181 uassert.Equal(t, addr.String(), owner.String())
182}
183
184func TestSafeTransferFrom(t *testing.T) {
185 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
186 uassert.True(t, dummy != nil, "should not be nil")
187
188 caller := std.PrevRealm().Addr()
189 addr := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
190
191 dummy.mint(caller, TokenID("1"))
192 dummy.mint(caller, TokenID("2"))
193
194 err := dummy.SafeTransferFrom(caller, addr, TokenID("1"))
195 uassert.NoError(t, err, "should not result in error")
196
197 // Check balance of caller after transfer
198 balanceOfCaller, err := dummy.BalanceOf(caller)
199 uassert.NoError(t, err, "should not result in error")
200 uassert.Equal(t, uint64(1), balanceOfCaller)
201
202 // Check balance of addr after transfer
203 balanceOfAddr, err := dummy.BalanceOf(addr)
204 uassert.NoError(t, err, "should not result in error")
205 uassert.Equal(t, uint64(1), balanceOfAddr)
206
207 // Check Owner of transferred Token id
208 owner, err := dummy.OwnerOf(TokenID("1"))
209 uassert.NoError(t, err, "should not result in error")
210 uassert.Equal(t, addr.String(), owner.String())
211}
212
213func TestMint(t *testing.T) {
214 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
215 uassert.True(t, dummy != nil, "should not be nil")
216
217 addr1 := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
218 addr2 := std.Address("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj")
219
220 err := dummy.Mint(addr1, TokenID("1"))
221 uassert.NoError(t, err, "should not result in error")
222 err = dummy.Mint(addr1, TokenID("2"))
223 uassert.NoError(t, err, "should not result in error")
224 err = dummy.Mint(addr2, TokenID("3"))
225 uassert.NoError(t, err, "should not result in error")
226
227 // Try minting duplicate token id
228 err = dummy.Mint(addr2, TokenID("1"))
229 uassert.Error(t, err, "should not result in error")
230
231 // Check Owner of Token id
232 owner, err := dummy.OwnerOf(TokenID("1"))
233 uassert.NoError(t, err, "should not result in error")
234 uassert.Equal(t, addr1.String(), owner.String())
235}
236
237func TestBurn(t *testing.T) {
238 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
239 uassert.True(t, dummy != nil, "should not be nil")
240
241 addr := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
242
243 dummy.mint(addr, TokenID("1"))
244 dummy.mint(addr, TokenID("2"))
245
246 err := dummy.Burn(TokenID("1"))
247 uassert.NoError(t, err, "should not result in error")
248
249 // Check Owner of Token id
250 _, err = dummy.OwnerOf(TokenID("1"))
251 uassert.Error(t, err, "should result in error")
252}
253
254func TestSetTokenURI(t *testing.T) {
255 dummy := NewBasicNFT(dummyNFTName, dummyNFTSymbol)
256 uassert.True(t, dummy != nil, "should not be nil")
257
258 addr1 := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
259 addr2 := std.Address("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj")
260 tokenURI := "http://example.com/token"
261
262 std.TestSetOrigCaller(std.Address(addr1)) // addr1
263
264 dummy.mint(addr1, TokenID("1"))
265 _, derr := dummy.SetTokenURI(TokenID("1"), TokenURI(tokenURI))
266 uassert.NoError(t, derr, "should not result in error")
267
268 // Test case: Invalid token ID
269 _, err := dummy.SetTokenURI(TokenID("3"), TokenURI(tokenURI))
270 uassert.ErrorIs(t, err, ErrInvalidTokenId)
271
272 std.TestSetOrigCaller(std.Address(addr2)) // addr2
273
274 _, cerr := dummy.SetTokenURI(TokenID("1"), TokenURI(tokenURI)) // addr2 trying to set URI for token 1
275 uassert.ErrorIs(t, cerr, ErrCallerIsNotOwner)
276
277 // Test case: Retrieving TokenURI
278 std.TestSetOrigCaller(std.Address(addr1)) // addr1
279
280 dummyTokenURI, err := dummy.TokenURI(TokenID("1"))
281 uassert.NoError(t, err, "TokenURI error")
282 uassert.Equal(t, string(tokenURI), string(dummyTokenURI))
283}
basic_nft_test.gno
8.71 Kb ยท 283 lines