1234567891011121314151617import chai from 'chai';18import chaiAsPromised from 'chai-as-promised';19import privateKey from './substrate/privateKey';20import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';21import {createCollectionExpectSuccess, destroyCollectionExpectSuccess, getAdminList, normalizeAccountId, queryCollectionExpectSuccess} from './util/helpers';2223chai.use(chaiAsPromised);24const expect = chai.expect;2526describe('Integration Test removeCollectionAdmin(collection_id, account_id):', () => {27 it('Remove collection admin.', async () => {28 await usingApi(async (api, privateKeyWrapper) => {29 const collectionId = await createCollectionExpectSuccess();30 const alice = privateKeyWrapper('//Alice');31 const bob = privateKeyWrapper('//Bob');32 const collection = await queryCollectionExpectSuccess(api, collectionId);33 expect(collection.owner.toString()).to.be.deep.eq(alice.address);34 35 const addAdminTx = api.tx.unique.addCollectionAdmin(collectionId, normalizeAccountId(bob.address));36 await submitTransactionAsync(alice, addAdminTx);3738 const adminListAfterAddAdmin = await getAdminList(api, collectionId);39 expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(bob.address));4041 42 const removeAdminTx = api.tx.unique.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address));43 await submitTransactionAsync(alice, removeAdminTx);4445 const adminListAfterRemoveAdmin = await getAdminList(api, collectionId);46 expect(adminListAfterRemoveAdmin).not.to.be.deep.contains(normalizeAccountId(bob.address));47 });48 });4950 it('Remove admin from collection that has no admins', async () => {51 await usingApi(async (api, privateKeyWrapper) => {52 const alice = privateKeyWrapper('//Alice');53 const collectionId = await createCollectionExpectSuccess();5455 const adminListBeforeAddAdmin = await getAdminList(api, collectionId);56 expect(adminListBeforeAddAdmin).to.have.lengthOf(0);5758 const tx = api.tx.unique.removeCollectionAdmin(collectionId, normalizeAccountId(alice.address));59 await submitTransactionAsync(alice, tx);60 });61 });62});6364describe('Negative Integration Test removeCollectionAdmin(collection_id, account_id):', () => {65 it('Can\'t remove collection admin from not existing collection', async () => {66 await usingApi(async (api, privateKeyWrapper) => {67 68 const collectionId = (1 << 32) - 1;69 const alice = privateKeyWrapper('//Alice');70 const bob = privateKeyWrapper('//Bob');7172 const changeOwnerTx = api.tx.unique.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address));73 await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected;7475 76 await createCollectionExpectSuccess();77 });78 });7980 it('Can\'t remove collection admin from deleted collection', async () => {81 await usingApi(async (api, privateKeyWrapper) => {82 83 const collectionId = await createCollectionExpectSuccess();84 const alice = privateKeyWrapper('//Alice');85 const bob = privateKeyWrapper('//Bob');8687 await destroyCollectionExpectSuccess(collectionId);8889 const changeOwnerTx = api.tx.unique.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address));90 await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected;9192 93 await createCollectionExpectSuccess();94 });95 });9697 it('Regular user can\'t remove collection admin', async () => {98 await usingApi(async (api) => {99 const collectionId = await createCollectionExpectSuccess();100 const alice = privateKey('//Alice');101 const bob = privateKey('//Bob');102 const charlie = privateKey('//Charlie');103104 const addAdminTx = api.tx.unique.addCollectionAdmin(collectionId, normalizeAccountId(bob.address));105 await submitTransactionAsync(alice, addAdminTx);106107 const changeOwnerTx = api.tx.unique.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address));108 await expect(submitTransactionExpectFailAsync(charlie, changeOwnerTx)).to.be.rejected;109110 111 await createCollectionExpectSuccess();112 });113 });114115 it('Admin can\'t remove collection admin.', async () => {116 await usingApi(async (api) => {117 const collectionId = await createCollectionExpectSuccess();118 const alice = privateKey('//Alice');119 const bob = privateKey('//Bob');120 const charlie = privateKey('//Charlie');121122 const adminListAfterAddAdmin = await getAdminList(api, collectionId);123 expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(bob.address));124125 const removeAdminTx = api.tx.unique.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address));126 await expect(submitTransactionAsync(charlie, removeAdminTx)).to.be.rejected;127128 const adminListAfterRemoveAdmin = await getAdminList(api, collectionId);129 expect(adminListAfterRemoveAdmin).to.be.deep.contains(normalizeAccountId(bob.address));130 expect(adminListAfterRemoveAdmin).to.be.deep.contains(normalizeAccountId(charlie.address));131 });132 });133});