123456import {IKeyringPair} from '@polkadot/types/types';7import {expect} from 'chai';8import privateKey from './substrate/privateKey';9import usingApi from './substrate/substrate-api';10import {11 confirmSponsorshipExpectSuccess,12 createCollectionExpectSuccess,13 createItemExpectSuccess,14 findUnusedAddress,15 getDetailedCollectionInfo,16 setCollectionLimitsExpectSuccess,17 setCollectionSponsorExpectSuccess,18 setVariableMetaDataExpectFailure,19 setVariableMetaDataExpectSuccess,20} from './util/helpers';2122describe('Integration Test setVariableMetadataSponsoringRateLimit', () => {23 let alice: IKeyringPair;24 let userWithNoBalance: IKeyringPair;2526 before(async () => {27 await usingApi(async (api) => {28 alice = privateKey('//Alice');29 userWithNoBalance = await findUnusedAddress(api);30 });31 });3233 it('sponsored setVariableMetaData can be called twice with pause for free', async () => {34 const collectionId = await createCollectionExpectSuccess();35 await setCollectionSponsorExpectSuccess(collectionId, alice.address);36 await confirmSponsorshipExpectSuccess(collectionId);37 await setCollectionLimitsExpectSuccess(alice, collectionId, {38 sponsoredDataRateLimit: {Blocks: 0},39 });4041 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);42 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1, 2, 3]);43 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1, 2, 3]);44 });4546 it('sponsored setVariableMetaData can\'t be called twice without pause for free', async () => {47 const collectionId = await createCollectionExpectSuccess();48 await setCollectionSponsorExpectSuccess(collectionId, alice.address);49 await confirmSponsorshipExpectSuccess(collectionId);50 await setCollectionLimitsExpectSuccess(alice, collectionId, {51 sponsoredDataRateLimit: {Blocks: 10},52 });5354 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);55 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1, 2, 3]);56 await setVariableMetaDataExpectFailure(userWithNoBalance, collectionId, itemId, [1, 2, 3]);57 });5859 it('sponsored setVariableMetaData can\'t be called for free with variable metadata above collection limits', async () => {60 const collectionId = await createCollectionExpectSuccess();61 await setCollectionSponsorExpectSuccess(collectionId, alice.address);62 await confirmSponsorshipExpectSuccess(collectionId);63 await setCollectionLimitsExpectSuccess(alice, collectionId, {64 sponsoredDataRateLimit: {Blocks: 0},65 sponsoredDataSize: 1,66 });67 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);6869 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1]);70 await setVariableMetaDataExpectFailure(userWithNoBalance, collectionId, itemId, [1, 2]);71 });7273 it('Default value of rate limit does not sponsor setting variable metadata', async () => {74 const collectionId = await createCollectionExpectSuccess();75 await setCollectionSponsorExpectSuccess(collectionId, alice.address);76 await confirmSponsorshipExpectSuccess(collectionId);7778 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);79 await setVariableMetaDataExpectFailure(userWithNoBalance, collectionId, itemId, [1]);80 });8182 it('sponsoring of data is disabled by default', async () => {83 await usingApi(async api => {84 const collectionId = await createCollectionExpectSuccess();8586 const collection = (await getDetailedCollectionInfo(api, collectionId))!;87 88 expect(collection?.limits.sponsoredDataRateLimit.isNone);89 });90 });9192 it('sponsoring can be disabled explicitly', async () => {93 await usingApi(async api => {94 const collectionId = await createCollectionExpectSuccess();9596 await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsoredDataRateLimit: {Blocks: 6}});97 {98 const collection = (await getDetailedCollectionInfo(api, collectionId))!;99 expect(collection?.limits.sponsoredDataRateLimit.unwrap().asBlocks.toNumber()).to.equal(6);100 }101102 await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsoredDataRateLimit: 'SponsoringDisabled'});103 {104 const collection = (await getDetailedCollectionInfo(api, collectionId))!;105 106 expect(collection?.limits.sponsoredDataRateLimit.unwrap().isNone).to.true;107 }108 });109 });110});