From 63e242dc3f1d5b732260f7b0ccadb6100905b631 Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Thu, 30 Jun 2022 13:41:04 +0000 Subject: [PATCH] Add pieces into token data. Add negative tests. --- --- a/pallets/nonfungible/src/common.rs +++ b/pallets/nonfungible/src/common.rs @@ -473,7 +473,11 @@ None } - fn total_pieces(&self, _token: TokenId) -> Option { - Some(1) + fn total_pieces(&self, token: TokenId) -> Option { + if >::contains_key((self.id, token)) { + Some(1) + } else { + None + } } } --- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -181,6 +181,7 @@ pub struct TokenData { pub properties: Vec, pub owner: Option, + pub pieces: Option, } pub struct OverflowError; --- a/runtime/common/src/runtime_apis.rs +++ b/runtime/common/src/runtime_apis.rs @@ -89,7 +89,8 @@ ) -> Result, DispatchError> { let token_data = TokenData { properties: Self::token_properties(collection, token_id, keys)?, - owner: Self::token_owner(collection, token_id)? + owner: Self::token_owner(collection, token_id)?, + pieces: Self::total_pieces(collection, token_id)? }; Ok(token_data) --- a/tests/src/createItem.test.ts +++ b/tests/src/createItem.test.ts @@ -98,47 +98,57 @@ await createItemWithPropsExpectSuccess(alice, newCollectionID, createMode, [{key: 'key1', value: 'val1'}]); }); - it.only('Check total pieces of Fungible token', async () => { + it('Check total pieces of Fungible token', async () => { await usingApi(async api => { const createMode = 'Fungible'; const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}}); + const amountPieces = 10n; const tokenId = await createItemExpectSuccess(alice, collectionId, createMode, bob.address); { const totalPieces = await api.rpc.unique.totalPieces(collectionId, tokenId); expect(totalPieces.isSome).to.be.true; - expect(totalPieces.unwrap().toBigInt()).to.be.eq(10n); + expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces); } await transferExpectSuccess(collectionId, tokenId, bob, alice, 1, createMode); { const totalPieces = await api.rpc.unique.totalPieces(collectionId, tokenId); expect(totalPieces.isSome).to.be.true; - expect(totalPieces.unwrap().toBigInt()).to.be.eq(10n); + expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces); } + + const totalPieces = (await api.rpc.unique.tokenData(collectionId, tokenId, [])).pieces; + expect(totalPieces.isSome).to.be.true; + expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces); }); }); - it.only('Check total pieces of NFT token', async () => { + it('Check total pieces of NFT token', async () => { await usingApi(async api => { const createMode = 'NFT'; const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}}); + const amountPieces = 1n; const tokenId = await createItemExpectSuccess(alice, collectionId, createMode, bob.address); { const totalPieces = await api.rpc.unique.totalPieces(collectionId, tokenId); expect(totalPieces.isSome).to.be.true; - expect(totalPieces.unwrap().toBigInt()).to.be.eq(1n); + expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces); } await transferExpectSuccess(collectionId, tokenId, bob, alice, 1, createMode); { const totalPieces = await api.rpc.unique.totalPieces(collectionId, tokenId); expect(totalPieces.isSome).to.be.true; - expect(totalPieces.unwrap().toBigInt()).to.be.eq(1n); + expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces); } + + const totalPieces = (await api.rpc.unique.tokenData(collectionId, tokenId, [])).pieces; + expect(totalPieces.isSome).to.be.true; + expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces); }); }); - it.only('Check total pieces of ReFungible token', async () => { + it('Check total pieces of ReFungible token', async () => { await usingApi(async api => { const createMode = 'ReFungible'; const createCollectionResult = await createCollection(api, alice, {mode: {type: createMode}}); @@ -157,6 +167,10 @@ expect(totalPieces.isSome).to.be.true; expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces); } + + const totalPieces = (await api.rpc.unique.tokenData(collectionId, tokenId, [])).pieces; + expect(totalPieces.isSome).to.be.true; + expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces); }); }); }); @@ -233,4 +247,37 @@ await createItemWithPropsExpectFailure(alice, newCollectionID, 'NFT', [{key: 'k', value: 'vvvvvv'.repeat(5000)}, {key: 'k2', value: 'vvv'.repeat(5000)}]); }); }); + + it('Check total pieces for invalid Fungible token', async () => { + await usingApi(async api => { + const createCollectionResult = await createCollection(api, alice, {mode: {type: 'Fungible', decimalPoints: 0}}); + const collectionId = createCollectionResult.collectionId; + const invalidTokenId = 1000_000; + + expect((await api.rpc.unique.totalPieces(collectionId, invalidTokenId)).isNone).to.be.true; + expect((await api.rpc.unique.tokenData(collectionId, invalidTokenId, [])).pieces.isNone).to.be.true; + }); + }); + + it('Check total pieces for invalid NFT token', async () => { + await usingApi(async api => { + const createCollectionResult = await createCollection(api, alice, {mode: {type: 'NFT'}}); + const collectionId = createCollectionResult.collectionId; + const invalidTokenId = 1000_000; + + expect((await api.rpc.unique.totalPieces(collectionId, invalidTokenId)).isNone).to.be.true; + expect((await api.rpc.unique.tokenData(collectionId, invalidTokenId, [])).pieces.isNone).to.be.true; + }); + }); + + it('Check total pieces for invalid Refungible token', async () => { + await usingApi(async api => { + const createCollectionResult = await createCollection(api, alice, {mode: {type: 'ReFungible'}}); + const collectionId = createCollectionResult.collectionId; + const invalidTokenId = 1000_000; + + expect((await api.rpc.unique.totalPieces(collectionId, invalidTokenId)).isNone).to.be.true; + expect((await api.rpc.unique.tokenData(collectionId, invalidTokenId, [])).pieces.isNone).to.be.true; + }); + }); }); -- gitstuff