1import { Keyring } from '@polkadot/api';2import { IKeyringPair } from '@polkadot/types/types';3import chai from 'chai';4import chaiAsPromised from 'chai-as-promised';5import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';6import {7 createCollectionExpectSuccess,8 destroyCollectionExpectSuccess,9} from './util/helpers';1011chai.use(chaiAsPromised);12const expect = chai.expect;1314let Alice: IKeyringPair;15let Bob: IKeyringPair;16let Shema: any;17let largeShema: any;1819before(async () => {20 await usingApi(async (api) => {21 const keyring = new Keyring({ type: 'sr25519' });22 Alice = keyring.addFromUri('//Alice');23 Bob = keyring.addFromUri('//Bob');24 Shema = '0x31';25 largeShema = '0x391d2323232320486572652077696c6c20626520666f7572206e6f6465732023232323\26 0a0a0a232064697361626c65206d646e730a2320666f7263652049503420636f6e6e656374696f6e730a23\27 2066696c74657220636f6e6e656374696f6e732077697468207566770a0a0a0a0a232056616c696461746f\28 7220310a0a0a2e2f6e6674205c0a2d2d626173652d70617468202f746d702f616c696365205c0a2d2d6368\29 61696e206c6f63616c205c0a2d2d616c696365205c0a2d2d6e6f64652d6b65792030303030303030303030\30 30303030303030303030303030303030303030303030303030303030303030303030303030303030303030\31 3030303030303030303031205c0a2d2d74656c656d657472792d75726c20277773733a2f2f74656c656d65\32 7472792e706f6c6b61646f742e696f2f7375626d69742f203027205c0a2d2d76616c696461746f72205c0a\33 2d2d6e6f2d6d646e73205c0a2d2d6c697374656e2d616464723d2f6970342f302e302e302e302f7463702f\34 3330333333205c0a2d6c747261636520263e2056616c696461746f72312e6c6f670a0a2320446563203037\35 2031393a33303a33392e3832312020494e464f20f09f8fb720204c6f63616c206e6f6465206964656e7469\36 74792069733a20313244334b6f6f5745796f70704e43557838597836366f5639664a6e7269587743635877\37 44445541326b6a36766e63366944457020286c656761637920726570726573656e746174696f6e3a203132\38 44334b6f6f5745796f70704e43557838597836366f5639664a6e726958774363587744445541326b6a3676\39 6e63366944457029202020200a0a0a232056616c696461746f7220320a0a0a0a2e2f6e6674205c0a2d2d62\40 6173652d70617468202f746d702f626f62205c0a2d2d636861696e206c6f63616c205c0a2d2d626f62205c\41 0a2d2d74656c656d657472792d75726c20277773733a2f2f74656c656d657472792e706f6c6b61646f742e\42 696f2f7375626d69742f203027205c0a2d2d76616c696461746f72205c0a2d2d6e6f2d6d646e73205c0a2d\43 2d6c697374656e2d616464723d2f6970342f302e302e302e302f7463702f3330333333205c0a2d2d626f6f\44 746e6f646573202f6970342f31302e3231312e35352e392f7463702f33303333332f7032702f313244334b\45 6f6f5745796f70704e43557838597836366f5639664a6e726958774363587744445541326b6a36766e6336\46 69444570205c0a2d6c747261636520263e2056616c696461746f72322e6c6f670a0a232044656320303720\47 31393a33373a30312e3535322020494e464f20f09f8fb720204c6f63616c206e6f6465206964656e746974\48 792069733a20313244334b6f6f574d6f69635a62595266676a714d396f5965354a774b63467644635a5250\49 4843707856316762665057514d327720286c656761637920726570726573656e746174696f6e3a20313244\50 334b6f6f574d6f69635a62595266676a714d396f5965354a774b63467644635a5250484370785631676266\51 5057514d327729202020200a0a0a0a23204761746577617920310a0a0a2e2f6e6674205c0a2d2d62617365\52 2d70617468202f746d702f6761746577617931205c0a2d2d636861696e206c6f63616c205c0a2d2d6e616d\53 652047617465576179205c0a2d2d77732d65787465726e616c205c0a2d2d7270632d636f727320616c6c20\54 5c0a2d2d6e6f2d6d646e73205c0a2d2d6c697374656e2d616464723d2f6970342f302e302e302e302f7463\55 702f3330333333205c0a2d2d626f6f746e6f646573202f6970342f31302e3231312e35352e392f7463702f\56 33303333332f7032702f313244334b6f6f5745796f70704e43557838597836366f5639664a6e7269587743\57 63587744445541326b6a36766e633669444570202f6970342f31302e3231312e35352e31302f7463702f33\58 303333332f7032702f313244334b6f6f574d6f69635a62595266676a714d396f5965354a774b6346764463\59 5a52504843707856316762665057514d3277202d6c747261636520263e2047617465776179312e6c6f670a\60 0a0a23204761746577617920320a0a0a2e2f6e6674205c0a2d2d626173652d70617468202f746d702f6761\61 746577617932205c0a2d2d636861696e206c6f63616c205c0a2d2d6e616d652047617465576179205c0a2d\62 2d77732d65787465726e616c205c0a2d2d7270632d636f727320616c6c205c0a2d2d6e6f2d6d646e73205c\63 0a2d2d6c697374656e2d616464723d2f6970342f302e302e302e302f7463702f3330333333205c0a2d2d62\64 6f6f746e6f646573202f6970342f31302e3231312e35352e392f7463702f33303333332f7032702f313244\65 334b6f6f5745796f70704e43557838597836366f5639664a6e726958774363587744445541326b6a36766e\66 633669444570202f6970342f31302e3231312e35352e31302f7463702f33303333332f7032702f31324433\67 4b6f6f574346456166744d4373503842596144764d45735362555065454256366554674e726e6b37425675\68 51726e5666202d6c747261636520263e2047617465776179322e6c6f670a0a';69 });70});71describe('Integration Test ext. setConstOnChainSchema()', () => {7273 it('Run extrinsic with parameters of the collection id, set the scheme', async () => {74 await usingApi(async (api) => {75 const collectionId = await createCollectionExpectSuccess();76 const collection: any = (await api.query.nft.collection(collectionId));77 expect(collection.Owner.toString()).to.be.eq(Alice.address);78 const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);79 await submitTransactionAsync(Alice, setShema);80 });81});8283 it('Checking collection data using the ConstOnChainSchema parameter', async () => {84 await usingApi(async (api) => {85 const collectionId = await createCollectionExpectSuccess();86 const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);87 await submitTransactionAsync(Alice, setShema);88 const collection: any = (await api.query.nft.collection(collectionId));89 expect(collection.ConstOnChainSchema.toString()).to.be.eq(Shema);9091 });92 });93});9495describe('Negative Integration Test ext. setConstOnChainSchema()', () => {9697 it('Set a non-existent collection', async () => {98 await usingApi(async (api) => {99 100 const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;101 const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);102 await expect(submitTransactionExpectFailAsync(Alice, setShema)).to.be.rejected;103 });104});105106 it('Set a previously deleted collection', async () => {107 await usingApi(async (api) => {108 const collectionId = await createCollectionExpectSuccess();109 await destroyCollectionExpectSuccess(collectionId);110 const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);111 await expect(submitTransactionExpectFailAsync(Alice, setShema)).to.be.rejected;112 });113});114115 it('Set invalid data in schema (size too large:> 1024b)', async () => {116 await usingApi(async (api) => {117 const collectionId = await createCollectionExpectSuccess();118 const setShema = api.tx.nft.setConstOnChainSchema(collectionId, largeShema);119 await expect(submitTransactionExpectFailAsync(Alice, setShema)).to.be.rejected;120 });121});122123 it('Execute method not on behalf of the collection owner', async () => {124 await usingApi(async (api) => {125 const collectionId = await createCollectionExpectSuccess();126 const collection: any = (await api.query.nft.collection(collectionId));127 expect(collection.Owner.toString()).to.be.eq(Alice.address);128 const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);129 await expect(submitTransactionExpectFailAsync(Bob, setShema)).to.be.rejected;130 });131});132133});