1234567891011121314151617import {IKeyringPair} from '@polkadot/types/types';18import {expect} from 'chai';19import privateKey from './substrate/privateKey';20import usingApi from './substrate/substrate-api';21import {22 confirmSponsorshipExpectSuccess,23 createCollectionExpectSuccess,24 createItemExpectSuccess,25 findUnusedAddress,26 getDetailedCollectionInfo,27 setCollectionLimitsExpectSuccess,28 setCollectionSponsorExpectSuccess,29 setVariableMetaDataExpectFailure,30 setVariableMetaDataExpectSuccess,31} from './util/helpers';3233describe('Integration Test setVariableMetadataSponsoringRateLimit', () => {34 let alice: IKeyringPair;35 let userWithNoBalance: IKeyringPair;3637 before(async () => {38 await usingApi(async (api) => {39 alice = privateKey('//Alice');40 userWithNoBalance = await findUnusedAddress(api);41 });42 });4344 it('sponsored setVariableMetaData can be called twice with pause for free', async () => {45 const collectionId = await createCollectionExpectSuccess();46 await setCollectionSponsorExpectSuccess(collectionId, alice.address);47 await confirmSponsorshipExpectSuccess(collectionId);48 await setCollectionLimitsExpectSuccess(alice, collectionId, {49 sponsoredDataRateLimit: {Blocks: 0},50 });5152 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);53 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1, 2, 3]);54 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1, 2, 3]);55 });5657 it('sponsored setVariableMetaData can\'t be called twice without pause for free', async () => {58 const collectionId = await createCollectionExpectSuccess();59 await setCollectionSponsorExpectSuccess(collectionId, alice.address);60 await confirmSponsorshipExpectSuccess(collectionId);61 await setCollectionLimitsExpectSuccess(alice, collectionId, {62 sponsoredDataRateLimit: {Blocks: 10},63 });6465 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);66 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1, 2, 3]);67 await setVariableMetaDataExpectFailure(userWithNoBalance, collectionId, itemId, [1, 2, 3]);68 });6970 it('sponsored setVariableMetaData can\'t be called for free with variable metadata above collection limits', async () => {71 const collectionId = await createCollectionExpectSuccess();72 await setCollectionSponsorExpectSuccess(collectionId, alice.address);73 await confirmSponsorshipExpectSuccess(collectionId);74 await setCollectionLimitsExpectSuccess(alice, collectionId, {75 sponsoredDataRateLimit: {Blocks: 0},76 sponsoredDataSize: 1,77 });78 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);7980 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1]);81 await setVariableMetaDataExpectFailure(userWithNoBalance, collectionId, itemId, [1, 2]);82 });8384 it('Default value of rate limit does not sponsor setting variable metadata', async () => {85 const collectionId = await createCollectionExpectSuccess();86 await setCollectionSponsorExpectSuccess(collectionId, alice.address);87 await confirmSponsorshipExpectSuccess(collectionId);8889 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);90 await setVariableMetaDataExpectFailure(userWithNoBalance, collectionId, itemId, [1]);91 });9293 it('sponsoring of data is disabled by default', async () => {94 await usingApi(async api => {95 const collectionId = await createCollectionExpectSuccess();9697 const collection = (await getDetailedCollectionInfo(api, collectionId))!;98 99 expect(collection?.limits.sponsoredDataRateLimit.isNone);100 });101 });102103 it('sponsoring can be disabled explicitly', async () => {104 await usingApi(async api => {105 const collectionId = await createCollectionExpectSuccess();106107 await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsoredDataRateLimit: {Blocks: 6}});108 {109 const collection = (await getDetailedCollectionInfo(api, collectionId))!;110 expect(collection?.limits.sponsoredDataRateLimit.unwrap().asBlocks.toNumber()).to.equal(6);111 }112113 await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsoredDataRateLimit: 'SponsoringDisabled'});114 {115 const collection = (await getDetailedCollectionInfo(api, collectionId))!;116 117 expect(collection?.limits.sponsoredDataRateLimit.unwrap().isNone).to.true;118 }119 });120 });121});