Search Apps Documentation Source Content File Folder Download Copy

grc721_royalty_test.gno

1.94 Kb ยท 70 lines
 1package grc721
 2
 3import (
 4	"std"
 5	"testing"
 6
 7	"gno.land/p/demo/testutils"
 8	"gno.land/p/demo/uassert"
 9)
10
11func TestSetTokenRoyalty(t *testing.T) {
12	dummy := NewNFTWithRoyalty(dummyNFTName, dummyNFTSymbol)
13	uassert.True(t, dummy != nil, "should not be nil")
14
15	addr1 := testutils.TestAddress("alice")
16	addr2 := testutils.TestAddress("bob")
17
18	paymentAddress := testutils.TestAddress("john")
19	percentage := uint64(10) // 10%
20
21	salePrice := uint64(1000)
22	expectRoyaltyAmount := uint64(100)
23
24	std.TestSetOrigCaller(addr1) // addr1
25
26	dummy.mint(addr1, TokenID("1"))
27
28	derr := dummy.SetTokenRoyalty(TokenID("1"), RoyaltyInfo{
29		PaymentAddress: paymentAddress,
30		Percentage:     percentage,
31	})
32	uassert.NoError(t, derr, "Should not result in error")
33
34	// Test case: Invalid token ID
35	_ = dummy.SetTokenRoyalty(TokenID("3"), RoyaltyInfo{
36		PaymentAddress: paymentAddress,
37		Percentage:     percentage,
38	})
39	uassert.ErrorIs(t, derr, ErrInvalidTokenId)
40
41	std.TestSetOrigCaller(addr2) // addr2
42
43	cerr := dummy.SetTokenRoyalty(TokenID("1"), RoyaltyInfo{
44		PaymentAddress: paymentAddress,
45		Percentage:     percentage,
46	})
47	uassert.ErrorIs(t, cerr, ErrCallerIsNotOwner)
48
49	// Test case: Invalid payment address
50	aerr := dummy.SetTokenRoyalty(TokenID("4"), RoyaltyInfo{
51		PaymentAddress: std.Address("###"), // invalid address
52		Percentage:     percentage,
53	})
54	uassert.ErrorIs(t, aerr, ErrInvalidRoyaltyPaymentAddress)
55
56	// Test case: Invalid percentage
57	perr := dummy.SetTokenRoyalty(TokenID("5"), RoyaltyInfo{
58		PaymentAddress: paymentAddress,
59		Percentage:     uint64(200), // over maxRoyaltyPercentage
60	})
61	uassert.ErrorIs(t, perr, ErrInvalidRoyaltyPercentage)
62
63	// Test case: Retrieving Royalty Info
64	std.TestSetOrigCaller(addr1) // addr1
65
66	dummyPaymentAddress, dummyRoyaltyAmount, rerr := dummy.RoyaltyInfo(TokenID("1"), salePrice)
67	uassert.NoError(t, rerr, "RoyaltyInfo error")
68	uassert.Equal(t, paymentAddress, dummyPaymentAddress)
69	uassert.Equal(t, expectRoyaltyAmount, dummyRoyaltyAmount)
70}