1234567891011121314151617import {usingPlaygrounds, expect, itSub, Pallets} from './util/playgrounds';18import {IKeyringPair} from '@polkadot/types/types';19import {IProperty} from './util/playgrounds/types';2021describe('integration test: ext. createCollection():', () => {22 let alice: IKeyringPair;2324 before(async () => {25 await usingPlaygrounds(async (helper, privateKey) => {26 const donor = privateKey('//Alice');27 [alice] = await helper.arrange.createAccounts([100n], donor);28 });29 });30 itSub('Create new NFT collection', async ({helper}) => {3132 await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});33 });34 itSub('Create new NFT collection whith collection_name of maximum length (64 bytes)', async ({helper}) => {3536 await helper.nft.mintCollection(alice, {name: 'A'.repeat(64), description: 'descr', tokenPrefix: 'COL'});37 });38 itSub('Create new NFT collection whith collection_description of maximum length (256 bytes)', async ({helper}) => {3940 await helper.nft.mintCollection(alice, {name: 'name', description: 'A'.repeat(256), tokenPrefix: 'COL'});41 });42 itSub('Create new NFT collection whith token_prefix of maximum length (16 bytes)', async ({helper}) => {4344 await helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'A'.repeat(16)});45 });46 itSub('Create new Fungible collection', async ({helper}) => {4748 await helper.ft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'}, 0);49 });50 itSub.ifWithPallets('Create new ReFungible collection', [Pallets.ReFungible], async ({helper}) => {5152 await helper.rft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'});53 });5455 itSub('create new collection with properties', async ({helper}) => {5657 await helper.nft.mintCollection(alice, {58 name: 'name', description: 'descr', tokenPrefix: 'COL',59 properties: [{key: 'key1', value: 'val1'}],60 tokenPropertyPermissions: [{key: 'key1', permission: {tokenOwner: true, mutable: false, collectionAdmin: true}}],61 });62 });6364 itSub('Create new collection with extra fields', async ({helper}) => {6566 const collection = await helper.ft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'}, 8);67 await collection.setPermissions(alice, {access: 'AllowList'});68 await collection.setLimits(alice, {accountTokenOwnershipLimit: 3});69 const data = await collection.getData();70 const limits = await collection.getEffectiveLimits();71 const raw = data?.raw;7273 expect(data?.normalizedOwner).to.be.equal(alice.address);74 expect(data?.name).to.be.equal('name');75 expect(data?.description).to.be.equal('descr');76 expect(raw.permissions.access).to.be.equal('AllowList');77 expect(raw.mode).to.be.deep.equal({Fungible: '8'});78 expect(limits.accountTokenOwnershipLimit).to.be.equal(3);79 });8081 itSub('New collection is not external', async ({helper}) => {8283 const collection = await helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'});84 const data = await collection.getData();85 expect(data?.raw.readOnly).to.be.false;86 });87});8889describe('(!negative test!) integration test: ext. createCollection():', () => {90 let alice: IKeyringPair;9192 before(async () => {93 await usingPlaygrounds(async (helper, privateKey) => {94 const donor = privateKey('//Alice');95 [alice] = await helper.arrange.createAccounts([100n], donor);96 });97 });9899 itSub('(!negative test!) create new NFT collection whith incorrect data (collection_name)', async ({helper}) => {100 const mintCollectionTx = async () => helper.nft.mintCollection(alice, {name: 'A'.repeat(65), description: 'descr', tokenPrefix: 'COL'});101 await expect(mintCollectionTx()).to.be.rejectedWith('Verification Error');102 });103 itSub('(!negative test!) create new NFT collection whith incorrect data (collection_description)', async ({helper}) => {104 const mintCollectionTx = async () => helper.nft.mintCollection(alice, {name: 'name', description: 'A'.repeat(257), tokenPrefix: 'COL'});105 await expect(mintCollectionTx()).to.be.rejectedWith('Verification Error');106 });107 itSub('(!negative test!) create new NFT collection whith incorrect data (token_prefix)', async ({helper}) => {108109 const mintCollectionTx = async () => helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'A'.repeat(17)});110 await expect(mintCollectionTx()).to.be.rejectedWith('Verification Error');111 });112 itSub('(!negative test!) fails when bad limits are set', async ({helper}) => {113114 const mintCollectionTx = async () => helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL', limits: {tokenLimit: 0}});115 await expect(mintCollectionTx()).to.be.rejectedWith(/common\.CollectionTokenLimitExceeded/);116 });117118 itSub('(!negative test!) create collection with incorrect property limit (64 elements)', async ({helper}) => {119 const props: IProperty[] = [];120121 for (let i = 0; i < 65; i++) {122 props.push({key: `key${i}`, value: `value${i}`});123 }124 const mintCollectionTx = async () => helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL', properties: props});125 await expect(mintCollectionTx()).to.be.rejectedWith('Verification Error');126 });127128 itSub('(!negative test!) create collection with incorrect property limit (40 kb)', async ({helper}) => {129 const props: IProperty[] = [];130131 for (let i = 0; i < 32; i++) {132 props.push({key: `key${i}`.repeat(80), value: `value${i}`.repeat(80)});133 }134135 const mintCollectionTx = async () => helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL', properties: props});136 await expect(mintCollectionTx()).to.be.rejectedWith('Verification Error');137 });138});