Search Apps Documentation Source Content File Folder Download Copy

basic_nft_test.gno

8.71 Kb ยท 283 lines
  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}