difftreelog
Add pieces into token data. Add negative tests.
in: master
4 files changed
pallets/nonfungible/src/common.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/common.rs
+++ b/pallets/nonfungible/src/common.rs
@@ -473,7 +473,11 @@
None
}
- fn total_pieces(&self, _token: TokenId) -> Option<u128> {
- Some(1)
+ fn total_pieces(&self, token: TokenId) -> Option<u128> {
+ if <TokenData<T>>::contains_key((self.id, token)) {
+ Some(1)
+ } else {
+ None
+ }
}
}
primitives/data-structs/src/lib.rsdiffbeforeafterboth--- a/primitives/data-structs/src/lib.rs
+++ b/primitives/data-structs/src/lib.rs
@@ -181,6 +181,7 @@
pub struct TokenData<CrossAccountId> {
pub properties: Vec<Property>,
pub owner: Option<CrossAccountId>,
+ pub pieces: Option<u128>,
}
pub struct OverflowError;
runtime/common/src/runtime_apis.rsdiffbeforeafterboth89 ) -> Result<TokenData<CrossAccountId>, DispatchError> {89 ) -> Result<TokenData<CrossAccountId>, DispatchError> {90 let token_data = TokenData {90 let token_data = TokenData {91 properties: Self::token_properties(collection, token_id, keys)?,91 properties: Self::token_properties(collection, token_id, keys)?,92 owner: Self::token_owner(collection, token_id)?92 owner: Self::token_owner(collection, token_id)?,93 pieces: Self::total_pieces(collection, token_id)?93 };94 };949595 Ok(token_data)96 Ok(token_data)tests/src/createItem.test.tsdiffbeforeafterboth--- 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;
+ });
+ });
});