1import { IKeyringPair } from '@polkadot/types/types';2import chai from 'chai';3import chaiAsPromised from 'chai-as-promised';4import privateKey from './substrate/privateKey';5import usingApi from './substrate/substrate-api';6import { deployFlipper, getFlipValue, toggleFlipValueExpectSuccess } from './util/contracthelpers';7import {8 enableContractSponsoringExpectFailure,9 enableContractSponsoringExpectSuccess,10 findUnusedAddress,11 setContractSponsoringRateLimitExpectSuccess,12} from './util/helpers';1314chai.use(chaiAsPromised);15const expect = chai.expect;1617describe('Integration Test enableContractSponsoring', () => {18 it('ensure tx fee is paid from endowment', async () => {19 await usingApi(async (api) => {20 const user = await findUnusedAddress(api);2122 const [flipper, deployer] = await deployFlipper(api);23 await enableContractSponsoringExpectSuccess(deployer, flipper.address, true);24 await setContractSponsoringRateLimitExpectSuccess(deployer, flipper.address, 1);25 await toggleFlipValueExpectSuccess(user, flipper);2627 expect(await getFlipValue(flipper, deployer)).to.be.false;28 });29 });3031 it('ensure it can be enabled twice', async () => {32 await usingApi(async (api) => {33 const [flipper, deployer] = await deployFlipper(api);3435 await enableContractSponsoringExpectSuccess(deployer, flipper.address, true);36 await enableContractSponsoringExpectSuccess(deployer, flipper.address, true);37 });38 });3940 it('ensure it can be disabled twice', async () => {41 await usingApi(async (api) => {42 const [flipper, deployer] = await deployFlipper(api);4344 await enableContractSponsoringExpectSuccess(deployer, flipper.address, true);45 await enableContractSponsoringExpectSuccess(deployer, flipper.address, false);46 await enableContractSponsoringExpectSuccess(deployer, flipper.address, false);47 });48 });4950 it('ensure it can be re-enabled', async () => {51 await usingApi(async (api) => {52 const [flipper, deployer] = await deployFlipper(api);5354 await enableContractSponsoringExpectSuccess(deployer, flipper.address, true);55 await enableContractSponsoringExpectSuccess(deployer, flipper.address, false);56 await enableContractSponsoringExpectSuccess(deployer, flipper.address, true);57 });58 });5960});6162describe('Negative Integration Test enableContractSponsoring', () => {63 let alice: IKeyringPair;6465 before(async () => {66 alice = privateKey('//Alice');67 });6869 it('fails when called for non-contract address', async () => {70 await usingApi(async (api) => {71 const user = await findUnusedAddress(api);7273 await enableContractSponsoringExpectFailure(alice, user.address, true);74 });75 });7677 it('fails when called by non-owning user', async () => {78 await usingApi(async (api) => {79 const [flipper, _] = await deployFlipper(api);8081 await enableContractSponsoringExpectFailure(alice, flipper.address, true);82 });83 });84});