git.delta.rocks / unique-network / refs/commits / 370e33a1ce37

difftreelog

fix bigint usage at limits tests

Igor Kozyrev2021-11-01parent: #ecdc247.patch.diff
in: master

1 file changed

modifiedtests/src/limits.test.tsdiffbeforeafterboth
before · tests/src/limits.test.ts
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import { IKeyringPair } from '@polkadot/types/types';7import privateKey from './substrate/privateKey';8import usingApi from './substrate/substrate-api';9import {10  createCollectionExpectSuccess,11  destroyCollectionExpectSuccess,12  setCollectionLimitsExpectSuccess,13  setCollectionSponsorExpectSuccess,14  confirmSponsorshipExpectSuccess,15  createItemExpectSuccess,16  createItemExpectFailure,17  transferExpectSuccess,18  getFreeBalance,19  waitNewBlocks,20} from './util/helpers';21import { expect } from 'chai';2223describe('Number of tokens per address (NFT)', () => {24  let Alice: IKeyringPair;2526  before(async () => {27    await usingApi(async () => {28      Alice = privateKey('//Alice');29    });30  });3132  it.skip('Collection limits allow greater number than chain limits, chain limits are enforced', async () => {3334    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });35    await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 20 });36    for(let i = 0; i < 10; i++){37      await createItemExpectSuccess(Alice, collectionId, 'NFT');38    }39    await createItemExpectFailure(Alice, collectionId, 'NFT');40    await destroyCollectionExpectSuccess(collectionId);41  });4243  it('Collection limits allow lower number than chain limits, collection limits are enforced', async () => {4445    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });46    await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 1 });47    await createItemExpectSuccess(Alice, collectionId, 'NFT');48    await createItemExpectFailure(Alice, collectionId, 'NFT');49    await destroyCollectionExpectSuccess(collectionId);50  });51});5253describe('Number of tokens per address (ReFungible)', () => {54  let Alice: IKeyringPair;5556  before(async () => {57    await usingApi(async () => {58      Alice = privateKey('//Alice');59    });60  });6162  it.skip('Collection limits allow greater number than chain limits, chain limits are enforced', async () => {63    const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible' }});64    await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 20 });65    for(let i = 0; i < 10; i++){66      await createItemExpectSuccess(Alice, collectionId, 'ReFungible');67    }68    await createItemExpectFailure(Alice, collectionId, 'ReFungible');69    await destroyCollectionExpectSuccess(collectionId);70  });7172  it('Collection limits allow lower number than chain limits, collection limits are enforced', async () => {73    const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible' }});74    await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 1 });75    await createItemExpectSuccess(Alice, collectionId, 'ReFungible');76    await createItemExpectFailure(Alice, collectionId, 'ReFungible');77    await destroyCollectionExpectSuccess(collectionId);78  });79});8081describe('Sponsor timeout (NFT)', () => {82  let Alice: IKeyringPair;83  let Bob: IKeyringPair;84  let Charlie: IKeyringPair;8586  before(async () => {87    await usingApi(async () => {88      Alice = privateKey('//Alice');89      Bob = privateKey('//Bob');90      Charlie = privateKey('//Charlie');91    });92  });9394  it('Collection limits have greater timeout value than chain limits, collection limits are enforced', async () => {95    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });96    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 7 });97    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'NFT');98    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);99    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');100    await transferExpectSuccess(collectionId, tokenId, Alice, Bob);101    const aliceBalanceBefore = await getFreeBalance(Alice);102103    // check setting SponsorTimeout = 5, fail104    await waitNewBlocks(5);105    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie);106    const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);107    expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);108109    // check setting SponsorTimeout = 7, success110    await waitNewBlocks(2); // 5 + 2111    await transferExpectSuccess(collectionId, tokenId, Charlie, Bob);112    const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);113    expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);114    await destroyCollectionExpectSuccess(collectionId);115  });116117  it('Collection limits have lower timeout value than chain limits, chain limits are enforced', async () => {118119    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });120    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 1 });121    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'NFT');122    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);123    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');124    await transferExpectSuccess(collectionId, tokenId, Alice, Bob);125    const aliceBalanceBefore = await getFreeBalance(Alice);126127    // check setting SponsorTimeout = 1, fail128    await waitNewBlocks(1);129    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie);130    const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);131    expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);132133    // check setting SponsorTimeout = 5, success134    await waitNewBlocks(4);135    await transferExpectSuccess(collectionId, tokenId, Charlie, Bob);136    const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);137    expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);138    await destroyCollectionExpectSuccess(collectionId);139  });140});141142describe('Sponsor timeout (Fungible)', () => {143  let Alice: IKeyringPair;144  let Bob: IKeyringPair;145  let Charlie: IKeyringPair;146147  before(async () => {148    await usingApi(async () => {149      Alice = privateKey('//Alice');150      Bob = privateKey('//Bob');151      Charlie = privateKey('//Charlie');152    });153  });154155  it('Collection limits have greater timeout value than chain limits, collection limits are enforced', async () => {156    const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});157    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 7 });158    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'Fungible');159    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);160    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');161    await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 10, 'Fungible');162    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');163    const aliceBalanceBefore = await getFreeBalance(Alice);164165    // check setting SponsorTimeout = 5, fail166    await waitNewBlocks(5);167    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');168    const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);169    expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);170171    // check setting SponsorTimeout = 7, success172    await waitNewBlocks(2); // 5 + 2173    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');174    const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);175    expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);176177    await destroyCollectionExpectSuccess(collectionId);178  });179180  it('Collection limits have lower timeout value than chain limits, chain limits are enforced', async () => {181182    const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});183    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 1 });184    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'Fungible');185    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);186    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');187    await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 10, 'Fungible');188    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');189    const aliceBalanceBefore = await getFreeBalance(Alice);190191    // check setting SponsorTimeout = 1, fail192    await waitNewBlocks(1);193    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');194    const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);195    expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);196197    // check setting SponsorTimeout = 5, success198    await waitNewBlocks(4);199    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');200    const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);201    expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);202203    await destroyCollectionExpectSuccess(collectionId);204  });205});206207describe('Sponsor timeout (ReFungible)', () => {208  let Alice: IKeyringPair;209  let Bob: IKeyringPair;210  let Charlie: IKeyringPair;211212  before(async () => {213    await usingApi(async () => {214      Alice = privateKey('//Alice');215      Bob = privateKey('//Bob');216      Charlie = privateKey('//Charlie');217    });218  });219220  it('Collection limits have greater timeout value than chain limits, collection limits are enforced', async () => {221    const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible' }});222    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 7 });223    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'ReFungible');224    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);225    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');226    await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 100, 'ReFungible');227    const aliceBalanceBefore = await getFreeBalance(Alice);228229    // check setting SponsorTimeout = 5, fail230    await waitNewBlocks(5);231    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 20, 'ReFungible');232    const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);233    expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);234235    // check setting SponsorTimeout = 7, success236    await waitNewBlocks(2); // 5 + 2237    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 20, 'ReFungible');238    const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);239    expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);240    await destroyCollectionExpectSuccess(collectionId);241  });242243  it('Collection limits have lower timeout value than chain limits, chain limits are enforced', async () => {244245    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });246    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 1 });247    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'NFT');248    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);249    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');250    await transferExpectSuccess(collectionId, tokenId, Alice, Bob);251    const aliceBalanceBefore = await getFreeBalance(Alice);252253    // check setting SponsorTimeout = 1, fail254    await waitNewBlocks(1);255    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie);256    const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);257    expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);258259    // check setting SponsorTimeout = 5, success260    await waitNewBlocks(4);261    await transferExpectSuccess(collectionId, tokenId, Charlie, Bob);262    const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);263    expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);264    await destroyCollectionExpectSuccess(collectionId);265  });266});267268describe('Collection zero limits (NFT)', () => {269  let Alice: IKeyringPair;270  let Bob: IKeyringPair;271  let Charlie: IKeyringPair;272273  before(async () => {274    await usingApi(async () => {275      Alice = privateKey('//Alice');276      Bob = privateKey('//Bob');277      Charlie = privateKey('//Charlie');278    });279  });280281  it.skip('Limits have 0 in tokens per address field, the chain limits are applied', async () => {282    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });283    await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 0 });284    for(let i = 0; i < 10; i++){285      await createItemExpectSuccess(Alice, collectionId, 'NFT');286    }287    await createItemExpectFailure(Alice, collectionId, 'NFT');288  });289290  it('Limits have 0 in sponsor timeout, no limits are applied', async () => {291292    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });293    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 0 });294    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'NFT');295    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);296    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');297    await transferExpectSuccess(collectionId, tokenId, Alice, Bob);298    const aliceBalanceBefore = await getFreeBalance(Alice);299300    // check setting SponsorTimeout = 0, success with next block301    await waitNewBlocks(1);302    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie);303    const aliceBalanceAfterSponsoredTransaction1 = await getFreeBalance(Alice);304    expect(aliceBalanceAfterSponsoredTransaction1).to.be.lessThan(aliceBalanceBefore);305  });306});307308describe('Collection zero limits (Fungible)', () => {309  let Alice: IKeyringPair;310  let Bob: IKeyringPair;311  let Charlie: IKeyringPair;312313  before(async () => {314    await usingApi(async () => {315      Alice = privateKey('//Alice');316      Bob = privateKey('//Bob');317      Charlie = privateKey('//Charlie');318    });319  });320321  it('Limits have 0 in sponsor timeout, no limits are applied', async () => {322    const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});323    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 0 });324    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'Fungible');325    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);326    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');327    await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 10, 'Fungible');328    const aliceBalanceBefore = await getFreeBalance(Alice);329    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');330331    // check setting SponsorTimeout = 0, success with next block332    await waitNewBlocks(1);333    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');334    const aliceBalanceAfterSponsoredTransaction1 = await getFreeBalance(Alice);335    expect(aliceBalanceAfterSponsoredTransaction1).to.be.lessThan(aliceBalanceBefore);336  });337});338339describe('Collection zero limits (ReFungible)', () => {340  let Alice: IKeyringPair;341  let Bob: IKeyringPair;342  let Charlie: IKeyringPair;343344  before(async () => {345    await usingApi(async () => {346      Alice = privateKey('//Alice');347      Bob = privateKey('//Bob');348      Charlie = privateKey('//Charlie');349    });350  });351352  it.skip('Limits have 0 in tokens per address field, the chain limits are applied', async () => {353    const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible' }});354    await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 0 });355    for(let i = 0; i < 10; i++){356      await createItemExpectSuccess(Alice, collectionId, 'ReFungible');357    }358    await createItemExpectFailure(Alice, collectionId, 'ReFungible');359  });360361  it('Limits have 0 in sponsor timeout, no limits are applied', async () => {362363    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'ReFungible' } });364    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 0 });365    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'ReFungible');366    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);367    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');368    await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 100, 'ReFungible');369    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 20, 'ReFungible');370    const aliceBalanceBefore = await getFreeBalance(Alice);371372    // check setting SponsorTimeout = 0, success with next block373    await waitNewBlocks(1);374    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 20, 'ReFungible');375    const aliceBalanceAfterSponsoredTransaction1 = await getFreeBalance(Alice);376    expect(aliceBalanceAfterSponsoredTransaction1).to.be.lessThan(aliceBalanceBefore);377  });378});
after · tests/src/limits.test.ts
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import { IKeyringPair } from '@polkadot/types/types';7import privateKey from './substrate/privateKey';8import usingApi from './substrate/substrate-api';9import {10  createCollectionExpectSuccess,11  destroyCollectionExpectSuccess,12  setCollectionLimitsExpectSuccess,13  setCollectionSponsorExpectSuccess,14  confirmSponsorshipExpectSuccess,15  createItemExpectSuccess,16  createItemExpectFailure,17  transferExpectSuccess,18  getFreeBalance,19  waitNewBlocks,20} from './util/helpers';21import { expect } from 'chai';2223describe('Number of tokens per address (NFT)', () => {24  let Alice: IKeyringPair;2526  before(async () => {27    await usingApi(async () => {28      Alice = privateKey('//Alice');29    });30  });3132  it.skip('Collection limits allow greater number than chain limits, chain limits are enforced', async () => {3334    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });35    await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 20 });36    for(let i = 0; i < 10; i++){37      await createItemExpectSuccess(Alice, collectionId, 'NFT');38    }39    await createItemExpectFailure(Alice, collectionId, 'NFT');40    await destroyCollectionExpectSuccess(collectionId);41  });4243  it('Collection limits allow lower number than chain limits, collection limits are enforced', async () => {4445    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });46    await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 1 });47    await createItemExpectSuccess(Alice, collectionId, 'NFT');48    await createItemExpectFailure(Alice, collectionId, 'NFT');49    await destroyCollectionExpectSuccess(collectionId);50  });51});5253describe('Number of tokens per address (ReFungible)', () => {54  let Alice: IKeyringPair;5556  before(async () => {57    await usingApi(async () => {58      Alice = privateKey('//Alice');59    });60  });6162  it.skip('Collection limits allow greater number than chain limits, chain limits are enforced', async () => {63    const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible' }});64    await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 20 });65    for(let i = 0; i < 10; i++){66      await createItemExpectSuccess(Alice, collectionId, 'ReFungible');67    }68    await createItemExpectFailure(Alice, collectionId, 'ReFungible');69    await destroyCollectionExpectSuccess(collectionId);70  });7172  it('Collection limits allow lower number than chain limits, collection limits are enforced', async () => {73    const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible' }});74    await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 1 });75    await createItemExpectSuccess(Alice, collectionId, 'ReFungible');76    await createItemExpectFailure(Alice, collectionId, 'ReFungible');77    await destroyCollectionExpectSuccess(collectionId);78  });79});8081describe('Sponsor timeout (NFT)', () => {82  let Alice: IKeyringPair;83  let Bob: IKeyringPair;84  let Charlie: IKeyringPair;8586  before(async () => {87    await usingApi(async () => {88      Alice = privateKey('//Alice');89      Bob = privateKey('//Bob');90      Charlie = privateKey('//Charlie');91    });92  });9394  it('Collection limits have greater timeout value than chain limits, collection limits are enforced', async () => {95    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });96    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 7 });97    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'NFT');98    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);99    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');100    await transferExpectSuccess(collectionId, tokenId, Alice, Bob);101    const aliceBalanceBefore = await getFreeBalance(Alice);102103    // check setting SponsorTimeout = 5, fail104    await waitNewBlocks(5);105    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie);106    const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);107    expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);108109    // check setting SponsorTimeout = 7, success110    await waitNewBlocks(2); // 5 + 2111    await transferExpectSuccess(collectionId, tokenId, Charlie, Bob);112    const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);113    expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;114    //expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);115    await destroyCollectionExpectSuccess(collectionId);116  });117118  it('Collection limits have lower timeout value than chain limits, chain limits are enforced', async () => {119120    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });121    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 1 });122    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'NFT');123    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);124    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');125    await transferExpectSuccess(collectionId, tokenId, Alice, Bob);126    const aliceBalanceBefore = await getFreeBalance(Alice);127128    // check setting SponsorTimeout = 1, fail129    await waitNewBlocks(1);130    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie);131    const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);132    expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);133134    // check setting SponsorTimeout = 5, success135    await waitNewBlocks(4);136    await transferExpectSuccess(collectionId, tokenId, Charlie, Bob);137    const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);138    expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;139    //expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);140    await destroyCollectionExpectSuccess(collectionId);141  });142});143144describe('Sponsor timeout (Fungible)', () => {145  let Alice: IKeyringPair;146  let Bob: IKeyringPair;147  let Charlie: IKeyringPair;148149  before(async () => {150    await usingApi(async () => {151      Alice = privateKey('//Alice');152      Bob = privateKey('//Bob');153      Charlie = privateKey('//Charlie');154    });155  });156157  it('Collection limits have greater timeout value than chain limits, collection limits are enforced', async () => {158    const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});159    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 7 });160    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'Fungible');161    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);162    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');163    await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 10, 'Fungible');164    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');165    const aliceBalanceBefore = await getFreeBalance(Alice);166167    // check setting SponsorTimeout = 5, fail168    await waitNewBlocks(5);169    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');170    const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);171    expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);172173    // check setting SponsorTimeout = 7, success174    await waitNewBlocks(2); // 5 + 2175    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');176    const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);177    expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;178    //expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);179180    await destroyCollectionExpectSuccess(collectionId);181  });182183  it('Collection limits have lower timeout value than chain limits, chain limits are enforced', async () => {184185    const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});186    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 1 });187    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'Fungible');188    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);189    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');190    await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 10, 'Fungible');191    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');192    const aliceBalanceBefore = await getFreeBalance(Alice);193194    // check setting SponsorTimeout = 1, fail195    await waitNewBlocks(1);196    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');197    const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);198    expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);199200    // check setting SponsorTimeout = 5, success201    await waitNewBlocks(4);202    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');203    const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);204    expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;205    //expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);206207    await destroyCollectionExpectSuccess(collectionId);208  });209});210211describe('Sponsor timeout (ReFungible)', () => {212  let Alice: IKeyringPair;213  let Bob: IKeyringPair;214  let Charlie: IKeyringPair;215216  before(async () => {217    await usingApi(async () => {218      Alice = privateKey('//Alice');219      Bob = privateKey('//Bob');220      Charlie = privateKey('//Charlie');221    });222  });223224  it('Collection limits have greater timeout value than chain limits, collection limits are enforced', async () => {225    const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible' }});226    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 7 });227    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'ReFungible');228    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);229    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');230    await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 100, 'ReFungible');231    const aliceBalanceBefore = await getFreeBalance(Alice);232233    // check setting SponsorTimeout = 5, fail234    await waitNewBlocks(5);235    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 20, 'ReFungible');236    const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);237    expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);238239    // check setting SponsorTimeout = 7, success240    await waitNewBlocks(2); // 5 + 2241    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 20, 'ReFungible');242    const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);243    expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;244    //expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);245    await destroyCollectionExpectSuccess(collectionId);246  });247248  it('Collection limits have lower timeout value than chain limits, chain limits are enforced', async () => {249250    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });251    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 1 });252    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'NFT');253    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);254    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');255    await transferExpectSuccess(collectionId, tokenId, Alice, Bob);256    const aliceBalanceBefore = await getFreeBalance(Alice);257258    // check setting SponsorTimeout = 1, fail259    await waitNewBlocks(1);260    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie);261    const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);262    expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);263264    // check setting SponsorTimeout = 5, success265    await waitNewBlocks(4);266    await transferExpectSuccess(collectionId, tokenId, Charlie, Bob);267    const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);268    expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;269    //expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);270    await destroyCollectionExpectSuccess(collectionId);271  });272});273274describe('Collection zero limits (NFT)', () => {275  let Alice: IKeyringPair;276  let Bob: IKeyringPair;277  let Charlie: IKeyringPair;278279  before(async () => {280    await usingApi(async () => {281      Alice = privateKey('//Alice');282      Bob = privateKey('//Bob');283      Charlie = privateKey('//Charlie');284    });285  });286287  it.skip('Limits have 0 in tokens per address field, the chain limits are applied', async () => {288    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });289    await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 0 });290    for(let i = 0; i < 10; i++){291      await createItemExpectSuccess(Alice, collectionId, 'NFT');292    }293    await createItemExpectFailure(Alice, collectionId, 'NFT');294  });295296  it('Limits have 0 in sponsor timeout, no limits are applied', async () => {297298    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });299    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 0 });300    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'NFT');301    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);302    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');303    await transferExpectSuccess(collectionId, tokenId, Alice, Bob);304    const aliceBalanceBefore = await getFreeBalance(Alice);305306    // check setting SponsorTimeout = 0, success with next block307    await waitNewBlocks(1);308    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie);309    const aliceBalanceAfterSponsoredTransaction1 = await getFreeBalance(Alice);310    expect(aliceBalanceAfterSponsoredTransaction1 < aliceBalanceBefore).to.be.true;311    //expect(aliceBalanceAfterSponsoredTransaction1).to.be.lessThan(aliceBalanceBefore);312  });313});314315describe('Collection zero limits (Fungible)', () => {316  let Alice: IKeyringPair;317  let Bob: IKeyringPair;318  let Charlie: IKeyringPair;319320  before(async () => {321    await usingApi(async () => {322      Alice = privateKey('//Alice');323      Bob = privateKey('//Bob');324      Charlie = privateKey('//Charlie');325    });326  });327328  it('Limits have 0 in sponsor timeout, no limits are applied', async () => {329    const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});330    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 0 });331    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'Fungible');332    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);333    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');334    await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 10, 'Fungible');335    const aliceBalanceBefore = await getFreeBalance(Alice);336    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');337338    // check setting SponsorTimeout = 0, success with next block339    await waitNewBlocks(1);340    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');341    const aliceBalanceAfterSponsoredTransaction1 = await getFreeBalance(Alice);342    expect(aliceBalanceAfterSponsoredTransaction1 < aliceBalanceBefore).to.be.true;343    //expect(aliceBalanceAfterSponsoredTransaction1).to.be.lessThan(aliceBalanceBefore);344  });345});346347describe('Collection zero limits (ReFungible)', () => {348  let Alice: IKeyringPair;349  let Bob: IKeyringPair;350  let Charlie: IKeyringPair;351352  before(async () => {353    await usingApi(async () => {354      Alice = privateKey('//Alice');355      Bob = privateKey('//Bob');356      Charlie = privateKey('//Charlie');357    });358  });359360  it.skip('Limits have 0 in tokens per address field, the chain limits are applied', async () => {361    const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible' }});362    await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 0 });363    for(let i = 0; i < 10; i++){364      await createItemExpectSuccess(Alice, collectionId, 'ReFungible');365    }366    await createItemExpectFailure(Alice, collectionId, 'ReFungible');367  });368369  it('Limits have 0 in sponsor timeout, no limits are applied', async () => {370371    const collectionId = await createCollectionExpectSuccess({ mode: { type: 'ReFungible' } });372    await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 0 });373    const tokenId = await createItemExpectSuccess(Alice, collectionId, 'ReFungible');374    await setCollectionSponsorExpectSuccess(collectionId, Alice.address);375    await confirmSponsorshipExpectSuccess(collectionId, '//Alice');376    await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 100, 'ReFungible');377    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 20, 'ReFungible');378    const aliceBalanceBefore = await getFreeBalance(Alice);379380    // check setting SponsorTimeout = 0, success with next block381    await waitNewBlocks(1);382    await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 20, 'ReFungible');383    const aliceBalanceAfterSponsoredTransaction1 = await getFreeBalance(Alice);384    expect(aliceBalanceAfterSponsoredTransaction1 < aliceBalanceBefore).to.be.true;385    //expect(aliceBalanceAfterSponsoredTransaction1).to.be.lessThan(aliceBalanceBefore);386  });387});