Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

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}