git.delta.rocks / unique-network / refs/commits / d614bc7989ed

difftreelog

Merge pull request #170 from UniqueNetwork/feature/CORE-161

kozyrevdev2021-08-13parents: #9a3373d #83994a5.patch.diff
in: master
Feature/core 161

2 files changed

modifiedtests/src/change-collection-owner.test.tsdiffbeforeafterboth
before · tests/src/change-collection-owner.test.ts
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import chai from 'chai';7import chaiAsPromised from 'chai-as-promised';8import privateKey from './substrate/privateKey';9import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';10import { createCollectionExpectSuccess, addCollectionAdminExpectSuccess } from './util/helpers';1112chai.use(chaiAsPromised);13const expect = chai.expect;1415describe('Integration Test changeCollectionOwner(collection_id, new_owner):', () => {16  it('Changing owner changes owner address', async () => {17    await usingApi(async api => {18      const collectionId = await createCollectionExpectSuccess();19      const alice = privateKey('//Alice');20      const bob = privateKey('//Bob');2122      const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();23      expect(collection.Owner).to.be.deep.eq(alice.address);2425      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);26      await submitTransactionAsync(alice, changeOwnerTx);2728      const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();29      expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(bob.address);30    });31  });32});3334describe('Negative Integration Test changeCollectionOwner(collection_id, new_owner):', () => {35  it('Not owner can\'t change owner.', async () => {36    await usingApi(async api => {37      const collectionId = await createCollectionExpectSuccess();38      const alice = privateKey('//Alice');39      const bob = privateKey('//Bob');4041      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);42      await expect(submitTransactionExpectFailAsync(bob, changeOwnerTx)).to.be.rejected;4344      const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();45      expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(alice.address);4647      // Verifying that nothing bad happened (network is live, new collections can be created, etc.)48      await createCollectionExpectSuccess();49    });50  });5152  it('Collection admin can\'t change owner.', async () => {53    await usingApi(async api => {54      const collectionId = await createCollectionExpectSuccess();55      const alice = privateKey('//Alice');56      const bob = privateKey('//Bob');5758      await addCollectionAdminExpectSuccess(alice, collectionId, bob);5960      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);61      await expect(submitTransactionExpectFailAsync(bob, changeOwnerTx)).to.be.rejected;6263      const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();64      expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(alice.address);6566      // Verifying that nothing bad happened (network is live, new collections can be created, etc.)67      await createCollectionExpectSuccess();68    });69  });7071  it('Can\'t change owner of a non-existing collection.', async () => {72    await usingApi(async api => {73      const collectionId = (1<<32) - 1;74      const alice = privateKey('//Alice');75      const bob = privateKey('//Bob');7677      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);78      await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected;7980      // Verifying that nothing bad happened (network is live, new collections can be created, etc.)81      await createCollectionExpectSuccess();82    });83  });84});
after · tests/src/change-collection-owner.test.ts
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import chai from 'chai';7import chaiAsPromised from 'chai-as-promised';8import privateKey from './substrate/privateKey';9import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';10import { createCollectionExpectSuccess, 11  addCollectionAdminExpectSuccess,12  setCollectionSponsorExpectSuccess,13  confirmSponsorshipExpectSuccess,14  removeCollectionSponsorExpectSuccess,15  enableWhiteListExpectSuccess,16  setMintPermissionExpectSuccess,17  destroyCollectionExpectSuccess,18  setCollectionSponsorExpectFailure,19  confirmSponsorshipExpectFailure,20  removeCollectionSponsorExpectFailure,21  enableWhiteListExpectFail,22  setMintPermissionExpectFailure,23  destroyCollectionExpectFailure,24  setPublicAccessModeExpectSuccess,25} from './util/helpers';2627chai.use(chaiAsPromised);28const expect = chai.expect;2930describe('Integration Test changeCollectionOwner(collection_id, new_owner):', () => {31  it('Changing owner changes owner address', async () => {32    await usingApi(async api => {33      const collectionId = await createCollectionExpectSuccess();34      const alice = privateKey('//Alice');35      const bob = privateKey('//Bob');3637      const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();38      expect(collection.Owner).to.be.deep.eq(alice.address);3940      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);41      await submitTransactionAsync(alice, changeOwnerTx);4243      const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();44      expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(bob.address);45    });46  });47});4849describe('Integration Test changeCollectionOwner(collection_id, new_owner) special checks for exOwner:', () => {50  it('Changing the owner of the collection is not allowed for the former owner', async () => {51    await usingApi(async api => {52      const collectionId = await createCollectionExpectSuccess();53      const alice = privateKey('//Alice');54      const bob = privateKey('//Bob');5556      const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();57      expect(collection.Owner).to.be.deep.eq(alice.address);5859      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);60      await submitTransactionAsync(alice, changeOwnerTx);6162      const badChangeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, alice.address);63      await expect(submitTransactionExpectFailAsync(alice, badChangeOwnerTx)).to.be.rejected;6465      const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();66      expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(bob.address);67    });68  });6970  it('New collectionOwner has access to sponsorship management operations in the collection', async () => {71    await usingApi(async api => {72      const collectionId = await createCollectionExpectSuccess();73      const alice = privateKey('//Alice');74      const bob = privateKey('//Bob');75      const charlie = privateKey('//Charlie');7677      const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();78      expect(collection.Owner).to.be.deep.eq(alice.address);7980      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);81      await submitTransactionAsync(alice, changeOwnerTx);8283      const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();84      expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(bob.address);8586      // After changing the owner of the collection, all privileged methods are available to the new owner87      // The new owner of the collection has access to sponsorship management operations in the collection88      await setCollectionSponsorExpectSuccess(collectionId, charlie.address, '//Bob');89      await confirmSponsorshipExpectSuccess(collectionId, '//Charlie');90      await removeCollectionSponsorExpectSuccess(collectionId, '//Bob');9192      // The new owner of the collection has access to operations for managing the collection parameters93      const collectionLimits = {94        AccountTokenOwnershipLimit: 1,95        SponsoredMintSize: 1,96        TokenLimit: 1,97        SponsorTimeout: 1,98        OwnerCanTransfer: true,99        OwnerCanDestroy: true,100      };101      const tx1 = api.tx.nft.setCollectionLimits(102        collectionId,103        collectionLimits,104      );105      await submitTransactionAsync(bob, tx1);106107      await setPublicAccessModeExpectSuccess(bob, collectionId, 'WhiteList');108      await enableWhiteListExpectSuccess(bob, collectionId);109      await setMintPermissionExpectSuccess(bob, collectionId, true);110      await destroyCollectionExpectSuccess(collectionId, '//Bob');111    });112  });113114  it('New collectionOwner has access to changeCollectionOwner', async () => {115    await usingApi(async api => {116      const collectionId = await createCollectionExpectSuccess();117      const alice = privateKey('//Alice');118      const bob = privateKey('//Bob');119      const charlie = privateKey('//Charlie');120  121      const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();122      expect(collection.Owner).to.be.deep.eq(alice.address);123  124      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);125      await submitTransactionAsync(alice, changeOwnerTx);126  127      const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();128      expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(bob.address);129130      const changeOwnerTx2 = api.tx.nft.changeCollectionOwner(collectionId, charlie.address);131      await submitTransactionAsync(bob, changeOwnerTx2);132  133      // ownership lost134      const collectionAfterOwnerChange2: any = (await api.query.nft.collectionById(collectionId)).toJSON();135      expect(collectionAfterOwnerChange2.Owner).to.be.deep.eq(charlie.address);136    });137  });138});139140describe('Negative Integration Test changeCollectionOwner(collection_id, new_owner):', () => {141  it('Not owner can\'t change owner.', async () => {142    await usingApi(async api => {143      const collectionId = await createCollectionExpectSuccess();144      const alice = privateKey('//Alice');145      const bob = privateKey('//Bob');146147      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);148      await expect(submitTransactionExpectFailAsync(bob, changeOwnerTx)).to.be.rejected;149150      const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();151      expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(alice.address);152153      // Verifying that nothing bad happened (network is live, new collections can be created, etc.)154      await createCollectionExpectSuccess();155    });156  });157158  it('Collection admin can\'t change owner.', async () => {159    await usingApi(async api => {160      const collectionId = await createCollectionExpectSuccess();161      const alice = privateKey('//Alice');162      const bob = privateKey('//Bob');163164      await addCollectionAdminExpectSuccess(alice, collectionId, bob);165166      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);167      await expect(submitTransactionExpectFailAsync(bob, changeOwnerTx)).to.be.rejected;168169      const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();170      expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(alice.address);171172      // Verifying that nothing bad happened (network is live, new collections can be created, etc.)173      await createCollectionExpectSuccess();174    });175  });176177  it('Can\'t change owner of a non-existing collection.', async () => {178    await usingApi(async api => {179      const collectionId = (1<<32) - 1;180      const alice = privateKey('//Alice');181      const bob = privateKey('//Bob');182183      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);184      await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected;185186      // Verifying that nothing bad happened (network is live, new collections can be created, etc.)187      await createCollectionExpectSuccess();188    });189  });190191  it('Former collectionOwner not allowed to sponsorship management operations in the collection', async () => {192    await usingApi(async api => {193      const collectionId = await createCollectionExpectSuccess();194      const alice = privateKey('//Alice');195      const bob = privateKey('//Bob');196      const charlie = privateKey('//Charlie');197198      const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();199      expect(collection.Owner).to.be.deep.eq(alice.address);200201      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);202      await submitTransactionAsync(alice, changeOwnerTx);203204      const badChangeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, alice.address);205      await expect(submitTransactionExpectFailAsync(alice, badChangeOwnerTx)).to.be.rejected;206207      const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();208      expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(bob.address);209210      await setCollectionSponsorExpectFailure(collectionId, charlie.address, '//Alice');211      await confirmSponsorshipExpectFailure(collectionId, '//Alice');212      await removeCollectionSponsorExpectFailure(collectionId, '//Alice');213214      const collectionLimits = {215        AccountTokenOwnershipLimit: 1,216        SponsoredMintSize: 1,217        TokenLimit: 1,218        SponsorTimeout: 1,219        OwnerCanTransfer: true,220        OwnerCanDestroy: true,221      };222      const tx1 = api.tx.nft.setCollectionLimits(223        collectionId,224        collectionLimits,225      );226      await expect(submitTransactionExpectFailAsync(alice, tx1)).to.be.rejected;227228      await enableWhiteListExpectFail(alice, collectionId);229      await setMintPermissionExpectFailure(alice, collectionId, true);230      await destroyCollectionExpectFailure(collectionId, '//Alice');231    });232  });233});
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -431,13 +431,13 @@
   });
 }
 
-export async function setCollectionSponsorExpectSuccess(collectionId: number, sponsor: string) {
+export async function setCollectionSponsorExpectSuccess(collectionId: number, sponsor: string, sender = '//Alice') {
   await usingApi(async (api) => {
 
     // Run the transaction
-    const alicePrivateKey = privateKey('//Alice');
+    const senderPrivateKey = privateKey(sender);
     const tx = api.tx.nft.setCollectionSponsor(collectionId, sponsor);
-    const events = await submitTransactionAsync(alicePrivateKey, tx);
+    const events = await submitTransactionAsync(senderPrivateKey, tx);
     const result = getGenericResult(events);
 
     // Get the collection
@@ -451,11 +451,11 @@
   });
 }
 
-export async function removeCollectionSponsorExpectSuccess(collectionId: number) {
+export async function removeCollectionSponsorExpectSuccess(collectionId: number, sender = '//Alice') {
   await usingApi(async (api) => {
 
     // Run the transaction
-    const alicePrivateKey = privateKey('//Alice');
+    const alicePrivateKey = privateKey(sender);
     const tx = api.tx.nft.removeCollectionSponsor(collectionId);
     const events = await submitTransactionAsync(alicePrivateKey, tx);
     const result = getGenericResult(events);
@@ -1006,10 +1006,31 @@
   });
 }
 
+export async function setPublicAccessModeExpectFail(
+  sender: IKeyringPair, collectionId: number,
+  accessMode: 'Normal' | 'WhiteList',
+) {
+  await usingApi(async (api) => {
+
+    // Run the transaction
+    const tx = api.tx.nft.setPublicAccessMode(collectionId, accessMode);
+    const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;
+    const result = getGenericResult(events);
+
+    // What to expect
+    // tslint:disable-next-line:no-unused-expression
+    expect(result.success).to.be.false;
+  });
+}
+
 export async function enableWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number) {
   await setPublicAccessModeExpectSuccess(sender, collectionId, 'WhiteList');
 }
 
+export async function enableWhiteListExpectFail(sender: IKeyringPair, collectionId: number) {
+  await setPublicAccessModeExpectFail(sender, collectionId, 'WhiteList');
+}
+
 export async function disableWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number) {
   await setPublicAccessModeExpectSuccess(sender, collectionId, 'Normal');
 }