grc721_metadata_test.gno
2.97 Kb · 103 lines
1package grc721
2
3import (
4 "testing"
5
6 "gno.land/p/nt/testutils/v0"
7 "gno.land/p/nt/uassert/v0"
8)
9
10func newDummyMetadataNFT(_ int, rlm realm) *metadataNFT {
11 var nft *metadataNFT
12 func(cur realm) {
13 nft = NewNFTWithMetadata(0, cur, dummyNFTName, dummyNFTSymbol)
14 }(cross(rlm))
15 return nft
16}
17
18func TestSetMetadata(cur realm, t *testing.T) {
19 // Create a new dummy NFT with metadata
20 dummy := newDummyMetadataNFT(0, cur)
21 if dummy == nil {
22 t.Errorf("should not be nil")
23 }
24
25 // Define addresses for testing purposes
26 addr1 := testutils.TestAddress("alice")
27 addr2 := testutils.TestAddress("bob")
28
29 // Define metadata attributes
30 name := "test"
31 description := "test"
32 image := "test"
33 imageData := "test"
34 externalURL := "test"
35 attributes := []Trait{}
36 backgroundColor := "test"
37 animationURL := "test"
38 youtubeURL := "test"
39
40 // Mint a new token for addr1
41 dummy.mint(addr1, TokenID("1"))
42
43 // Set metadata for token 1 as its owner (addr1)
44 derr := dummy.SetTokenMetadata(addr1, TokenID("1"), Metadata{
45 Name: name,
46 Description: description,
47 Image: image,
48 ImageData: imageData,
49 ExternalURL: externalURL,
50 Attributes: attributes,
51 BackgroundColor: backgroundColor,
52 AnimationURL: animationURL,
53 YoutubeURL: youtubeURL,
54 })
55
56 // Check if there was an error setting metadata
57 uassert.NoError(t, derr, "Should not result in error")
58
59 // Test case: invalid token ID. Setting metadata for a non-existent token fails.
60 err := dummy.SetTokenMetadata(addr1, TokenID("3"), Metadata{
61 Name: name,
62 Description: description,
63 Image: image,
64 ImageData: imageData,
65 ExternalURL: externalURL,
66 Attributes: attributes,
67 BackgroundColor: backgroundColor,
68 AnimationURL: animationURL,
69 YoutubeURL: youtubeURL,
70 })
71
72 uassert.ErrorIs(t, err, ErrInvalidTokenId)
73
74 // Test case: caller is not the owner. Setting metadata from a non-owner (addr2) fails.
75 cerr := dummy.SetTokenMetadata(addr2, TokenID("1"), Metadata{
76 Name: name,
77 Description: description,
78 Image: image,
79 ImageData: imageData,
80 ExternalURL: externalURL,
81 Attributes: attributes,
82 BackgroundColor: backgroundColor,
83 AnimationURL: animationURL,
84 YoutubeURL: youtubeURL,
85 })
86
87 uassert.ErrorIs(t, cerr, ErrCallerIsNotOwner)
88
89 // Retrieve metadata for token 1
90 dummyMetadata, err := dummy.TokenMetadata(TokenID("1"))
91 uassert.NoError(t, err, "Metadata error")
92
93 // Check if metadata attributes match expected values
94 uassert.Equal(t, image, dummyMetadata.Image)
95 uassert.Equal(t, imageData, dummyMetadata.ImageData)
96 uassert.Equal(t, externalURL, dummyMetadata.ExternalURL)
97 uassert.Equal(t, description, dummyMetadata.Description)
98 uassert.Equal(t, name, dummyMetadata.Name)
99 uassert.Equal(t, len(attributes), len(dummyMetadata.Attributes))
100 uassert.Equal(t, backgroundColor, dummyMetadata.BackgroundColor)
101 uassert.Equal(t, animationURL, dummyMetadata.AnimationURL)
102 uassert.Equal(t, youtubeURL, dummyMetadata.YoutubeURL)
103}