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}
grc721_royalty_test.gno
1.94 Kb ยท 70 lines