--- a/tests/src/eth/fungible.test.ts +++ b/tests/src/eth/fungible.test.ts @@ -277,7 +277,7 @@ } }); - itEth('Cannot transferCross() more than have', async ({helper}) => { + ['transfer', 'transferCross'].map(testCase => itEth(`Cannot ${testCase} incorrect amount`, async ({helper}) => { const sender = await helper.eth.createAccountWithBalance(donor); const receiverEth = await helper.eth.createAccountWithBalance(donor); const receiverCrossEth = helper.ethCrossAccount.fromAddress(receiverEth); @@ -289,8 +289,13 @@ const collectionAddress = helper.ethAddress.fromCollectionId(collection.collectionId); const collectionEvm = helper.ethNativeContract.collection(collectionAddress, 'ft', sender); - await expect(collectionEvm.methods.transferCross(receiverCrossEth, BALANCE_TO_TRANSFER).send({from: sender})).to.be.rejected; - }); + // 1. Cannot transfer more than have + const receiver = testCase === 'transfer' ? receiverEth : receiverCrossEth; + await expect(collectionEvm.methods[testCase](receiver, BALANCE_TO_TRANSFER).send({from: sender})).to.be.rejected; + // 2. Zero transfer not allowed + await expect(collectionEvm.methods[testCase](receiver, 0n).send({from: sender})).to.be.rejected; + })); + itEth('Can perform transfer()', async ({helper}) => { const owner = await helper.eth.createAccountWithBalance(donor); --- a/tests/src/eth/nonFungible.test.ts +++ b/tests/src/eth/nonFungible.test.ts @@ -517,6 +517,26 @@ expect(receiverBalance).to.contain(tokenId); } }); + + ['transfer', 'transferCross'].map(testCase => itEth(`Cannot ${testCase} non-owned token`, async ({helper}) => { + const sender = await helper.eth.createAccountWithBalance(donor); + const tokenOwner = await helper.eth.createAccountWithBalance(donor); + const receiverSub = minter; + const receiverCrossSub = helper.ethCrossAccount.fromKeyringPair(minter); + + const collection = await helper.nft.mintCollection(minter, {}); + const collectionAddress = helper.ethAddress.fromCollectionId(collection.collectionId); + const collectionEvm = helper.ethNativeContract.collection(collectionAddress, 'nft', sender); + + await collection.mintToken(minter, {Ethereum: sender}); + const nonSendersToken = await collection.mintToken(minter, {Ethereum: tokenOwner}); + + // Cannot transferCross someone else's token: + const receiver = testCase === 'transfer' ? helper.address.substrateToEth(receiverSub.address) : receiverCrossSub; + await expect(collectionEvm.methods[testCase](receiver, nonSendersToken.tokenId).send({from: sender})).to.be.rejected; + // Cannot transfer token if it does not exist: + await expect(collectionEvm.methods[testCase](receiver, 999999).send({from: sender})).to.be.rejected; + })); }); describe('NFT: Fees', () => { --- a/tests/src/eth/reFungible.test.ts +++ b/tests/src/eth/reFungible.test.ts @@ -413,9 +413,10 @@ } }); - itEth.skip('Cannot transferCross with invalid params', async ({helper}) => { + ['transfer', 'transferCross'].map(testCase => itEth(`Cannot ${testCase} non-owned token`, async ({helper}) => { const sender = await helper.eth.createAccountWithBalance(donor); const tokenOwner = await helper.eth.createAccountWithBalance(donor); + const receiverSub = minter; const receiverCrossSub = helper.ethCrossAccount.fromKeyringPair(minter); const collection = await helper.rft.mintCollection(minter, {}); @@ -423,12 +424,14 @@ const collectionEvm = helper.ethNativeContract.collection(collectionAddress, 'rft', sender); await collection.mintToken(minter, 50n, {Ethereum: sender}); - const notSendersToken = await collection.mintToken(minter, 50n, {Ethereum: tokenOwner}); + const nonSendersToken = await collection.mintToken(minter, 50n, {Ethereum: tokenOwner}); + // Cannot transferCross someone else's token: - await expect(collectionEvm.methods.transferCross(receiverCrossSub, notSendersToken.tokenId).send({from: sender})).to.be.rejected; - // FIXME: (transaction successful): Cannot transfer token if it does not exist: - await expect(collectionEvm.methods.transferCross(receiverCrossSub, 999999).send({from: sender})).to.be.rejected; - }); + const receiver = testCase === 'transfer' ? helper.address.substrateToEth(receiverSub.address) : receiverCrossSub; + await expect(collectionEvm.methods[testCase](receiver, nonSendersToken.tokenId).send({from: sender})).to.be.rejected; + // Cannot transfer token if it does not exist: + await expect(collectionEvm.methods[testCase](receiver, 999999).send({from: sender})).to.be.rejected; + })); itEth('transfer event on transfer from partial ownership to full ownership', async ({helper}) => { const caller = await helper.eth.createAccountWithBalance(donor);