From 474b3ae27ec26cfd9d3506bcfbc5d1ec5d787c03 Mon Sep 17 00:00:00 2001 From: Greg Zaitsev Date: Wed, 23 Dec 2020 15:02:12 +0000 Subject: [PATCH] Confirm sponsorship tests in progress --- --- /dev/null +++ b/tests/src/confirmSponsorship.test.ts @@ -0,0 +1,120 @@ +// +// 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, +} from "./util/helpers"; +import { Keyring } from "@polkadot/api"; +import { IKeyringPair } from "@polkadot/types/types"; +import type { AccountId } from '@polkadot/types/interfaces'; + +chai.use(chaiAsPromised); +const expect = chai.expect; + +let alice: IKeyringPair; +let bob: IKeyringPair; +let charlie: IKeyringPair; + +describe('integration test: ext. confirmSponsorship():', () => { + + before(async () => { + await usingApi(async (api) => { + const keyring = new Keyring({ type: 'sr25519' }); + bob = keyring.addFromUri(`//Bob`); + charlie = keyring.addFromUri(`//Charlie`); + }); + }); + + it('Confirm collection sponsorship', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await setCollectionSponsorExpectSuccess(collectionId, bob.address); + await confirmSponsorshipExpectSuccess(collectionId, '//Bob'); + }); + it('Add sponsor to a collection after the same sponsor was already added and confirmed', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await setCollectionSponsorExpectSuccess(collectionId, bob.address); + await confirmSponsorshipExpectSuccess(collectionId, '//Bob'); + await setCollectionSponsorExpectSuccess(collectionId, bob.address); + }); + it('Add new sponsor to a collection after another sponsor was already added and confirmed', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await setCollectionSponsorExpectSuccess(collectionId, bob.address); + await confirmSponsorshipExpectSuccess(collectionId, '//Bob'); + await setCollectionSponsorExpectSuccess(collectionId, charlie.address); + }); + + it.skip('Transfer fees are paid by the sponsor after confirmation', async () => { + // const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + // await setCollectionSponsorExpectSuccess(collectionId, bob.address); + // await confirmSponsorshipExpectSuccess(collectionId, '//Bob'); + expect(false).to.be.true; + }); + + it.skip('CreateItem fees are paid by the sponsor after confirmation', async () => { + // const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + // await setCollectionSponsorExpectSuccess(collectionId, bob.address); + // await confirmSponsorshipExpectSuccess(collectionId, '//Bob'); + expect(false).to.be.true; + }); + +}); + +describe('(!negative test!) integration test: ext. setCollectionSponsor():', () => { + 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!) Confirm sponsorship 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 confirmSponsorshipExpectFailure(collectionId, '//Bob'); + }); + + it('(!negative test!) Confirm sponsorship using a non-sponsor address', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await setCollectionSponsorExpectSuccess(collectionId, bob.address); + + await usingApi(async (api) => { + const transfer = api.tx.balances.transfer(charlie.address, 1e15); + await submitTransactionAsync(alice, transfer); + }); + + await confirmSponsorshipExpectFailure(collectionId, '//Charlie'); + }); + + it('(!negative test!) Confirm sponsorship using owner address', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await setCollectionSponsorExpectSuccess(collectionId, bob.address); + await confirmSponsorshipExpectFailure(collectionId, '//Alice'); + }); + + it('(!negative test!) Confirm sponsorship without sponsor being set with setCollectionSponsor', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await confirmSponsorshipExpectFailure(collectionId, '//Bob'); + }); + + it('(!negative test!) Confirm sponsorship in a collection that was destroyed', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await destroyCollectionExpectSuccess(collectionId); + await confirmSponsorshipExpectFailure(collectionId, '//Bob'); + }); +}); --- a/tests/src/createMultipleItems.test.ts +++ b/tests/src/createMultipleItems.test.ts @@ -11,7 +11,7 @@ const idCollection = 12; -describe('integration test: ext. createMultipleItems():', () => { +describe.skip('integration test: ext. createMultipleItems():', () => { it('Create two NFT tokens in active NFT collection', async () => { await usingApi(async (api) => { const AitemListIndex = await api.query.nft.itemListIndex(idCollection); --- a/tests/src/setCollectionSponsor.test.ts +++ b/tests/src/setCollectionSponsor.test.ts @@ -61,6 +61,10 @@ }); }); + it('(!negative test!) Add sponsor with a non-owner', async () => { + const collectionId = await createCollectionExpectSuccess('A', 'B', 'C', 'NFT'); + await setCollectionSponsorExpectFailure(collectionId, bob.address, '//Bob'); + }); it('(!negative test!) Add sponsor to a collection that never existed', async () => { // Find the collection that never existed const collectionId = 0; --- a/tests/src/util/helpers.ts +++ b/tests/src/util/helpers.ts @@ -134,6 +134,37 @@ return success; } +export async function destroyCollectionExpectFailure(collectionId: number, senderSeed: string = '//Alice') { + await usingApi(async (api) => { + // Run the DestroyCollection transaction + const alicePrivateKey = privateKey(senderSeed); + const tx = api.tx.nft.destroyCollection(collectionId); + const events = await submitTransactionAsync(alicePrivateKey, tx); + const result = getDestroyResult(events); + + // What to expect + expect(result).to.be.false; + }); +} + +export async function destroyCollectionExpectSuccess(collectionId: number, senderSeed: string = '//Alice') { + await usingApi(async (api) => { + // Run the DestroyCollection transaction + const alicePrivateKey = privateKey(senderSeed); + const tx = api.tx.nft.destroyCollection(collectionId); + const events = await submitTransactionAsync(alicePrivateKey, tx); + const result = getDestroyResult(events); + + // Get the collection + const collection: any = (await api.query.nft.collection(collectionId)).toJSON(); + + // What to expect + expect(result).to.be.true; + expect(collection).to.be.not.null; + expect(collection.Owner).to.be.equal(nullPublicKey); + }); +} + export async function setCollectionSponsorExpectSuccess(collectionId: number, sponsor: string) { await usingApi(async (api) => { @@ -153,47 +184,50 @@ }); } -export async function destroyCollectionExpectFailure(collectionId: number, senderSeed: string = '//Alice') { +export async function setCollectionSponsorExpectFailure(collectionId: number, sponsor: string, senderSeed: string = '//Alice') { await usingApi(async (api) => { - // Run the DestroyCollection transaction + + // Run the transaction const alicePrivateKey = privateKey(senderSeed); - const tx = api.tx.nft.destroyCollection(collectionId); + const tx = api.tx.nft.setCollectionSponsor(collectionId, sponsor); const events = await submitTransactionAsync(alicePrivateKey, tx); - const result = getDestroyResult(events); + const result = getGenericResult(events); // What to expect - expect(result).to.be.false; + expect(result.success).to.be.false; }); } -export async function destroyCollectionExpectSuccess(collectionId: number, senderSeed: string = '//Alice') { +export async function confirmSponsorshipExpectSuccess(collectionId: number, senderSeed: string = '//Alice') { await usingApi(async (api) => { - // Run the DestroyCollection transaction - const alicePrivateKey = privateKey(senderSeed); - const tx = api.tx.nft.destroyCollection(collectionId); - const events = await submitTransactionAsync(alicePrivateKey, tx); - const result = getDestroyResult(events); + // Run the transaction + const sender = privateKey(senderSeed); + const tx = api.tx.nft.confirmSponsorship(collectionId); + const events = await submitTransactionAsync(sender, tx); + const result = getGenericResult(events); + // Get the collection const collection: any = (await api.query.nft.collection(collectionId)).toJSON(); // What to expect - expect(result).to.be.true; - expect(collection).to.be.not.null; - expect(collection.Owner).to.be.equal(nullPublicKey); + expect(result.success).to.be.true; + expect(collection.Sponsor).to.be.equal(sender.address); + expect(collection.SponsorConfirmed).to.be.true; }); } -export async function setCollectionSponsorExpectFailure(collectionId: number, sponsor: string) { +export async function confirmSponsorshipExpectFailure(collectionId: number, senderSeed: string = '//Alice') { await usingApi(async (api) => { // Run the transaction - const alicePrivateKey = privateKey('//Alice'); - const tx = api.tx.nft.setCollectionSponsor(collectionId, sponsor); - const events = await submitTransactionAsync(alicePrivateKey, tx); + const sender = privateKey(senderSeed); + const tx = api.tx.nft.confirmSponsorship(collectionId); + const events = await submitTransactionAsync(sender, tx); const result = getGenericResult(events); // What to expect expect(result.success).to.be.false; }); } + -- gitstuff