git.delta.rocks / unique-network / refs/commits / e106ad4c8f2d

difftreelog

source

tests/src/createCollection.test.ts7.7 KiBsourcehistory
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617import {usingPlaygrounds, expect, itSub, Pallets} from './util/playgrounds';18import {IKeyringPair} from '@polkadot/types/types';19import {ICollectionCreationOptions, IProperty} from './util/playgrounds/types';20import {DevUniqueHelper} from './util/playgrounds/unique.dev';2122async function mintCollectionHelper(helper: DevUniqueHelper, signer: IKeyringPair, options: ICollectionCreationOptions, type?: 'nft' | 'fungible' | 'refungible') {23  let collection;24  if (type === 'nft') {25    collection = await helper.nft.mintCollection(signer, options);26  } else if (type === 'fungible') {27    collection = await helper.ft.mintCollection(signer, options, 0);28  } else {29    collection = await helper.rft.mintCollection(signer, options);30  }31  const data = await collection.getData();32  expect(data?.normalizedOwner).to.be.equal(helper.util.normalizeSubstrateAddress(signer.address));33  expect(data?.name).to.be.equal(options.name);34  expect(data?.description).to.be.equal(options.description);35  expect(data?.raw.tokenPrefix).to.be.equal(options.tokenPrefix);36  if (options.properties) {37    expect(data?.raw.properties).to.be.deep.equal(options.properties);38  }3940  if (options.tokenPropertyPermissions) {41    expect(data?.raw.tokenPropertyPermissions).to.be.deep.equal(options.tokenPropertyPermissions);42  }4344  return collection;45}4647describe('integration test: ext. createCollection():', () => {48  let alice: IKeyringPair;4950  before(async () => {51    await usingPlaygrounds(async (helper, privateKey) => {52      const donor = privateKey('//Alice');53      [alice] = await helper.arrange.createAccounts([100n], donor);54    });55  });56  itSub('Create new NFT collection', async ({helper}) => {5758    await mintCollectionHelper(helper, alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 'nft');59  });60  itSub('Create new NFT collection whith collection_name of maximum length (64 bytes)', async ({helper}) => {6162    await mintCollectionHelper(helper, alice, {name: 'A'.repeat(64), description: 'descr', tokenPrefix: 'COL'}, 'nft');63  });64  itSub('Create new NFT collection whith collection_description of maximum length (256 bytes)', async ({helper}) => {6566    await mintCollectionHelper(helper, alice, {name: 'name', description: 'A'.repeat(256), tokenPrefix: 'COL'}, 'nft');67  });68  itSub('Create new NFT collection whith token_prefix of maximum length (16 bytes)', async ({helper}) => {6970    await mintCollectionHelper(helper, alice, {name: 'name', description: 'descr', tokenPrefix: 'A'.repeat(16)}, 'nft');71  });72  itSub('Create new Fungible collection', async ({helper}) => {7374    await mintCollectionHelper(helper, alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'}, 'fungible');75  });76  itSub.ifWithPallets('Create new ReFungible collection', [Pallets.ReFungible], async ({helper}) => {7778    await mintCollectionHelper(helper, alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'}, 'refungible');79  });8081  itSub('create new collection with properties', async ({helper}) => {8283    await mintCollectionHelper(helper, alice, {84      name: 'name', description: 'descr', tokenPrefix: 'COL',85      properties: [{key: 'key1', value: 'val1'}],86      tokenPropertyPermissions: [{key: 'key1', permission: {tokenOwner: true, mutable: false, collectionAdmin: true}}],87    }, 'nft');88  });8990  itSub('Create new collection with extra fields', async ({helper}) => {9192    const collection = await mintCollectionHelper(helper, alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'}, 'fungible');93    await collection.setPermissions(alice, {access: 'AllowList'});94    await collection.setLimits(alice, {accountTokenOwnershipLimit: 3});95    const data = await collection.getData();96    const limits = await collection.getEffectiveLimits();97    const raw = data?.raw;9899    expect(data?.normalizedOwner).to.be.equal(helper.util.normalizeSubstrateAddress(alice.address));100    expect(data?.name).to.be.equal('name');101    expect(data?.description).to.be.equal('descr');102    expect(raw.permissions.access).to.be.equal('AllowList');103    expect(raw.mode).to.be.deep.equal({Fungible: '0'});104    expect(limits.accountTokenOwnershipLimit).to.be.equal(3);105  });106107  itSub('New collection is not external', async ({helper}) => {108109    const collection = await helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'});110    const data = await collection.getData();111    expect(data?.raw.readOnly).to.be.false;112  });113});114115describe('(!negative test!) integration test: ext. createCollection():', () => {116  let alice: IKeyringPair;117118  before(async () => {119    await usingPlaygrounds(async (helper, privateKey) => {120      const donor = privateKey('//Alice');121      [alice] = await helper.arrange.createAccounts([100n], donor);122    });123  });124125  itSub('(!negative test!) create new NFT collection whith incorrect data (collection_name)', async ({helper}) => {126    const mintCollectionTx = async () => helper.nft.mintCollection(alice, {name: 'A'.repeat(65), description: 'descr', tokenPrefix: 'COL'});127    await expect(mintCollectionTx()).to.be.rejectedWith('Verification Error');128  });129  itSub('(!negative test!) create new NFT collection whith incorrect data (collection_description)', async ({helper}) => {130    const mintCollectionTx = async () => helper.nft.mintCollection(alice, {name: 'name', description: 'A'.repeat(257), tokenPrefix: 'COL'});131    await expect(mintCollectionTx()).to.be.rejectedWith('Verification Error');132  });133  itSub('(!negative test!) create new NFT collection whith incorrect data (token_prefix)', async ({helper}) => {134135    const mintCollectionTx = async () => helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'A'.repeat(17)});136    await expect(mintCollectionTx()).to.be.rejectedWith('Verification Error');137  });138  itSub('(!negative test!) fails when bad limits are set', async ({helper}) => {139140    const mintCollectionTx = async () => helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL', limits: {tokenLimit: 0}});141    await expect(mintCollectionTx()).to.be.rejectedWith(/common\.CollectionTokenLimitExceeded/);142  });143144  itSub('(!negative test!) create collection with incorrect property limit (64 elements)', async ({helper}) => {145    const props: IProperty[] = [];146147    for (let i = 0; i < 65; i++) {148      props.push({key: `key${i}`, value: `value${i}`});149    }150    const mintCollectionTx = async () => helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL', properties: props});151    await expect(mintCollectionTx()).to.be.rejectedWith('Verification Error');152  });153154  itSub('(!negative test!) create collection with incorrect property limit (40 kb)', async ({helper}) => {155    const props: IProperty[] = [];156157    for (let i = 0; i < 32; i++) {158      props.push({key: `key${i}`.repeat(80), value: `value${i}`.repeat(80)});159    }160161    const mintCollectionTx = async () => helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL', properties: props});162    await expect(mintCollectionTx()).to.be.rejectedWith('Verification Error');163  });164});