1package grc721
2
3import (
4 "std"
5 "testing"
6
7 "gno.land/p/demo/testutils"
8 "gno.land/p/demo/uassert"
9)
10
11func TestSetMetadata(t *testing.T) {
12 // Create a new dummy NFT with metadata
13 dummy := NewNFTWithMetadata(dummyNFTName, dummyNFTSymbol)
14 if dummy == nil {
15 t.Errorf("should not be nil")
16 }
17
18 // Define addresses for testing purposes
19 addr1 := testutils.TestAddress("alice")
20 addr2 := testutils.TestAddress("bob")
21
22 // Define metadata attributes
23 name := "test"
24 description := "test"
25 image := "test"
26 imageData := "test"
27 externalURL := "test"
28 attributes := []Trait{}
29 backgroundColor := "test"
30 animationURL := "test"
31 youtubeURL := "test"
32
33 // Set the original caller to addr1
34 std.TestSetOrigCaller(addr1) // addr1
35
36 // Mint a new token for addr1
37 dummy.mint(addr1, TokenID("1"))
38
39 // Set metadata for token 1
40 derr := dummy.SetTokenMetadata(TokenID("1"), Metadata{
41 Name: name,
42 Description: description,
43 Image: image,
44 ImageData: imageData,
45 ExternalURL: externalURL,
46 Attributes: attributes,
47 BackgroundColor: backgroundColor,
48 AnimationURL: animationURL,
49 YoutubeURL: youtubeURL,
50 })
51
52 // Check if there was an error setting metadata
53 uassert.NoError(t, derr, "Should not result in error")
54
55 // Test case: Invalid token ID
56 err := dummy.SetTokenMetadata(TokenID("3"), Metadata{
57 Name: name,
58 Description: description,
59 Image: image,
60 ImageData: imageData,
61 ExternalURL: externalURL,
62 Attributes: attributes,
63 BackgroundColor: backgroundColor,
64 AnimationURL: animationURL,
65 YoutubeURL: youtubeURL,
66 })
67
68 // Check if the error returned matches the expected error
69 uassert.ErrorIs(t, err, ErrInvalidTokenId)
70
71 // Set the original caller to addr2
72 std.TestSetOrigCaller(addr2) // addr2
73
74 // Try to set metadata for token 1 from addr2 (should fail)
75 cerr := dummy.SetTokenMetadata(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 // Check if the error returned matches the expected error
88 uassert.ErrorIs(t, cerr, ErrCallerIsNotOwner)
89
90 // Set the original caller back to addr1
91 std.TestSetOrigCaller(addr1) // addr1
92
93 // Retrieve metadata for token 1
94 dummyMetadata, err := dummy.TokenMetadata(TokenID("1"))
95 uassert.NoError(t, err, "Metadata error")
96
97 // Check if metadata attributes match expected values
98 uassert.Equal(t, image, dummyMetadata.Image)
99 uassert.Equal(t, imageData, dummyMetadata.ImageData)
100 uassert.Equal(t, externalURL, dummyMetadata.ExternalURL)
101 uassert.Equal(t, description, dummyMetadata.Description)
102 uassert.Equal(t, name, dummyMetadata.Name)
103 uassert.Equal(t, len(attributes), len(dummyMetadata.Attributes))
104 uassert.Equal(t, backgroundColor, dummyMetadata.BackgroundColor)
105 uassert.Equal(t, animationURL, dummyMetadata.AnimationURL)
106 uassert.Equal(t, youtubeURL, dummyMetadata.YoutubeURL)
107}
grc721_metadata_test.gno
3.03 Kb ยท 107 lines