basic_grc1155_token_test.gno
10.58 Kb ยท 299 lines
1package grc1155
2
3import (
4 "std"
5 "testing"
6
7 "gno.land/p/demo/testutils"
8 "gno.land/p/demo/uassert"
9)
10
11const dummyURI = "ipfs://xyz"
12
13func TestNewBasicGRC1155Token(t *testing.T) {
14 dummy := NewBasicGRC1155Token(dummyURI)
15 uassert.True(t, dummy != nil, "should not be nil")
16}
17
18func TestUri(t *testing.T) {
19 dummy := NewBasicGRC1155Token(dummyURI)
20 uassert.True(t, dummy != nil, "should not be nil")
21 uassert.Equal(t, dummyURI, dummy.Uri())
22}
23
24func TestBalanceOf(t *testing.T) {
25 dummy := NewBasicGRC1155Token(dummyURI)
26 uassert.True(t, dummy != nil, "should not be nil")
27
28 addr1 := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
29 addr2 := std.Address("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj")
30
31 tid1 := TokenID("1")
32 tid2 := TokenID("2")
33
34 _, err := dummy.BalanceOf(zeroAddress, tid1)
35 uassert.Error(t, err, "should result in error")
36
37 balanceAddr1OfToken1, err := dummy.BalanceOf(addr1, tid1)
38 uassert.NoError(t, err, "should not result in error")
39 uassert.Equal(t, int64(0), balanceAddr1OfToken1)
40
41 dummy.mintBatch(addr1, []TokenID{tid1, tid2}, []int64{10, 100})
42 dummy.mintBatch(addr2, []TokenID{tid1}, []int64{20})
43
44 balanceAddr1OfToken1, err = dummy.BalanceOf(addr1, tid1)
45 uassert.NoError(t, err, "should not result in error")
46 balanceAddr1OfToken2, err := dummy.BalanceOf(addr1, tid2)
47 uassert.NoError(t, err, "should not result in error")
48 balanceAddr2OfToken1, err := dummy.BalanceOf(addr2, tid1)
49 uassert.NoError(t, err, "should not result in error")
50
51 uassert.Equal(t, int64(10), balanceAddr1OfToken1)
52 uassert.Equal(t, int64(100), balanceAddr1OfToken2)
53 uassert.Equal(t, int64(20), balanceAddr2OfToken1)
54}
55
56func TestBalanceOfBatch(t *testing.T) {
57 dummy := NewBasicGRC1155Token(dummyURI)
58 uassert.True(t, dummy != nil, "should not be nil")
59
60 addr1 := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
61 addr2 := std.Address("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj")
62
63 tid1 := TokenID("1")
64 tid2 := TokenID("2")
65
66 balanceBatch, err := dummy.BalanceOfBatch([]std.Address{addr1, addr2}, []TokenID{tid1, tid2})
67 uassert.NoError(t, err, "should not result in error")
68 uassert.Equal(t, int64(0), balanceBatch[0])
69 uassert.Equal(t, int64(0), balanceBatch[1])
70
71 dummy.mintBatch(addr1, []TokenID{tid1}, []int64{10})
72 dummy.mintBatch(addr2, []TokenID{tid2}, []int64{20})
73
74 balanceBatch, err = dummy.BalanceOfBatch([]std.Address{addr1, addr2}, []TokenID{tid1, tid2})
75 uassert.NoError(t, err, "should not result in error")
76 uassert.Equal(t, int64(10), balanceBatch[0])
77 uassert.Equal(t, int64(20), balanceBatch[1])
78}
79
80func TestIsApprovedForAll(t *testing.T) {
81 dummy := NewBasicGRC1155Token(dummyURI)
82 uassert.True(t, dummy != nil, "should not be nil")
83
84 addr1 := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
85 addr2 := std.Address("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj")
86
87 isApprovedForAll := dummy.IsApprovedForAll(addr1, addr2)
88 uassert.False(t, isApprovedForAll)
89}
90
91func TestSetApprovalForAll(t *testing.T) {
92 //alice := testutils.TestAddress("alice")
93 //testing.SetOriginCaller(alice)
94
95 dummy := NewBasicGRC1155Token(dummyURI)
96 uassert.True(t, dummy != nil, "should not be nil")
97
98 caller := std.OriginCaller()
99 addr := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
100
101 isApprovedForAll := dummy.IsApprovedForAll(caller, addr)
102 uassert.False(t, isApprovedForAll)
103
104 err := dummy.SetApprovalForAll(addr, true)
105 uassert.NoError(t, err, "should not result in error")
106
107 isApprovedForAll = dummy.IsApprovedForAll(caller, addr)
108 uassert.True(t, isApprovedForAll)
109
110 err = dummy.SetApprovalForAll(addr, false)
111 uassert.NoError(t, err, "should not result in error")
112
113 isApprovedForAll = dummy.IsApprovedForAll(caller, addr)
114 uassert.False(t, isApprovedForAll)
115}
116
117func TestSafeTransferFrom(t *testing.T) {
118 alice := testutils.TestAddress("alice")
119 testing.SetOriginCaller(alice)
120
121 dummy := NewBasicGRC1155Token(dummyURI)
122 uassert.True(t, dummy != nil, "should not be nil")
123
124 caller := std.OriginCaller()
125 addr := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
126
127 tid := TokenID("1")
128
129 dummy.mintBatch(caller, []TokenID{tid}, []int64{100})
130
131 err := dummy.SafeTransferFrom(caller, zeroAddress, tid, 10)
132 uassert.Error(t, err, "should result in error")
133
134 err = dummy.SafeTransferFrom(caller, addr, tid, 160)
135 uassert.Error(t, err, "should result in error")
136
137 err = dummy.SafeTransferFrom(caller, addr, tid, 60)
138 uassert.NoError(t, err, "should not result in error")
139
140 // Check balance of caller after transfer
141 balanceOfCaller, err := dummy.BalanceOf(caller, tid)
142 uassert.NoError(t, err, "should not result in error")
143 uassert.Equal(t, int64(40), balanceOfCaller)
144
145 // Check balance of addr after transfer
146 balanceOfAddr, err := dummy.BalanceOf(addr, tid)
147 uassert.NoError(t, err, "should not result in error")
148 uassert.Equal(t, int64(60), balanceOfAddr)
149}
150
151func TestSafeBatchTransferFrom(t *testing.T) {
152 alice := testutils.TestAddress("alice")
153 testing.SetOriginCaller(alice)
154
155 dummy := NewBasicGRC1155Token(dummyURI)
156 uassert.True(t, dummy != nil, "should not be nil")
157
158 caller := std.OriginCaller()
159 addr := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
160
161 tid1 := TokenID("1")
162 tid2 := TokenID("2")
163
164 dummy.mintBatch(caller, []TokenID{tid1, tid2}, []int64{10, 100})
165
166 err := dummy.SafeBatchTransferFrom(caller, zeroAddress, []TokenID{tid1, tid2}, []int64{4, 60})
167 uassert.Error(t, err, "should result in error")
168 err = dummy.SafeBatchTransferFrom(caller, addr, []TokenID{tid1, tid2}, []int64{40, 60})
169 uassert.Error(t, err, "should result in error")
170 err = dummy.SafeBatchTransferFrom(caller, addr, []TokenID{tid1}, []int64{40, 60})
171 uassert.Error(t, err, "should result in error")
172 err = dummy.SafeBatchTransferFrom(caller, addr, []TokenID{tid1, tid2}, []int64{4, 60})
173 uassert.NoError(t, err, "should not result in error")
174
175 balanceBatch, err := dummy.BalanceOfBatch([]std.Address{caller, addr, caller, addr}, []TokenID{tid1, tid1, tid2, tid2})
176 uassert.NoError(t, err, "should not result in error")
177
178 // Check token1's balance of caller after batch transfer
179 uassert.Equal(t, int64(6), balanceBatch[0])
180
181 // Check token1's balance of addr after batch transfer
182 uassert.Equal(t, int64(4), balanceBatch[1])
183
184 // Check token2's balance of caller after batch transfer
185 uassert.Equal(t, int64(40), balanceBatch[2])
186
187 // Check token2's balance of addr after batch transfer
188 uassert.Equal(t, int64(60), balanceBatch[3])
189}
190
191func TestSafeMint(t *testing.T) {
192 dummy := NewBasicGRC1155Token(dummyURI)
193 uassert.True(t, dummy != nil, "should not be nil")
194
195 addr1 := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
196 addr2 := std.Address("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj")
197
198 tid1 := TokenID("1")
199 tid2 := TokenID("2")
200
201 err := dummy.SafeMint(zeroAddress, tid1, 100)
202 uassert.Error(t, err, "should result in error")
203 err = dummy.SafeMint(addr1, tid1, 100)
204 uassert.NoError(t, err, "should not result in error")
205 err = dummy.SafeMint(addr1, tid2, 200)
206 uassert.NoError(t, err, "should not result in error")
207 err = dummy.SafeMint(addr2, tid1, 50)
208 uassert.NoError(t, err, "should not result in error")
209
210 balanceBatch, err := dummy.BalanceOfBatch([]std.Address{addr1, addr2, addr1}, []TokenID{tid1, tid1, tid2})
211 uassert.NoError(t, err, "should not result in error")
212 // Check token1's balance of addr1 after mint
213 uassert.Equal(t, int64(100), balanceBatch[0])
214 // Check token1's balance of addr2 after mint
215 uassert.Equal(t, int64(50), balanceBatch[1])
216 // Check token2's balance of addr1 after mint
217 uassert.Equal(t, int64(200), balanceBatch[2])
218}
219
220func TestSafeBatchMint(t *testing.T) {
221 dummy := NewBasicGRC1155Token(dummyURI)
222 uassert.True(t, dummy != nil, "should not be nil")
223
224 addr1 := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
225 addr2 := std.Address("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj")
226
227 tid1 := TokenID("1")
228 tid2 := TokenID("2")
229
230 err := dummy.SafeBatchMint(zeroAddress, []TokenID{tid1, tid2}, []int64{100, 200})
231 uassert.Error(t, err, "should result in error")
232 err = dummy.SafeBatchMint(addr1, []TokenID{tid1, tid2}, []int64{100, 200})
233 uassert.NoError(t, err, "should not result in error")
234 err = dummy.SafeBatchMint(addr2, []TokenID{tid1, tid2}, []int64{300, 400})
235 uassert.NoError(t, err, "should not result in error")
236
237 balanceBatch, err := dummy.BalanceOfBatch([]std.Address{addr1, addr2, addr1, addr2}, []TokenID{tid1, tid1, tid2, tid2})
238 uassert.NoError(t, err, "should not result in error")
239 // Check token1's balance of addr1 after batch mint
240 uassert.Equal(t, int64(100), balanceBatch[0])
241 // Check token1's balance of addr2 after batch mint
242 uassert.Equal(t, int64(300), balanceBatch[1])
243 // Check token2's balance of addr1 after batch mint
244 uassert.Equal(t, int64(200), balanceBatch[2])
245 // Check token2's balance of addr2 after batch mint
246 uassert.Equal(t, int64(400), balanceBatch[3])
247}
248
249func TestBurn(t *testing.T) {
250 dummy := NewBasicGRC1155Token(dummyURI)
251 uassert.True(t, dummy != nil, "should not be nil")
252
253 addr := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
254
255 tid1 := TokenID("1")
256 tid2 := TokenID("2")
257
258 dummy.mintBatch(addr, []TokenID{tid1, tid2}, []int64{100, 200})
259 err := dummy.Burn(zeroAddress, tid1, int64(60))
260 uassert.Error(t, err, "should result in error")
261 err = dummy.Burn(addr, tid1, int64(160))
262 uassert.Error(t, err, "should result in error")
263 err = dummy.Burn(addr, tid1, int64(60))
264 uassert.NoError(t, err, "should not result in error")
265 err = dummy.Burn(addr, tid2, int64(60))
266 uassert.NoError(t, err, "should not result in error")
267 balanceBatch, err := dummy.BalanceOfBatch([]std.Address{addr, addr}, []TokenID{tid1, tid2})
268 uassert.NoError(t, err, "should not result in error")
269
270 // Check token1's balance of addr after burn
271 uassert.Equal(t, int64(40), balanceBatch[0])
272 // Check token2's balance of addr after burn
273 uassert.Equal(t, int64(140), balanceBatch[1])
274}
275
276func TestBatchBurn(t *testing.T) {
277 dummy := NewBasicGRC1155Token(dummyURI)
278 uassert.True(t, dummy != nil, "should not be nil")
279
280 addr := std.Address("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm")
281
282 tid1 := TokenID("1")
283 tid2 := TokenID("2")
284
285 dummy.mintBatch(addr, []TokenID{tid1, tid2}, []int64{100, 200})
286 err := dummy.BatchBurn(zeroAddress, []TokenID{tid1, tid2}, []int64{60, 60})
287 uassert.Error(t, err, "should result in error")
288 err = dummy.BatchBurn(addr, []TokenID{tid1, tid2}, []int64{160, 60})
289 uassert.Error(t, err, "should result in error")
290 err = dummy.BatchBurn(addr, []TokenID{tid1, tid2}, []int64{60, 60})
291 uassert.NoError(t, err, "should not result in error")
292 balanceBatch, err := dummy.BalanceOfBatch([]std.Address{addr, addr}, []TokenID{tid1, tid2})
293 uassert.NoError(t, err, "should not result in error")
294
295 // Check token1's balance of addr after batch burn
296 uassert.Equal(t, int64(40), balanceBatch[0])
297 // Check token2's balance of addr after batch burn
298 uassert.Equal(t, int64(140), balanceBatch[1])
299}