From f16723a5aa89ccae9d10e96c5194a73c10e8dfd4 Mon Sep 17 00:00:00 2001 From: str-mv <51784859+str-mv@users.noreply.github.com> Date: Fri, 25 Dec 2020 13:30:33 +0000 Subject: [PATCH] Merge pull request #51 from usetech-llc/feature/NFTPAR-246_remove_sponsor_tests NFTPAR-246 remove sponsor tests --- --- a/tests/src/confirmSponsorship.test.ts +++ b/tests/src/confirmSponsorship.test.ts @@ -32,7 +32,7 @@ let bob: IKeyringPair; let charlie: IKeyringPair; -describe.only('integration test: ext. confirmSponsorship():', () => { +describe('integration test: ext. confirmSponsorship():', () => { before(async () => { await usingApi(async (api) => { @@ -299,7 +299,7 @@ }); -describe.only('(!negative test!) integration test: ext. setCollectionSponsor():', () => { +describe('(!negative test!) integration test: ext. removeCollectionSponsor():', () => { before(async () => { await usingApi(async (api) => { const keyring = new Keyring({ type: 'sr25519' }); --- /dev/null +++ b/tests/src/removeCollectionSponsor.test.ts @@ -0,0 +1,141 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import { default as usingApi, submitTransactionAsync } from "./substrate/substrate-api"; +import { + createCollectionExpectSuccess, + setCollectionSponsorExpectSuccess, + destroyCollectionExpectSuccess, + setCollectionSponsorExpectFailure, + confirmSponsorshipExpectSuccess, + confirmSponsorshipExpectFailure, + createItemExpectSuccess, + findUnusedAddress, + getGenericResult, + enableWhiteListExpectSuccess, + enablePublicMintingExpectSuccess, + addToWhiteListExpectSuccess, + removeCollectionSponsorExpectSuccess, + removeCollectionSponsorExpectFailure, +} from "./util/helpers"; +import { Keyring } from "@polkadot/api"; +import { IKeyringPair } from "@polkadot/types/types"; +import type { AccountId } from '@polkadot/types/interfaces'; +import { BigNumber } from 'bignumber.js'; + +chai.use(chaiAsPromised); +const expect = chai.expect; + +let alice: IKeyringPair; +let bob: IKeyringPair; +let charlie: IKeyringPair; + +describe('integration test: ext. removeCollectionSponsor():', () => { + + before(async () => { + await usingApi(async (api) => { + const keyring = new Keyring({ type: 'sr25519' }); + alice = keyring.addFromUri(`//Alice`); + bob = keyring.addFromUri(`//Bob`); + charlie = keyring.addFromUri(`//Charlie`); + }); + }); + + it('Remove NFT collection sponsor stops sponsorship', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await setCollectionSponsorExpectSuccess(collectionId, bob.address); + await confirmSponsorshipExpectSuccess(collectionId, '//Bob'); + await removeCollectionSponsorExpectSuccess(collectionId); + + await usingApi(async (api) => { + // Find unused address + const zeroBalance = await findUnusedAddress(api); + + // Mint token for unused address + const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', zeroBalance.address); + + // Transfer this tokens from unused address to Alice - should fail + const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString()); + const zeroToAlice = api.tx.nft.transfer(alice.address, collectionId, itemId, 0); + const badTransaction = async function () { + console.log = function () {}; + console.error = function () {}; + await submitTransactionAsync(zeroBalance, zeroToAlice); + delete console.log; + delete console.error; + }; + await expect(badTransaction()).to.be.rejectedWith("Inability to pay some fees"); + const BsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString()); + + expect(BsponsorBalance.isEqualTo(AsponsorBalance)).to.be.true; + }); + }); + + it('Remove a sponsor after it was already removed', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await setCollectionSponsorExpectSuccess(collectionId, bob.address); + await confirmSponsorshipExpectSuccess(collectionId, '//Bob'); + await removeCollectionSponsorExpectSuccess(collectionId); + await removeCollectionSponsorExpectSuccess(collectionId); + }); + + it('Remove sponsor in a collection that never had the sponsor set', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await removeCollectionSponsorExpectSuccess(collectionId); + }); + + it('Remove sponsor for a collection that had the sponsor set, but not confirmed', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await setCollectionSponsorExpectSuccess(collectionId, bob.address); + await removeCollectionSponsorExpectSuccess(collectionId); + }); + +}); + +describe('(!negative test!) integration test: ext. removeCollectionSponsor():', () => { + before(async () => { + await usingApi(async (api) => { + const keyring = new Keyring({ type: 'sr25519' }); + alice = keyring.addFromUri(`//Alice`); + bob = keyring.addFromUri(`//Bob`); + charlie = keyring.addFromUri(`//Charlie`); + }); + }); + + it('(!negative test!) Remove sponsor for a collection that never existed', async () => { + // Find the collection that never existed + const collectionId = 0; + await usingApi(async (api) => { + const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1; + }); + + await removeCollectionSponsorExpectFailure(collectionId); + }); + + it('(!negative test!) Remove sponsor in a destroyed collection', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await setCollectionSponsorExpectSuccess(collectionId, bob.address); + await destroyCollectionExpectSuccess(collectionId); + await removeCollectionSponsorExpectFailure(collectionId); + }); + + it('Set - remove - confirm: fails', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await setCollectionSponsorExpectSuccess(collectionId, bob.address); + await removeCollectionSponsorExpectSuccess(collectionId); + await confirmSponsorshipExpectFailure(collectionId, '//Bob'); + }); + + it('Set - confirm - remove - confirm: Sponsor cannot come back', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await setCollectionSponsorExpectSuccess(collectionId, bob.address); + await confirmSponsorshipExpectSuccess(collectionId, '//Bob'); + await removeCollectionSponsorExpectSuccess(collectionId); + await confirmSponsorshipExpectFailure(collectionId, '//Bob'); + }); + +}); --- a/tests/src/util/helpers.ts +++ b/tests/src/util/helpers.ts @@ -213,6 +213,39 @@ }); } +export async function removeCollectionSponsorExpectSuccess(collectionId: number) { + await usingApi(async (api) => { + + // Run the transaction + const alicePrivateKey = privateKey('//Alice'); + const tx = api.tx.nft.removeCollectionSponsor(collectionId); + const events = await submitTransactionAsync(alicePrivateKey, tx); + const result = getGenericResult(events); + + // Get the collection + const collection: any = (await api.query.nft.collection(collectionId)).toJSON(); + + // What to expect + expect(result.success).to.be.true; + expect(collection.Sponsor).to.be.equal(nullPublicKey); + expect(collection.SponsorConfirmed).to.be.false; + }); +} + +export async function removeCollectionSponsorExpectFailure(collectionId: number) { + await usingApi(async (api) => { + + // Run the transaction + const alicePrivateKey = privateKey('//Alice'); + const tx = api.tx.nft.removeCollectionSponsor(collectionId); + const events = await submitTransactionAsync(alicePrivateKey, tx); + const result = getGenericResult(events); + + // What to expect + expect(result.success).to.be.false; + }); +} + export async function setCollectionSponsorExpectFailure(collectionId: number, sponsor: string, senderSeed: string = '//Alice') { await usingApi(async (api) => { -- gitstuff