cosmos-sdk/x/nft/keeper/msg_server_test.go
Chi Xiao Wen db82004074
refactor(x/**)!: genesis return errors (#19740)
Co-authored-by: chixiaoxiao <chixiaoxiao@gmail.com>
2024-03-13 11:44:43 +00:00

134 lines
2.6 KiB
Go

package keeper_test
import (
"fmt"
"cosmossdk.io/x/nft"
)
var (
ExpClass = nft.Class{
Id: testClassID,
Name: testClassName,
Symbol: testClassSymbol,
Description: testClassDescription,
Uri: testClassURI,
UriHash: testClassURIHash,
}
ExpNFT = nft.NFT{
ClassId: testClassID,
Id: testID,
Uri: testURI,
}
)
func (s *TestSuite) TestSend() {
err := s.nftKeeper.SaveClass(s.ctx, ExpClass)
s.Require().NoError(err)
actual, has := s.nftKeeper.GetClass(s.ctx, testClassID)
s.Require().True(has)
s.Require().EqualValues(ExpClass, actual)
err = s.nftKeeper.Mint(s.ctx, ExpNFT, s.addrs[0])
s.Require().NoError(err)
expGenesis := &nft.GenesisState{
Classes: []*nft.Class{&ExpClass},
Entries: []*nft.Entry{{
Owner: s.encodedAddrs[0],
Nfts: []*nft.NFT{&ExpNFT},
}},
}
genesis, err := s.nftKeeper.ExportGenesis(s.ctx)
s.Require().NoError(err)
s.Require().Equal(expGenesis, genesis)
testCases := []struct {
name string
req *nft.MsgSend
expErr bool
errMsg string
}{
{
name: "empty nft id",
req: &nft.MsgSend{
ClassId: testClassID,
Id: "",
Sender: s.encodedAddrs[0],
Receiver: s.encodedAddrs[1],
},
expErr: true,
errMsg: "empty nft id",
},
{
name: "empty class id",
req: &nft.MsgSend{
ClassId: "",
Id: testID,
Sender: s.encodedAddrs[0],
Receiver: s.encodedAddrs[1],
},
expErr: true,
errMsg: "empty class id",
},
{
name: "invalid class id",
req: &nft.MsgSend{
ClassId: "invalid ClassId",
Id: testID,
Sender: s.encodedAddrs[0],
Receiver: s.encodedAddrs[1],
},
expErr: true,
errMsg: "unauthorized",
},
{
name: "invalid nft id",
req: &nft.MsgSend{
ClassId: testClassID,
Id: "invalid Id",
Sender: s.encodedAddrs[0],
Receiver: s.encodedAddrs[1],
},
expErr: true,
errMsg: "unauthorized",
},
{
name: "unauthorized sender",
req: &nft.MsgSend{
ClassId: testClassID,
Id: testID,
Sender: s.encodedAddrs[1],
Receiver: s.encodedAddrs[2],
},
expErr: true,
errMsg: fmt.Sprintf("%s is not the owner of nft %s", s.encodedAddrs[1], testID),
},
{
name: "valid transaction",
req: &nft.MsgSend{
ClassId: testClassID,
Id: testID,
Sender: s.encodedAddrs[0],
Receiver: s.encodedAddrs[1],
},
expErr: false,
errMsg: "",
},
}
for _, tc := range testCases {
s.Run(tc.name, func() {
_, err := s.nftKeeper.Send(s.ctx, tc.req)
if tc.expErr {
s.Require().Error(err)
s.Require().Contains(err.Error(), tc.errMsg)
} else {
s.Require().NoError(err)
}
})
}
}