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.rsdiffbeforeafterboth--- a/runtime/common/src/runtime_apis.rs
+++ b/runtime/common/src/runtime_apis.rs
@@ -89,7 +89,8 @@
) -> Result<TokenData<CrossAccountId>, 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)
tests/src/createItem.test.tsdiffbeforeafterboth98 await createItemWithPropsExpectSuccess(alice, newCollectionID, createMode, [{key: 'key1', value: 'val1'}]);98 await createItemWithPropsExpectSuccess(alice, newCollectionID, createMode, [{key: 'key1', value: 'val1'}]);99 });99 });100100101 it.only('Check total pieces of Fungible token', async () => {101 it('Check total pieces of Fungible token', async () => {102 await usingApi(async api => {102 await usingApi(async api => {103 const createMode = 'Fungible';103 const createMode = 'Fungible';104 const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}});104 const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}});105 const amountPieces = 10n;105 const tokenId = await createItemExpectSuccess(alice, collectionId, createMode, bob.address);106 const tokenId = await createItemExpectSuccess(alice, collectionId, createMode, bob.address);106 {107 {107 const totalPieces = await api.rpc.unique.totalPieces(collectionId, tokenId);108 const totalPieces = await api.rpc.unique.totalPieces(collectionId, tokenId);108 expect(totalPieces.isSome).to.be.true;109 expect(totalPieces.isSome).to.be.true;109 expect(totalPieces.unwrap().toBigInt()).to.be.eq(10n);110 expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces);110 }111 }111112112 await transferExpectSuccess(collectionId, tokenId, bob, alice, 1, createMode);113 await transferExpectSuccess(collectionId, tokenId, bob, alice, 1, createMode);113 {114 {114 const totalPieces = await api.rpc.unique.totalPieces(collectionId, tokenId);115 const totalPieces = await api.rpc.unique.totalPieces(collectionId, tokenId);115 expect(totalPieces.isSome).to.be.true;116 expect(totalPieces.isSome).to.be.true;116 expect(totalPieces.unwrap().toBigInt()).to.be.eq(10n);117 expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces);117 }118 }119120 const totalPieces = (await api.rpc.unique.tokenData(collectionId, tokenId, [])).pieces;121 expect(totalPieces.isSome).to.be.true;122 expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces);118 });123 });119 });124 });120125121 it.only('Check total pieces of NFT token', async () => {126 it('Check total pieces of NFT token', async () => {122 await usingApi(async api => {127 await usingApi(async api => {123 const createMode = 'NFT';128 const createMode = 'NFT';124 const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});129 const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});130 const amountPieces = 1n;125 const tokenId = await createItemExpectSuccess(alice, collectionId, createMode, bob.address);131 const tokenId = await createItemExpectSuccess(alice, collectionId, createMode, bob.address);126 {132 {127 const totalPieces = await api.rpc.unique.totalPieces(collectionId, tokenId);133 const totalPieces = await api.rpc.unique.totalPieces(collectionId, tokenId);128 expect(totalPieces.isSome).to.be.true;134 expect(totalPieces.isSome).to.be.true;129 expect(totalPieces.unwrap().toBigInt()).to.be.eq(1n);135 expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces);130 }136 }131137132 await transferExpectSuccess(collectionId, tokenId, bob, alice, 1, createMode);138 await transferExpectSuccess(collectionId, tokenId, bob, alice, 1, createMode);133 {139 {134 const totalPieces = await api.rpc.unique.totalPieces(collectionId, tokenId);140 const totalPieces = await api.rpc.unique.totalPieces(collectionId, tokenId);135 expect(totalPieces.isSome).to.be.true;141 expect(totalPieces.isSome).to.be.true;136 expect(totalPieces.unwrap().toBigInt()).to.be.eq(1n);142 expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces);137 }143 }144145 const totalPieces = (await api.rpc.unique.tokenData(collectionId, tokenId, [])).pieces;146 expect(totalPieces.isSome).to.be.true;147 expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces);138 });148 });139 });149 });140150141 it.only('Check total pieces of ReFungible token', async () => {151 it('Check total pieces of ReFungible token', async () => {142 await usingApi(async api => {152 await usingApi(async api => {143 const createMode = 'ReFungible';153 const createMode = 'ReFungible';144 const createCollectionResult = await createCollection(api, alice, {mode: {type: createMode}});154 const createCollectionResult = await createCollection(api, alice, {mode: {type: createMode}});158 expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces);168 expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces);159 }169 }170171 const totalPieces = (await api.rpc.unique.tokenData(collectionId, tokenId, [])).pieces;172 expect(totalPieces.isSome).to.be.true;173 expect(totalPieces.unwrap().toBigInt()).to.be.eq(amountPieces);160 });174 });161 });175 });162});176});234 });248 });235 });249 });250251 it('Check total pieces for invalid Fungible token', async () => {252 await usingApi(async api => {253 const createCollectionResult = await createCollection(api, alice, {mode: {type: 'Fungible', decimalPoints: 0}});254 const collectionId = createCollectionResult.collectionId;255 const invalidTokenId = 1000_000;256 257 expect((await api.rpc.unique.totalPieces(collectionId, invalidTokenId)).isNone).to.be.true;258 expect((await api.rpc.unique.tokenData(collectionId, invalidTokenId, [])).pieces.isNone).to.be.true;259 });260 });261262 it('Check total pieces for invalid NFT token', async () => {263 await usingApi(async api => {264 const createCollectionResult = await createCollection(api, alice, {mode: {type: 'NFT'}});265 const collectionId = createCollectionResult.collectionId;266 const invalidTokenId = 1000_000;267 268 expect((await api.rpc.unique.totalPieces(collectionId, invalidTokenId)).isNone).to.be.true;269 expect((await api.rpc.unique.tokenData(collectionId, invalidTokenId, [])).pieces.isNone).to.be.true;270 });271 });272273 it('Check total pieces for invalid Refungible token', async () => {274 await usingApi(async api => {275 const createCollectionResult = await createCollection(api, alice, {mode: {type: 'ReFungible'}});276 const collectionId = createCollectionResult.collectionId;277 const invalidTokenId = 1000_000;278 279 expect((await api.rpc.unique.totalPieces(collectionId, invalidTokenId)).isNone).to.be.true;280 expect((await api.rpc.unique.tokenData(collectionId, invalidTokenId, [])).pieces.isNone).to.be.true;281 });282 });236});283});237284