12import { ApiPromise, Keyring } from '@polkadot/api';3import { IKeyringPair } from '@polkadot/types/types';4import BN from 'bn.js';5import chai from 'chai';6import chaiAsPromised from 'chai-as-promised';7import privateKey from './substrate/privateKey';8import promisifySubstrate from './substrate/promisify-substrate';9import usingApi, { submitTransactionAsync } from './substrate/substrate-api';10import { ICollectionInterface } from './types';11import { createCollectionExpectSuccess, destroyCollectionExpectSuccess, getCreateItemResult } from './util/helpers';1213chai.use(chaiAsPromised);14const expect = chai.expect;1516let alice: IKeyringPair;17let collectionIdForTesting: number;1819202122232425async function getDetailedCollectionInfo(api: ApiPromise, collectionId: number)26 : Promise<ICollectionInterface | null> {27 return await api.query.nft.collection(collectionId) as unknown as ICollectionInterface;28}2930async function getCollectionCount(api: ApiPromise): Promise<number> {31 32 return (await api.query.nft.collectionCount() as unknown as BN).toNumber();33}3435function utf8Decoder(name: [Uint8Array]) {36 const collectionNameArr = Array.prototype.slice.call(name);37 return String.fromCharCode(...collectionNameArr);38}3940describe('hooks', () => {41 before(async () => {42 await usingApi(async (api) => {43 const keyring = new Keyring({ type: 'sr25519' });44 alice = keyring.addFromUri('//Alice');45 });46 });47 it('choose or create collection for testing', async () => {48 await usingApi(async (api: ApiPromise) => {49 const newCollectionId = await createCollectionExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: 'NFT'});50 console.log('newCollectionId', newCollectionId);51 collectionIdForTesting = newCollectionId;52 });53 });54});5556describe('setSchemaVersion positive', () => {57 let tx;58 before(async () => {59 await usingApi(async (api) => {60 const keyring = new Keyring({ type: 'sr25519' });61 alice = keyring.addFromUri('//Alice');62 });63 });64 it('execute setSchemaVersion with image url and unique ', async () => {65 await usingApi(async (api: ApiPromise) => {66 tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'Unique');67 const events = await submitTransactionAsync(alice, tx);68 const result = getCreateItemResult(events);69 const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting);70 71 expect(result.success).to.be.true;72 73 expect(collectionInfo).to.be.exist;74 75 expect(collectionInfo ? collectionInfo.SchemaVersion.toString() : '').to.be.equal('Unique');76 });77 });7879 it('validate schema version with just entered data', async () => {80 await usingApi(async (api: ApiPromise) => {81 tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'ImageURL');82 const events = await submitTransactionAsync(alice, tx);83 const result = getCreateItemResult(events);84 const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting);85 86 expect(result.success).to.be.true;87 88 expect(collectionInfo).to.be.exist;89 90 expect(collectionInfo ? collectionInfo.SchemaVersion.toString() : '').to.be.equal('ImageURL');91 });92 });93});9495describe('setSchemaVersion negative', () => {96 let tx;97 before(async () => {98 await usingApi(async (api) => {99 const keyring = new Keyring({ type: 'sr25519' });100 alice = keyring.addFromUri('//Alice');101 });102 });103 it('execute setSchemaVersion for not exists collection', async () => {104 await usingApi(async (api: ApiPromise) => {105 const collectionCount = await getCollectionCount(api);106 const nonExistedCollectionId = collectionCount + 1;107 tx = api.tx.nft.setSchemaVersion(nonExistedCollectionId, 'ImageURL');108 try {109 await submitTransactionAsync(alice, tx);110 } catch (e) {111 112 expect(e).to.be.exist;113 }114 });115 });116117 it('execute setSchemaVersion with not correct schema version', async () => {118 await usingApi(async (api: ApiPromise) => {119 try {120 tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'Test');121 await submitTransactionAsync(alice, tx);122 } catch (e) {123 124 expect(e).to.be.exist;125 }126 });127 });128129 it('execute setSchemaVersion for deleted collection', async () => {130 await usingApi(async (api: ApiPromise) => {131 const collectionCount = await getCollectionCount(api);132 await destroyCollectionExpectSuccess(collectionCount);133 try {134 tx = api.tx.nft.setSchemaVersion(collectionCount, 'ImageURL');135 await submitTransactionAsync(alice, tx);136 } catch (e) {137 138 expect(e).to.be.exist;139 }140 });141 });142});