Browse Source

linter errors fixed

Gleb Urvanov 4 years ago
parent
commit
1096fc55d2
64 changed files with 2700 additions and 2747 deletions
  1. 33 33
      tests/network-tests/src/constantinople/tests/electingCouncilTest.ts
  2. 4 4
      tests/network-tests/src/constantinople/tests/impl/closeApi.ts
  3. 50 57
      tests/network-tests/src/constantinople/tests/impl/electingCouncil.ts
  4. 35 35
      tests/network-tests/src/constantinople/tests/impl/membershipCreation.ts
  5. 24 24
      tests/network-tests/src/constantinople/tests/membershipCreationTest.ts
  6. 34 34
      tests/network-tests/src/constantinople/tests/proposals/evictStorageProviderTest.ts
  7. 28 34
      tests/network-tests/src/constantinople/tests/proposals/impl/evictStoraveProvider.ts
  8. 44 44
      tests/network-tests/src/constantinople/tests/proposals/impl/storageRoleParametersProposal.ts
  9. 23 23
      tests/network-tests/src/constantinople/tests/proposals/impl/updateRuntime.ts
  10. 34 34
      tests/network-tests/src/constantinople/tests/proposals/storageRoleParametersProposalTest.ts
  11. 35 35
      tests/network-tests/src/constantinople/tests/proposals/updateRuntimeTest.ts
  12. 151 151
      tests/network-tests/src/constantinople/utils/apiWrapper.ts
  13. 2 2
      tests/network-tests/src/constantinople/utils/config.ts
  14. 31 31
      tests/network-tests/src/constantinople/utils/sender.ts
  15. 4 4
      tests/network-tests/src/constantinople/utils/setTestTimeout.ts
  16. 23 23
      tests/network-tests/src/constantinople/utils/utils.ts
  17. 22 22
      tests/network-tests/src/nicaea/dto/fillOpeningParameters.ts
  18. 64 64
      tests/network-tests/src/nicaea/dto/workingGroupOpening.ts
  19. 32 32
      tests/network-tests/src/nicaea/tests/electingCouncilTest.ts
  20. 4 4
      tests/network-tests/src/nicaea/tests/impl/closeApi.ts
  21. 52 57
      tests/network-tests/src/nicaea/tests/impl/electingCouncil.ts
  22. 38 38
      tests/network-tests/src/nicaea/tests/impl/membershipCreation.ts
  23. 24 24
      tests/network-tests/src/nicaea/tests/membershipCreationTest.ts
  24. 35 35
      tests/network-tests/src/nicaea/tests/proposals/contentWorkingGroupMintCapacityProposalTest.ts
  25. 34 34
      tests/network-tests/src/nicaea/tests/proposals/electionParametersProposalTest.ts
  26. 55 55
      tests/network-tests/src/nicaea/tests/proposals/impl/electionParametersProposal.ts
  27. 122 122
      tests/network-tests/src/nicaea/tests/proposals/impl/proposalsModule.ts
  28. 25 25
      tests/network-tests/src/nicaea/tests/proposals/impl/setLeadProposal.ts
  29. 26 26
      tests/network-tests/src/nicaea/tests/proposals/impl/spendingProposal.ts
  30. 23 23
      tests/network-tests/src/nicaea/tests/proposals/impl/textProposal.ts
  31. 23 23
      tests/network-tests/src/nicaea/tests/proposals/impl/updateRuntime.ts
  32. 27 27
      tests/network-tests/src/nicaea/tests/proposals/impl/validatorCountProposal.ts
  33. 26 26
      tests/network-tests/src/nicaea/tests/proposals/impl/workingGroupMintCapacityProposal.ts
  34. 85 85
      tests/network-tests/src/nicaea/tests/proposals/manageLeaderRole.ts
  35. 34 34
      tests/network-tests/src/nicaea/tests/proposals/setLeadProposalTest.ts
  36. 36 36
      tests/network-tests/src/nicaea/tests/proposals/spendingProposalTest.ts
  37. 34 34
      tests/network-tests/src/nicaea/tests/proposals/textProposalTest.ts
  38. 35 35
      tests/network-tests/src/nicaea/tests/proposals/updateRuntimeTest.ts
  39. 35 35
      tests/network-tests/src/nicaea/tests/proposals/validatorCountProposalTest.ts
  40. 42 42
      tests/network-tests/src/nicaea/tests/proposals/workingGroupMintCapacityProposalTest.ts
  41. 45 47
      tests/network-tests/src/nicaea/tests/workingGroup/atLeastValueBugTest.ts
  42. 230 230
      tests/network-tests/src/nicaea/tests/workingGroup/impl/workingGroupModule.ts
  43. 56 60
      tests/network-tests/src/nicaea/tests/workingGroup/manageWorkerAsLeadTest.ts
  44. 50 52
      tests/network-tests/src/nicaea/tests/workingGroup/manageWorkerAsWorkerTest.ts
  45. 49 51
      tests/network-tests/src/nicaea/tests/workingGroup/workerApplicationHappyCaseTest.ts
  46. 51 53
      tests/network-tests/src/nicaea/tests/workingGroup/workerApplicationRejectionCaseTest.ts
  47. 50 52
      tests/network-tests/src/nicaea/tests/workingGroup/workerPayout.ts
  48. 250 251
      tests/network-tests/src/nicaea/utils/apiWrapper.ts
  49. 2 2
      tests/network-tests/src/nicaea/utils/config.ts
  50. 31 31
      tests/network-tests/src/nicaea/utils/sender.ts
  51. 4 4
      tests/network-tests/src/nicaea/utils/setTestTimeout.ts
  52. 23 23
      tests/network-tests/src/nicaea/utils/utils.ts
  53. 23 23
      tests/network-tests/src/rome/tests/electingCouncilTest.ts
  54. 57 64
      tests/network-tests/src/rome/tests/impl/electingCouncil.ts
  55. 43 43
      tests/network-tests/src/rome/tests/impl/membershipCreation.ts
  56. 29 29
      tests/network-tests/src/rome/tests/impl/romeRuntimeUpgrade.ts
  57. 13 13
      tests/network-tests/src/rome/tests/impl/setTimeout.ts
  58. 15 15
      tests/network-tests/src/rome/tests/membershipCreationTest.ts
  59. 27 27
      tests/network-tests/src/rome/tests/romeRuntimeUpgradeTest.ts
  60. 105 105
      tests/network-tests/src/rome/utils/apiWrapper.ts
  61. 2 2
      tests/network-tests/src/rome/utils/config.ts
  62. 31 31
      tests/network-tests/src/rome/utils/sender.ts
  63. 23 23
      tests/network-tests/src/rome/utils/utils.ts
  64. 3 10
      yarn.lock

+ 33 - 33
tests/network-tests/src/constantinople/tests/electingCouncilTest.ts

@@ -1,39 +1,39 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from './impl/membershipCreation';
-import { councilTest } from './impl/electingCouncil';
-import { initConfig } from '../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import { setTestTimeout } from '../utils/setTestTimeout';
-import BN from 'bn.js';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@constantinople/types';
-import { ApiWrapper } from '../utils/apiWrapper';
-import { closeApi } from './impl/closeApi';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from './impl/membershipCreation'
+import { councilTest } from './impl/electingCouncil'
+import { initConfig } from '../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import { setTestTimeout } from '../utils/setTestTimeout'
+import BN from 'bn.js'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@constantinople/types'
+import { ApiWrapper } from '../utils/apiWrapper'
+import { closeApi } from './impl/closeApi'
 
 tap.mocha.describe('Electing council scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const durationInBlocks: number = 25;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const durationInBlocks = 25
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
+  closeApi(apiWrapper)
+})

+ 4 - 4
tests/network-tests/src/constantinople/tests/impl/closeApi.ts

@@ -1,8 +1,8 @@
-import { ApiWrapper } from '../../utils/apiWrapper';
-import tap from 'tap';
+import { ApiWrapper } from '../../utils/apiWrapper'
+import tap from 'tap'
 
 export function closeApi(apiWrapper: ApiWrapper) {
   tap.teardown(() => {
-    apiWrapper.close();
-  });
+    apiWrapper.close()
+  })
 }

+ 50 - 57
tests/network-tests/src/constantinople/tests/impl/electingCouncil.ts

@@ -1,12 +1,12 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper } from '../../utils/apiWrapper';
-import { Keyring } from '@polkadot/api';
-import BN from 'bn.js';
-import { Seat } from '@constantinople/types';
-import { assert } from 'chai';
-import { v4 as uuid } from 'uuid';
-import { Utils } from '../../utils/utils';
-import tap from 'tap';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper } from '../../utils/apiWrapper'
+import { Keyring } from '@polkadot/api'
+import BN from 'bn.js'
+import { Seat } from '@constantinople/types'
+import { assert } from 'chai'
+import { v4 as uuid } from 'uuid'
+import { Utils } from '../../utils/utils'
+import tap from 'tap'
 
 export function councilTest(
   apiWrapper: ApiWrapper,
@@ -18,90 +18,83 @@ export function councilTest(
   greaterStake: BN,
   lesserStake: BN
 ) {
-  let sudo: KeyringPair;
+  let sudo: KeyringPair
 
   tap.test('Electing a council test', async () => {
     // Setup goes here because M keypairs are generated after before() function
-    sudo = keyring.addFromUri(sudoUri);
-    let now = await apiWrapper.getBestBlock();
-    const applyForCouncilFee: BN = apiWrapper.estimateApplyForCouncilFee(greaterStake);
-    const voteForCouncilFee: BN = apiWrapper.estimateVoteForCouncilFee(sudo.address, sudo.address, greaterStake);
-    const salt: string[] = new Array();
+    sudo = keyring.addFromUri(sudoUri)
+    let now = await apiWrapper.getBestBlock()
+    const applyForCouncilFee: BN = apiWrapper.estimateApplyForCouncilFee(greaterStake)
+    const voteForCouncilFee: BN = apiWrapper.estimateVoteForCouncilFee(sudo.address, sudo.address, greaterStake)
+    const salt: string[] = []
     m1KeyPairs.forEach(() => {
-      salt.push(''.concat(uuid().replace(/-/g, '')));
-    });
-    const revealVoteFee: BN = apiWrapper.estimateRevealVoteFee(sudo.address, salt[0]);
+      salt.push(''.concat(uuid().replace(/-/g, '')))
+    })
+    const revealVoteFee: BN = apiWrapper.estimateRevealVoteFee(sudo.address, salt[0])
 
     // Topping the balances
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, applyForCouncilFee.add(greaterStake));
-    await apiWrapper.transferBalanceToAccounts(
-      sudo,
-      m1KeyPairs,
-      voteForCouncilFee.add(revealVoteFee).add(greaterStake)
-    );
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, applyForCouncilFee.add(greaterStake))
+    await apiWrapper.transferBalanceToAccounts(sudo, m1KeyPairs, voteForCouncilFee.add(revealVoteFee).add(greaterStake))
 
     // First K members stake more
-    await apiWrapper.sudoStartAnnouncingPerion(sudo, now.addn(100));
-    await apiWrapper.batchApplyForCouncilElection(m2KeyPairs.slice(0, K), greaterStake);
-    m2KeyPairs.slice(0, K).forEach(keyPair =>
-      apiWrapper.getCouncilElectionStake(keyPair.address).then(stake => {
+    await apiWrapper.sudoStartAnnouncingPerion(sudo, now.addn(100))
+    await apiWrapper.batchApplyForCouncilElection(m2KeyPairs.slice(0, K), greaterStake)
+    m2KeyPairs.slice(0, K).forEach((keyPair) =>
+      apiWrapper.getCouncilElectionStake(keyPair.address).then((stake) => {
         assert(
           stake.eq(greaterStake),
           `${keyPair.address} not applied correctrly for council election with stake ${stake} versus expected ${greaterStake}`
-        );
+        )
       })
-    );
+    )
 
     // Last members stake less
-    await apiWrapper.batchApplyForCouncilElection(m2KeyPairs.slice(K), lesserStake);
-    m2KeyPairs.slice(K).forEach(keyPair =>
-      apiWrapper.getCouncilElectionStake(keyPair.address).then(stake => {
+    await apiWrapper.batchApplyForCouncilElection(m2KeyPairs.slice(K), lesserStake)
+    m2KeyPairs.slice(K).forEach((keyPair) =>
+      apiWrapper.getCouncilElectionStake(keyPair.address).then((stake) => {
         assert(
           stake.eq(lesserStake),
           `${keyPair.address} not applied correctrly for council election with stake ${stake} versus expected ${lesserStake}`
-        );
+        )
       })
-    );
+    )
 
     // Voting
-    await apiWrapper.sudoStartVotingPerion(sudo, now.addn(100));
+    await apiWrapper.sudoStartVotingPerion(sudo, now.addn(100))
     await apiWrapper.batchVoteForCouncilMember(
       m1KeyPairs.slice(0, K),
       m2KeyPairs.slice(0, K),
       salt.slice(0, K),
       lesserStake
-    );
-    await apiWrapper.batchVoteForCouncilMember(m1KeyPairs.slice(K), m2KeyPairs.slice(K), salt.slice(K), greaterStake);
+    )
+    await apiWrapper.batchVoteForCouncilMember(m1KeyPairs.slice(K), m2KeyPairs.slice(K), salt.slice(K), greaterStake)
 
     // Revealing
-    await apiWrapper.sudoStartRevealingPerion(sudo, now.addn(100));
-    await apiWrapper.batchRevealVote(m1KeyPairs.slice(0, K), m2KeyPairs.slice(0, K), salt.slice(0, K));
-    await apiWrapper.batchRevealVote(m1KeyPairs.slice(K), m2KeyPairs.slice(K), salt.slice(K));
-    now = await apiWrapper.getBestBlock();
+    await apiWrapper.sudoStartRevealingPerion(sudo, now.addn(100))
+    await apiWrapper.batchRevealVote(m1KeyPairs.slice(0, K), m2KeyPairs.slice(0, K), salt.slice(0, K))
+    await apiWrapper.batchRevealVote(m1KeyPairs.slice(K), m2KeyPairs.slice(K), salt.slice(K))
+    now = await apiWrapper.getBestBlock()
 
     // Resolving election
     // 3 is to ensure the revealing block is in future
-    await apiWrapper.sudoStartRevealingPerion(sudo, now.addn(3));
-    await Utils.wait(apiWrapper.getBlockDuration().muln(2.5).toNumber());
-    const seats: Seat[] = await apiWrapper.getCouncil();
+    await apiWrapper.sudoStartRevealingPerion(sudo, now.addn(3))
+    await Utils.wait(apiWrapper.getBlockDuration().muln(2.5).toNumber())
+    const seats: Seat[] = await apiWrapper.getCouncil()
 
     // Preparing collections to increase assertion readability
-    const m2addresses: string[] = m2KeyPairs.map(keyPair => keyPair.address);
-    const m1addresses: string[] = m1KeyPairs.map(keyPair => keyPair.address);
-    const members: string[] = seats.map(seat => seat.member.toString());
-    const bakers: string[] = seats.reduce(
-      (array, seat) => array.concat(seat.backers.map(baker => baker.member.toString())),
-      new Array()
-    );
+    const m2addresses: string[] = m2KeyPairs.map((keyPair) => keyPair.address)
+    const m1addresses: string[] = m1KeyPairs.map((keyPair) => keyPair.address)
+    const members: string[] = seats.map((seat) => seat.member.toString())
+    const bakers: string[] = seats.map((seat) => seat.backers.map((baker) => baker.member.toString())).flat()
 
     // Assertions
-    m2addresses.forEach(address => assert(members.includes(address), `Account ${address} is not in the council`));
-    m1addresses.forEach(address => assert(bakers.includes(address), `Account ${address} is not in the voters`));
-    seats.forEach(seat =>
+    m2addresses.forEach((address) => assert(members.includes(address), `Account ${address} is not in the council`))
+    m1addresses.forEach((address) => assert(bakers.includes(address), `Account ${address} is not in the voters`))
+    seats.forEach((seat) =>
       assert(
         Utils.getTotalStake(seat).eq(greaterStake.add(lesserStake)),
         `Member ${seat.member} has unexpected stake ${Utils.getTotalStake(seat)}`
       )
-    );
-  });
+    )
+  })
 }

+ 35 - 35
tests/network-tests/src/constantinople/tests/impl/membershipCreation.ts

@@ -1,10 +1,10 @@
-import { Keyring } from '@polkadot/keyring';
-import { assert } from 'chai';
-import { KeyringPair } from '@polkadot/keyring/types';
-import BN from 'bn.js';
-import { ApiWrapper } from '../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import tap from 'tap';
+import { Keyring } from '@polkadot/keyring'
+import { assert } from 'chai'
+import { KeyringPair } from '@polkadot/keyring/types'
+import BN from 'bn.js'
+import { ApiWrapper } from '../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import tap from 'tap'
 
 export function membershipTest(
   apiWrapper: ApiWrapper,
@@ -14,65 +14,65 @@ export function membershipTest(
   paidTerms: number,
   sudoUri: string
 ) {
-  let sudo: KeyringPair;
-  let aKeyPair: KeyringPair;
-  let membershipFee: BN;
-  let membershipTransactionFee: BN;
+  let sudo: KeyringPair
+  let aKeyPair: KeyringPair
+  let membershipFee: BN
+  let membershipTransactionFee: BN
 
   tap.test('Membership creation test setup', async () => {
-    sudo = keyring.addFromUri(sudoUri);
+    sudo = keyring.addFromUri(sudoUri)
     for (let i = 0; i < N; i++) {
-      nKeyPairs.push(keyring.addFromUri(i + uuid().substring(0, 8)));
+      nKeyPairs.push(keyring.addFromUri(i + uuid().substring(0, 8)))
     }
-    aKeyPair = keyring.addFromUri(uuid().substring(0, 8));
-    membershipFee = await apiWrapper.getMembershipFee(paidTerms);
+    aKeyPair = keyring.addFromUri(uuid().substring(0, 8))
+    membershipFee = await apiWrapper.getMembershipFee(paidTerms)
     membershipTransactionFee = apiWrapper.estimateBuyMembershipFee(
       sudo,
       paidTerms,
       'member_name_which_is_longer_than_expected'
-    );
-    await apiWrapper.transferBalanceToAccounts(sudo, nKeyPairs, membershipTransactionFee.add(new BN(membershipFee)));
-    await apiWrapper.transferBalance(sudo, aKeyPair.address, membershipTransactionFee);
-  });
+    )
+    await apiWrapper.transferBalanceToAccounts(sudo, nKeyPairs, membershipTransactionFee.add(new BN(membershipFee)))
+    await apiWrapper.transferBalance(sudo, aKeyPair.address, membershipTransactionFee)
+  })
 
   tap.test('Buy membeship is accepted with sufficient funds', async () => {
     await Promise.all(
       nKeyPairs.map(async (keyPair, index) => {
-        await apiWrapper.buyMembership(keyPair, paidTerms, `new_member_${index}${keyPair.address.substring(0, 8)}`);
+        await apiWrapper.buyMembership(keyPair, paidTerms, `new_member_${index}${keyPair.address.substring(0, 8)}`)
       })
-    );
+    )
     nKeyPairs.forEach((keyPair, index) =>
       apiWrapper
         .getMemberIds(keyPair.address)
-        .then(membership => assert(membership.length > 0, `Account ${keyPair.address} is not a member`))
-    );
-  });
+        .then((membership) => assert(membership.length > 0, `Account ${keyPair.address} is not a member`))
+    )
+  })
 
   tap.test('Account A can not buy the membership with insufficient funds', async () => {
     await apiWrapper
       .getBalance(aKeyPair.address)
-      .then(balance =>
+      .then((balance) =>
         assert(
           balance.toBn() < membershipFee.add(membershipTransactionFee),
           'Account A already have sufficient balance to purchase membership'
         )
-      );
-    await apiWrapper.buyMembership(aKeyPair, paidTerms, `late_member_${aKeyPair.address.substring(0, 8)}`, true);
+      )
+    await apiWrapper.buyMembership(aKeyPair, paidTerms, `late_member_${aKeyPair.address.substring(0, 8)}`, true)
     apiWrapper
       .getMemberIds(aKeyPair.address)
-      .then(membership => assert(membership.length === 0, 'Account A is a member'));
-  });
+      .then((membership) => assert(membership.length === 0, 'Account A is a member'))
+  })
 
   tap.test('Account A was able to buy the membership with sufficient funds', async () => {
-    await apiWrapper.transferBalance(sudo, aKeyPair.address, membershipFee.add(membershipTransactionFee));
+    await apiWrapper.transferBalance(sudo, aKeyPair.address, membershipFee.add(membershipTransactionFee))
     apiWrapper
       .getBalance(aKeyPair.address)
-      .then(balance =>
+      .then((balance) =>
         assert(balance.toBn() >= membershipFee, 'The account balance is insufficient to purchase membership')
-      );
-    await apiWrapper.buyMembership(aKeyPair, paidTerms, `late_member_${aKeyPair.address.substring(0, 8)}`);
+      )
+    await apiWrapper.buyMembership(aKeyPair, paidTerms, `late_member_${aKeyPair.address.substring(0, 8)}`)
     apiWrapper
       .getMemberIds(aKeyPair.address)
-      .then(membership => assert(membership.length > 0, 'Account A is a not member'));
-  });
+      .then((membership) => assert(membership.length > 0, 'Account A is a not member'))
+  })
 }

+ 24 - 24
tests/network-tests/src/constantinople/tests/membershipCreationTest.ts

@@ -1,29 +1,29 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from './impl/membershipCreation';
-import { Keyring, WsProvider } from '@polkadot/api';
-import { initConfig } from '../utils/config';
-import { setTestTimeout } from '../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@constantinople/types';
-import { ApiWrapper } from '../utils/apiWrapper';
-import { closeApi } from './impl/closeApi';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from './impl/membershipCreation'
+import { Keyring, WsProvider } from '@polkadot/api'
+import { initConfig } from '../utils/config'
+import { setTestTimeout } from '../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@constantinople/types'
+import { ApiWrapper } from '../utils/apiWrapper'
+import { closeApi } from './impl/closeApi'
 
 tap.mocha.describe('Membership creation scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const nKeyPairs: KeyringPair[] = new Array();
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const durationInBlocks: number = 7;
+  const nKeyPairs: KeyringPair[] = []
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const durationInBlocks = 7
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri)
+  closeApi(apiWrapper)
+})

+ 34 - 34
tests/network-tests/src/constantinople/tests/proposals/evictStorageProviderTest.ts

@@ -1,40 +1,40 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from '../impl/membershipCreation';
-import { councilTest } from '../impl/electingCouncil';
-import { evictStorageProviderTest } from './impl/evictStoraveProvider';
-import { initConfig } from '../../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@constantinople/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper } from '../../utils/apiWrapper';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from '../impl/membershipCreation'
+import { councilTest } from '../impl/electingCouncil'
+import { evictStorageProviderTest } from './impl/evictStoraveProvider'
+import { initConfig } from '../../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@constantinople/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper } from '../../utils/apiWrapper'
 
 tap.mocha.describe('Evict Storage provider scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const durationInBlocks: number = 32;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const durationInBlocks = 32
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
-  evictStorageProviderTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
+  evictStorageProviderTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri)
+  closeApi(apiWrapper)
+})

+ 28 - 34
tests/network-tests/src/constantinople/tests/proposals/impl/evictStoraveProvider.ts

@@ -1,11 +1,11 @@
-import { Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper } from '../../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import BN from 'bn.js';
-import { assert } from 'chai';
-import { Utils } from '../../../utils/utils';
-import tap from 'tap';
+import { Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper } from '../../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import BN from 'bn.js'
+import { assert } from 'chai'
+import { Utils } from '../../../utils/utils'
+import tap from 'tap'
 
 export function evictStorageProviderTest(
   apiWrapper: ApiWrapper,
@@ -14,49 +14,43 @@ export function evictStorageProviderTest(
   keyring: Keyring,
   sudoUri: string
 ) {
-  let sudo: KeyringPair;
+  let sudo: KeyringPair
 
   tap.test('Evict storage provider proposal test', async () => {
     // Setup
-    sudo = keyring.addFromUri(sudoUri);
-    const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-    const description: string = 'Testing validator count proposal ' + uuid().substring(0, 8);
-    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee();
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee);
+    sudo = keyring.addFromUri(sudoUri)
+    const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+    const description: string = 'Testing validator count proposal ' + uuid().substring(0, 8)
+    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee()
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee)
     if (!(await apiWrapper.isStorageProvider(sudo.address))) {
-      await apiWrapper.createStorageProvider(sudo);
+      await apiWrapper.createStorageProvider(sudo)
     }
-    assert(await apiWrapper.isStorageProvider(sudo.address), `Account ${sudo.address} is not storage provider`);
+    assert(await apiWrapper.isStorageProvider(sudo.address), `Account ${sudo.address} is not storage provider`)
 
     // Proposal stake calculation
-    const proposalStake: BN = new BN(25000);
+    const proposalStake: BN = new BN(25000)
     const proposalFee: BN = apiWrapper.estimateProposeEvictStorageProviderFee(
       description,
       description,
       proposalStake,
       sudo.address
-    );
-    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake));
+    )
+    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake))
 
     // Proposal creation
-    const proposalPromise = apiWrapper.expectProposalCreated();
-    await apiWrapper.proposeEvictStorageProvider(
-      m1KeyPairs[0],
-      proposalTitle,
-      description,
-      proposalStake,
-      sudo.address
-    );
-    const proposalNumber = await proposalPromise;
+    const proposalPromise = apiWrapper.expectProposalCreated()
+    await apiWrapper.proposeEvictStorageProvider(m1KeyPairs[0], proposalTitle, description, proposalStake, sudo.address)
+    const proposalNumber = await proposalPromise
 
     // Approving the proposal
-    const proposalExecutionPromise = apiWrapper.expectProposalFinalized();
-    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
-    await proposalExecutionPromise;
-    await Utils.wait(apiWrapper.getBlockDuration().toNumber());
+    const proposalExecutionPromise = apiWrapper.expectProposalFinalized()
+    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber)
+    await proposalExecutionPromise
+    await Utils.wait(apiWrapper.getBlockDuration().toNumber())
     assert(
       !(await apiWrapper.isStorageProvider(sudo.address)),
       `Account ${sudo.address} is storage provider after eviction`
-    );
-  });
+    )
+  })
 }

+ 44 - 44
tests/network-tests/src/constantinople/tests/proposals/impl/storageRoleParametersProposal.ts

@@ -1,11 +1,11 @@
-import { Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper } from '../../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import BN from 'bn.js';
-import { assert } from 'chai';
-import { RoleParameters } from '@constantinople/types/lib/roles';
-import tap from 'tap';
+import { Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper } from '../../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import BN from 'bn.js'
+import { assert } from 'chai'
+import { RoleParameters } from '@constantinople/types/lib/roles'
+import tap from 'tap'
 
 export function storageRoleParametersProposalTest(
   apiWrapper: ApiWrapper,
@@ -14,19 +14,19 @@ export function storageRoleParametersProposalTest(
   keyring: Keyring,
   sudoUri: string
 ) {
-  let sudo: KeyringPair;
+  let sudo: KeyringPair
 
   tap.test('Storage role parameters proposal test', async () => {
     // Setup
-    sudo = keyring.addFromUri(sudoUri);
-    const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-    const description: string = 'Testing validator count proposal ' + uuid().substring(0, 8);
-    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee();
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee);
-    const roleParameters: RoleParameters = ((await apiWrapper.getStorageRoleParameters()) as unknown) as RoleParameters;
+    sudo = keyring.addFromUri(sudoUri)
+    const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+    const description: string = 'Testing validator count proposal ' + uuid().substring(0, 8)
+    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee()
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee)
+    const roleParameters: RoleParameters = ((await apiWrapper.getStorageRoleParameters()) as unknown) as RoleParameters
 
     // Proposal stake calculation
-    const proposalStake: BN = new BN(100000);
+    const proposalStake: BN = new BN(100000)
     const proposalFee: BN = apiWrapper.estimateProposeStorageRoleParametersFee(
       description,
       description,
@@ -41,20 +41,20 @@ export function storageRoleParametersProposalTest(
       roleParameters.min_service_period.toBn(),
       roleParameters.startup_grace_period.toBn(),
       roleParameters.entry_request_fee.toBn()
-    );
-    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake));
+    )
+    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake))
 
     // Proposal creation
-    const proposedMinStake: BN = roleParameters.min_stake.toBn().addn(1);
-    const proposedMaxActors: BN = roleParameters.max_actors.toBn().addn(1);
-    const proposedReward: BN = roleParameters.reward.toBn().addn(1);
-    const proposedRewardPeriod: BN = roleParameters.reward_period.toBn().addn(1);
-    const proposedBondingPeriod: BN = roleParameters.bonding_period.toBn().addn(1);
-    const proposedUnbondingPeriod: BN = roleParameters.unbonding_period.toBn().addn(1);
-    const proposedMinServicePeriod: BN = roleParameters.min_service_period.toBn().addn(1);
-    const proposedStartupGracePeriod: BN = roleParameters.startup_grace_period.toBn().addn(1);
-    const proposedEntryRequestFee: BN = roleParameters.entry_request_fee.toBn().addn(1);
-    const proposalPromise = apiWrapper.expectProposalCreated();
+    const proposedMinStake: BN = roleParameters.min_stake.toBn().addn(1)
+    const proposedMaxActors: BN = roleParameters.max_actors.toBn().addn(1)
+    const proposedReward: BN = roleParameters.reward.toBn().addn(1)
+    const proposedRewardPeriod: BN = roleParameters.reward_period.toBn().addn(1)
+    const proposedBondingPeriod: BN = roleParameters.bonding_period.toBn().addn(1)
+    const proposedUnbondingPeriod: BN = roleParameters.unbonding_period.toBn().addn(1)
+    const proposedMinServicePeriod: BN = roleParameters.min_service_period.toBn().addn(1)
+    const proposedStartupGracePeriod: BN = roleParameters.startup_grace_period.toBn().addn(1)
+    const proposedEntryRequestFee: BN = roleParameters.entry_request_fee.toBn().addn(1)
+    const proposalPromise = apiWrapper.expectProposalCreated()
     await apiWrapper.proposeStorageRoleParameters(
       m1KeyPairs[0],
       proposalTitle,
@@ -70,51 +70,51 @@ export function storageRoleParametersProposalTest(
       proposedMinServicePeriod,
       proposedStartupGracePeriod,
       proposedEntryRequestFee
-    );
-    const proposalNumber = await proposalPromise;
+    )
+    const proposalNumber = await proposalPromise
 
     // Approving the proposal
-    const proposalExecutionPromise = apiWrapper.expectProposalFinalized();
-    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
-    await proposalExecutionPromise;
+    const proposalExecutionPromise = apiWrapper.expectProposalFinalized()
+    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber)
+    await proposalExecutionPromise
 
     // Assertions
-    const newRoleParameters: RoleParameters = await apiWrapper.getStorageRoleParameters();
+    const newRoleParameters: RoleParameters = await apiWrapper.getStorageRoleParameters()
     assert(
       proposedMinStake.eq(newRoleParameters.min_stake.toBn()),
       `Min stake has unexpected value ${newRoleParameters.min_stake.toBn()}, expected ${proposedMinStake}`
-    );
+    )
     assert(
       proposedMaxActors.eq(newRoleParameters.max_actors.toBn()),
       `Max actors has unexpected value ${newRoleParameters.max_actors.toBn()}, expected ${proposedMaxActors}`
-    );
+    )
     assert(
       proposedReward.eq(newRoleParameters.reward.toBn()),
       `Reward has unexpected value ${newRoleParameters.reward.toBn()}, expected ${proposedReward}`
-    );
+    )
     assert(
       proposedRewardPeriod.eq(newRoleParameters.reward_period.toBn()),
       `Reward period has unexpected value ${newRoleParameters.reward_period.toBn()}, expected ${proposedRewardPeriod}`
-    );
+    )
     assert(
       proposedBondingPeriod.eq(newRoleParameters.bonding_period.toBn()),
       `Bonding period has unexpected value ${newRoleParameters.bonding_period.toBn()}, expected ${proposedBondingPeriod}`
-    );
+    )
     assert(
       proposedUnbondingPeriod.eq(newRoleParameters.unbonding_period.toBn()),
       `Unbonding period has unexpected value ${newRoleParameters.unbonding_period.toBn()}, expected ${proposedUnbondingPeriod}`
-    );
+    )
     assert(
       proposedMinServicePeriod.eq(newRoleParameters.min_service_period.toBn()),
       `Min service period has unexpected value ${newRoleParameters.min_service_period.toBn()}, expected ${proposedMinServicePeriod}`
-    );
+    )
     assert(
       proposedStartupGracePeriod.eq(newRoleParameters.startup_grace_period.toBn()),
       `Startup grace period has unexpected value ${newRoleParameters.startup_grace_period.toBn()}, expected ${proposedStartupGracePeriod}`
-    );
+    )
     assert(
       proposedEntryRequestFee.eq(newRoleParameters.entry_request_fee.toBn()),
       `Entry request fee has unexpected value ${newRoleParameters.entry_request_fee.toBn()}, expected ${proposedEntryRequestFee}`
-    );
-  });
+    )
+  })
 }

+ 23 - 23
tests/network-tests/src/constantinople/tests/proposals/impl/updateRuntime.ts

@@ -1,10 +1,10 @@
-import { Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper } from '../../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import BN from 'bn.js';
-import tap from 'tap';
-import { Utils } from '../../../utils/utils';
+import { Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper } from '../../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import BN from 'bn.js'
+import tap from 'tap'
+import { Utils } from '../../../utils/utils'
 
 export function updateRuntimeTest(
   apiWrapper: ApiWrapper,
@@ -14,40 +14,40 @@ export function updateRuntimeTest(
   sudoUri: string,
   runtimePath: string
 ) {
-  let sudo: KeyringPair;
+  let sudo: KeyringPair
 
   tap.test('\n\tUpgrading the runtime test', async () => {
     // Setup
-    sudo = keyring.addFromUri(sudoUri);
-    const runtime: string = Utils.readRuntimeFromFile(runtimePath);
-    const description: string = 'runtime upgrade proposal which is used for API network testing';
-    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee();
+    sudo = keyring.addFromUri(sudoUri)
+    const runtime: string = Utils.readRuntimeFromFile(runtimePath)
+    const description = 'runtime upgrade proposal which is used for API network testing'
+    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee()
 
     // Topping the balances
-    const proposalStake: BN = new BN(1000000);
+    const proposalStake: BN = new BN(1000000)
     const runtimeProposalFee: BN = apiWrapper.estimateProposeRuntimeUpgradeFee(
       proposalStake,
       description,
       description,
       runtime
-    );
-    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, runtimeProposalFee.add(proposalStake));
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee);
+    )
+    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, runtimeProposalFee.add(proposalStake))
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee)
 
     // Proposal creation
-    const proposalPromise = apiWrapper.expectProposalCreated();
+    const proposalPromise = apiWrapper.expectProposalCreated()
     await apiWrapper.proposeRuntime(
       m1KeyPairs[0],
       proposalStake,
       'testing runtime' + uuid().substring(0, 8),
       'runtime to test proposal functionality' + uuid().substring(0, 8),
       runtime
-    );
-    const proposalNumber = await proposalPromise;
+    )
+    const proposalNumber = await proposalPromise
 
     // Approving runtime update proposal
-    const runtimePromise = apiWrapper.expectProposalFinalized();
-    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
-    await runtimePromise;
-  });
+    const runtimePromise = apiWrapper.expectProposalFinalized()
+    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber)
+    await runtimePromise
+  })
 }

+ 34 - 34
tests/network-tests/src/constantinople/tests/proposals/storageRoleParametersProposalTest.ts

@@ -1,40 +1,40 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from '../impl/membershipCreation';
-import { councilTest } from '../impl/electingCouncil';
-import { storageRoleParametersProposalTest } from './impl/storageRoleParametersProposal';
-import { initConfig } from '../../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@constantinople/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper } from '../../utils/apiWrapper';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from '../impl/membershipCreation'
+import { councilTest } from '../impl/electingCouncil'
+import { storageRoleParametersProposalTest } from './impl/storageRoleParametersProposal'
+import { initConfig } from '../../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@constantinople/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper } from '../../utils/apiWrapper'
 
 tap.mocha.describe('Storage role parameters proposal scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const durationInBlocks: number = 29;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const durationInBlocks = 29
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
-  storageRoleParametersProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
+  storageRoleParametersProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri)
+  closeApi(apiWrapper)
+})

+ 35 - 35
tests/network-tests/src/constantinople/tests/proposals/updateRuntimeTest.ts

@@ -1,41 +1,41 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from '../impl/membershipCreation';
-import { councilTest } from '../impl/electingCouncil';
-import { updateRuntimeTest } from './impl/updateRuntime';
-import { initConfig } from '../../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@constantinople/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper } from '../../utils/apiWrapper';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from '../impl/membershipCreation'
+import { councilTest } from '../impl/electingCouncil'
+import { updateRuntimeTest } from './impl/updateRuntime'
+import { initConfig } from '../../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@constantinople/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper } from '../../utils/apiWrapper'
 
 tap.mocha.describe('Update runtime scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const durationInBlocks: number = 54;
-  const runtimePath: string = process.env.RUNTIME_WASM_PATH!;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const durationInBlocks = 54
+  const runtimePath: string = process.env.RUNTIME_WASM_PATH!
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
-  updateRuntimeTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri, runtimePath);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
+  updateRuntimeTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri, runtimePath)
+  closeApi(apiWrapper)
+})

+ 151 - 151
tests/network-tests/src/constantinople/utils/apiWrapper.ts

@@ -1,34 +1,34 @@
-import { ApiPromise, WsProvider } from '@polkadot/api';
-import { Option, Vec, Bytes, u32 } from '@polkadot/types';
-import { Codec } from '@polkadot/types/types';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { UserInfo, PaidMembershipTerms, MemberId } from '@constantinople/types/lib/members';
-import { Mint, MintId } from '@constantinople/types/lib/mint';
-import { Lead, LeadId } from '@constantinople/types/lib/content-working-group';
-import { RoleParameters } from '@constantinople/types/lib/roles';
-import { Seat } from '@constantinople/types';
-import { Balance, EventRecord, AccountId, BlockNumber, BalanceOf } from '@polkadot/types/interfaces';
-import BN from 'bn.js';
-import { SubmittableExtrinsic } from '@polkadot/api/types';
-import { Sender } from './sender';
-import { Utils } from './utils';
+import { ApiPromise, WsProvider } from '@polkadot/api'
+import { Option, Vec, Bytes, u32 } from '@polkadot/types'
+import { Codec } from '@polkadot/types/types'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { UserInfo, PaidMembershipTerms, MemberId } from '@constantinople/types/lib/members'
+import { Mint, MintId } from '@constantinople/types/lib/mint'
+import { Lead, LeadId } from '@constantinople/types/lib/content-working-group'
+import { RoleParameters } from '@constantinople/types/lib/roles'
+import { Seat } from '@constantinople/types'
+import { Balance, EventRecord, AccountId, BlockNumber, BalanceOf } from '@polkadot/types/interfaces'
+import BN from 'bn.js'
+import { SubmittableExtrinsic } from '@polkadot/api/types'
+import { Sender } from './sender'
+import { Utils } from './utils'
 
 export class ApiWrapper {
-  private readonly api: ApiPromise;
-  private readonly sender: Sender;
+  private readonly api: ApiPromise
+  private readonly sender: Sender
 
   public static async create(provider: WsProvider): Promise<ApiWrapper> {
-    const api = await ApiPromise.create({ provider });
-    return new ApiWrapper(api);
+    const api = await ApiPromise.create({ provider })
+    return new ApiWrapper(api)
   }
 
   constructor(api: ApiPromise) {
-    this.api = api;
-    this.sender = new Sender(api);
+    this.api = api
+    this.sender = new Sender(api)
   }
 
   public close() {
-    this.api.disconnect();
+    this.api.disconnect()
   }
 
   public async buyMembership(
@@ -41,75 +41,75 @@ export class ApiWrapper {
       this.api.tx.members.buyMembership(paidTermsId, new UserInfo({ handle: name, avatar_uri: '', about: '' })),
       account,
       expectFailure
-    );
+    )
   }
 
   public getMemberIds(address: string): Promise<MemberId[]> {
-    return this.api.query.members.memberIdsByControllerAccountId<Vec<MemberId>>(address);
+    return this.api.query.members.memberIdsByControllerAccountId<Vec<MemberId>>(address)
   }
 
   public getBalance(address: string): Promise<Balance> {
-    return this.api.query.balances.freeBalance<Balance>(address);
+    return this.api.query.balances.freeBalance<Balance>(address)
   }
 
   public async transferBalance(from: KeyringPair, to: string, amount: BN): Promise<void> {
-    return this.sender.signAndSend(this.api.tx.balances.transfer(to, amount), from);
+    return this.sender.signAndSend(this.api.tx.balances.transfer(to, amount), from)
   }
 
   public getPaidMembershipTerms(paidTermsId: number): Promise<Option<PaidMembershipTerms>> {
-    return this.api.query.members.paidMembershipTermsById<Option<PaidMembershipTerms>>(paidTermsId);
+    return this.api.query.members.paidMembershipTermsById<Option<PaidMembershipTerms>>(paidTermsId)
   }
 
   public getMembershipFee(paidTermsId: number): Promise<BN> {
-    return this.getPaidMembershipTerms(paidTermsId).then(terms => terms.unwrap().fee.toBn());
+    return this.getPaidMembershipTerms(paidTermsId).then((terms) => terms.unwrap().fee.toBn())
   }
 
   public async transferBalanceToAccounts(from: KeyringPair, to: KeyringPair[], amount: BN): Promise<void[]> {
     return Promise.all(
-      to.map(async keyPair => {
-        await this.transferBalance(from, keyPair.address, amount);
+      to.map(async (keyPair) => {
+        await this.transferBalance(from, keyPair.address, amount)
       })
-    );
+    )
   }
 
   private getBaseTxFee(): BN {
-    return this.api.createType('BalanceOf', this.api.consts.transactionPayment.transactionBaseFee).toBn();
+    return this.api.createType('BalanceOf', this.api.consts.transactionPayment.transactionBaseFee).toBn()
   }
 
   private estimateTxFee(tx: SubmittableExtrinsic<'promise'>): BN {
-    const baseFee: BN = this.getBaseTxFee();
-    const byteFee: BN = this.api.createType('BalanceOf', this.api.consts.transactionPayment.transactionByteFee).toBn();
-    return Utils.calcTxLength(tx).mul(byteFee).add(baseFee);
+    const baseFee: BN = this.getBaseTxFee()
+    const byteFee: BN = this.api.createType('BalanceOf', this.api.consts.transactionPayment.transactionByteFee).toBn()
+    return Utils.calcTxLength(tx).mul(byteFee).add(baseFee)
   }
 
   public estimateBuyMembershipFee(account: KeyringPair, paidTermsId: number, name: string): BN {
     return this.estimateTxFee(
       this.api.tx.members.buyMembership(paidTermsId, new UserInfo({ handle: name, avatar_uri: '', about: '' }))
-    );
+    )
   }
 
   public estimateApplyForCouncilFee(amount: BN): BN {
-    return this.estimateTxFee(this.api.tx.councilElection.apply(amount));
+    return this.estimateTxFee(this.api.tx.councilElection.apply(amount))
   }
 
   public estimateVoteForCouncilFee(nominee: string, salt: string, stake: BN): BN {
-    const hashedVote: string = Utils.hashVote(nominee, salt);
-    return this.estimateTxFee(this.api.tx.councilElection.vote(hashedVote, stake));
+    const hashedVote: string = Utils.hashVote(nominee, salt)
+    return this.estimateTxFee(this.api.tx.councilElection.vote(hashedVote, stake))
   }
 
   public estimateRevealVoteFee(nominee: string, salt: string): BN {
-    const hashedVote: string = Utils.hashVote(nominee, salt);
-    return this.estimateTxFee(this.api.tx.councilElection.reveal(hashedVote, nominee, salt));
+    const hashedVote: string = Utils.hashVote(nominee, salt)
+    return this.estimateTxFee(this.api.tx.councilElection.reveal(hashedVote, nominee, salt))
   }
 
   public estimateProposeRuntimeUpgradeFee(stake: BN, name: string, description: string, runtime: Bytes | string): BN {
     return this.estimateTxFee(
       this.api.tx.proposalsCodex.createRuntimeUpgradeProposal(stake, name, description, stake, runtime)
-    );
+    )
   }
 
   public estimateProposeTextFee(stake: BN, name: string, description: string, text: string): BN {
-    return this.estimateTxFee(this.api.tx.proposalsCodex.createTextProposal(stake, name, description, stake, text));
+    return this.estimateTxFee(this.api.tx.proposalsCodex.createTextProposal(stake, name, description, stake, text))
   }
 
   public estimateProposeSpendingFee(
@@ -121,7 +121,7 @@ export class ApiWrapper {
   ): BN {
     return this.estimateTxFee(
       this.api.tx.proposalsCodex.createSpendingProposal(stake, title, description, stake, balance, destination)
-    );
+    )
   }
 
   public estimateProposeWorkingGroupMintCapacityFee(title: string, description: string, stake: BN, balance: BN): BN {
@@ -133,25 +133,25 @@ export class ApiWrapper {
         stake,
         balance
       )
-    );
+    )
   }
 
   public estimateProposeValidatorCountFee(title: string, description: string, stake: BN): BN {
     return this.estimateTxFee(
       this.api.tx.proposalsCodex.createSetValidatorCountProposal(stake, title, description, stake, stake)
-    );
+    )
   }
 
   public estimateProposeLeadFee(title: string, description: string, stake: BN, address: string): BN {
     return this.estimateTxFee(
       this.api.tx.proposalsCodex.createSetLeadProposal(stake, title, description, stake, { stake, address })
-    );
+    )
   }
 
   public estimateProposeEvictStorageProviderFee(title: string, description: string, stake: BN, address: string): BN {
     return this.estimateTxFee(
       this.api.tx.proposalsCodex.createEvictStorageProviderProposal(stake, title, description, stake, address)
-    );
+    )
   }
 
   public estimateProposeStorageRoleParametersFee(
@@ -182,7 +182,7 @@ export class ApiWrapper {
         startupGracePeriod,
         entryRequestFee,
       ])
-    );
+    )
   }
 
   public estimateProposeElectionParametersFee(
@@ -209,36 +209,36 @@ export class ApiWrapper {
         minCouncilStake,
         minVotingStake,
       ])
-    );
+    )
   }
 
   public estimateVoteForProposalFee(): BN {
-    return this.estimateTxFee(this.api.tx.proposalsEngine.vote(0, 0, 'Approve'));
+    return this.estimateTxFee(this.api.tx.proposalsEngine.vote(0, 0, 'Approve'))
   }
 
   private applyForCouncilElection(account: KeyringPair, amount: BN): Promise<void> {
-    return this.sender.signAndSend(this.api.tx.councilElection.apply(amount), account, false);
+    return this.sender.signAndSend(this.api.tx.councilElection.apply(amount), account, false)
   }
 
   public batchApplyForCouncilElection(accounts: KeyringPair[], amount: BN): Promise<void[]> {
     return Promise.all(
-      accounts.map(async keyPair => {
-        await this.applyForCouncilElection(keyPair, amount);
+      accounts.map(async (keyPair) => {
+        await this.applyForCouncilElection(keyPair, amount)
       })
-    );
+    )
   }
 
   public async getCouncilElectionStake(address: string): Promise<BN> {
     // TODO alter then `applicantStake` type will be introduced
-    return this.api.query.councilElection.applicantStakes(address).then(stake => {
-      const parsed = JSON.parse(stake.toString());
-      return new BN(parsed.new);
-    });
+    return this.api.query.councilElection.applicantStakes(address).then((stake) => {
+      const parsed = JSON.parse(stake.toString())
+      return new BN(parsed.new)
+    })
   }
 
   private voteForCouncilMember(account: KeyringPair, nominee: string, salt: string, stake: BN): Promise<void> {
-    const hashedVote: string = Utils.hashVote(nominee, salt);
-    return this.sender.signAndSend(this.api.tx.councilElection.vote(hashedVote, stake), account, false);
+    const hashedVote: string = Utils.hashVote(nominee, salt)
+    return this.sender.signAndSend(this.api.tx.councilElection.vote(hashedVote, stake), account, false)
   }
 
   public batchVoteForCouncilMember(
@@ -249,22 +249,22 @@ export class ApiWrapper {
   ): Promise<void[]> {
     return Promise.all(
       accounts.map(async (keyPair, index) => {
-        await this.voteForCouncilMember(keyPair, nominees[index].address, salt[index], stake);
+        await this.voteForCouncilMember(keyPair, nominees[index].address, salt[index], stake)
       })
-    );
+    )
   }
 
   private revealVote(account: KeyringPair, commitment: string, nominee: string, salt: string): Promise<void> {
-    return this.sender.signAndSend(this.api.tx.councilElection.reveal(commitment, nominee, salt), account, false);
+    return this.sender.signAndSend(this.api.tx.councilElection.reveal(commitment, nominee, salt), account, false)
   }
 
   public batchRevealVote(accounts: KeyringPair[], nominees: KeyringPair[], salt: string[]): Promise<void[]> {
     return Promise.all(
       accounts.map(async (keyPair, index) => {
-        const commitment = Utils.hashVote(nominees[index].address, salt[index]);
-        await this.revealVote(keyPair, commitment, nominees[index].address, salt[index]);
+        const commitment = Utils.hashVote(nominees[index].address, salt[index])
+        await this.revealVote(keyPair, commitment, nominees[index].address, salt[index])
       })
-    );
+    )
   }
 
   // TODO consider using configurable genesis instead
@@ -273,7 +273,7 @@ export class ApiWrapper {
       this.api.tx.sudo.sudo(this.api.tx.councilElection.setStageAnnouncing(endsAtBlock)),
       sudo,
       false
-    );
+    )
   }
 
   public sudoStartVotingPerion(sudo: KeyringPair, endsAtBlock: BN): Promise<void> {
@@ -281,7 +281,7 @@ export class ApiWrapper {
       this.api.tx.sudo.sudo(this.api.tx.councilElection.setStageVoting(endsAtBlock)),
       sudo,
       false
-    );
+    )
   }
 
   public sudoStartRevealingPerion(sudo: KeyringPair, endsAtBlock: BN): Promise<void> {
@@ -289,7 +289,7 @@ export class ApiWrapper {
       this.api.tx.sudo.sudo(this.api.tx.councilElection.setStageRevealing(endsAtBlock)),
       sudo,
       false
-    );
+    )
   }
 
   public sudoSetCouncilMintCapacity(sudo: KeyringPair, capacity: BN): Promise<void> {
@@ -297,21 +297,21 @@ export class ApiWrapper {
       this.api.tx.sudo.sudo(this.api.tx.council.setCouncilMintCapacity(capacity)),
       sudo,
       false
-    );
+    )
   }
 
   public getBestBlock(): Promise<BN> {
-    return this.api.derive.chain.bestNumber();
+    return this.api.derive.chain.bestNumber()
   }
 
   public getCouncil(): Promise<Seat[]> {
-    return this.api.query.council.activeCouncil<Vec<Codec>>().then(seats => {
-      return (seats as unknown) as Seat[];
-    });
+    return this.api.query.council.activeCouncil<Vec<Codec>>().then((seats) => {
+      return (seats as unknown) as Seat[]
+    })
   }
 
   public getRuntime(): Promise<Bytes> {
-    return this.api.query.substrate.code<Bytes>();
+    return this.api.query.substrate.code<Bytes>()
   }
 
   public async proposeRuntime(
@@ -321,12 +321,12 @@ export class ApiWrapper {
     description: string,
     runtime: Bytes | string
   ): Promise<void> {
-    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn();
+    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn()
     return this.sender.signAndSend(
       this.api.tx.proposalsCodex.createRuntimeUpgradeProposal(memberId, name, description, stake, runtime),
       account,
       false
-    );
+    )
   }
 
   public async proposeText(
@@ -336,12 +336,12 @@ export class ApiWrapper {
     description: string,
     text: string
   ): Promise<void> {
-    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn();
+    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn()
     return this.sender.signAndSend(
       this.api.tx.proposalsCodex.createTextProposal(memberId, name, description, stake, text),
       account,
       false
-    );
+    )
   }
 
   public async proposeSpending(
@@ -352,12 +352,12 @@ export class ApiWrapper {
     balance: BN,
     destination: string
   ): Promise<void> {
-    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn();
+    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn()
     return this.sender.signAndSend(
       this.api.tx.proposalsCodex.createSpendingProposal(memberId, title, description, stake, balance, destination),
       account,
       false
-    );
+    )
   }
 
   public async proposeWorkingGroupMintCapacity(
@@ -367,7 +367,7 @@ export class ApiWrapper {
     stake: BN,
     balance: BN
   ): Promise<void> {
-    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn();
+    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn()
     return this.sender.signAndSend(
       this.api.tx.proposalsCodex.createSetContentWorkingGroupMintCapacityProposal(
         memberId,
@@ -378,7 +378,7 @@ export class ApiWrapper {
       ),
       account,
       false
-    );
+    )
   }
 
   public async proposeValidatorCount(
@@ -388,12 +388,12 @@ export class ApiWrapper {
     stake: BN,
     validatorCount: BN
   ): Promise<void> {
-    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn();
+    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn()
     return this.sender.signAndSend(
       this.api.tx.proposalsCodex.createSetValidatorCountProposal(memberId, title, description, stake, validatorCount),
       account,
       false
-    );
+    )
   }
 
   public async proposeLead(
@@ -403,9 +403,9 @@ export class ApiWrapper {
     stake: BN,
     leadAccount: KeyringPair
   ): Promise<void> {
-    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn();
-    const leadMemberId: BN = (await this.getMemberIds(leadAccount.address))[0].toBn();
-    const addressString: string = leadAccount.address;
+    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn()
+    const leadMemberId: BN = (await this.getMemberIds(leadAccount.address))[0].toBn()
+    const addressString: string = leadAccount.address
     return this.sender.signAndSend(
       this.api.tx.proposalsCodex.createSetLeadProposal(memberId, title, description, stake, [
         leadMemberId,
@@ -413,7 +413,7 @@ export class ApiWrapper {
       ]),
       account,
       false
-    );
+    )
   }
 
   public async proposeEvictStorageProvider(
@@ -423,7 +423,7 @@ export class ApiWrapper {
     stake: BN,
     storageProvider: string
   ): Promise<void> {
-    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn();
+    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn()
     return this.sender.signAndSend(
       this.api.tx.proposalsCodex.createEvictStorageProviderProposal(
         memberId,
@@ -434,7 +434,7 @@ export class ApiWrapper {
       ),
       account,
       false
-    );
+    )
   }
 
   public async proposeStorageRoleParameters(
@@ -453,7 +453,7 @@ export class ApiWrapper {
     startupGracePeriod: BN,
     entryRequestFee: BN
   ): Promise<void> {
-    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn();
+    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn()
     return this.sender.signAndSend(
       this.api.tx.proposalsCodex.createSetStorageRoleParametersProposal(memberId, title, description, stake, [
         minStake,
@@ -469,7 +469,7 @@ export class ApiWrapper {
       ]),
       account,
       false
-    );
+    )
   }
 
   public async proposeElectionParameters(
@@ -486,7 +486,7 @@ export class ApiWrapper {
     minCouncilStake: BN,
     minVotingStake: BN
   ): Promise<void> {
-    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn();
+    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn()
     return this.sender.signAndSend(
       this.api.tx.proposalsCodex.createSetElectionParametersProposal(memberId, title, description, stake, [
         announcingPeriod,
@@ -500,145 +500,145 @@ export class ApiWrapper {
       ]),
       account,
       false
-    );
+    )
   }
 
   public approveProposal(account: KeyringPair, memberId: BN, proposal: BN): Promise<void> {
-    return this.sender.signAndSend(this.api.tx.proposalsEngine.vote(memberId, proposal, 'Approve'), account, false);
+    return this.sender.signAndSend(this.api.tx.proposalsEngine.vote(memberId, proposal, 'Approve'), account, false)
   }
 
   public batchApproveProposal(council: KeyringPair[], proposal: BN): Promise<void[]> {
     return Promise.all(
-      council.map(async keyPair => {
-        const memberId: BN = (await this.getMemberIds(keyPair.address))[0].toBn();
-        await this.approveProposal(keyPair, memberId, proposal);
+      council.map(async (keyPair) => {
+        const memberId: BN = (await this.getMemberIds(keyPair.address))[0].toBn()
+        await this.approveProposal(keyPair, memberId, proposal)
       })
-    );
+    )
   }
 
   public getBlockDuration(): BN {
-    return this.api.createType('Moment', this.api.consts.babe.expectedBlockTime).toBn();
+    return this.api.createType('Moment', this.api.consts.babe.expectedBlockTime).toBn()
   }
 
   public expectProposalCreated(): Promise<BN> {
-    return new Promise(async resolve => {
-      await this.api.query.system.events<Vec<EventRecord>>(events => {
-        events.forEach(record => {
+    return new Promise(async (resolve) => {
+      await this.api.query.system.events<Vec<EventRecord>>((events) => {
+        events.forEach((record) => {
           if (record.event.method && record.event.method.toString() === 'ProposalCreated') {
-            resolve(new BN(record.event.data[1].toString()));
+            resolve(new BN(record.event.data[1].toString()))
           }
-        });
-      });
-    });
+        })
+      })
+    })
   }
 
   public expectRuntimeUpgraded(): Promise<void> {
-    return new Promise(async resolve => {
-      await this.api.query.system.events<Vec<EventRecord>>(events => {
-        events.forEach(record => {
+    return new Promise(async (resolve) => {
+      await this.api.query.system.events<Vec<EventRecord>>((events) => {
+        events.forEach((record) => {
           if (record.event.method.toString() === 'RuntimeUpdated') {
-            resolve();
+            resolve()
           }
-        });
-      });
-    });
+        })
+      })
+    })
   }
 
   public expectProposalFinalized(): Promise<void> {
-    return new Promise(async resolve => {
-      await this.api.query.system.events<Vec<EventRecord>>(events => {
-        events.forEach(record => {
+    return new Promise(async (resolve) => {
+      await this.api.query.system.events<Vec<EventRecord>>((events) => {
+        events.forEach((record) => {
           if (
             record.event.method &&
             record.event.method.toString() === 'ProposalStatusUpdated' &&
             record.event.data[1].toString().includes('Executed')
           ) {
-            resolve();
+            resolve()
           }
-        });
-      });
-    });
+        })
+      })
+    })
   }
 
   public getTotalIssuance(): Promise<BN> {
-    return this.api.query.balances.totalIssuance<Balance>();
+    return this.api.query.balances.totalIssuance<Balance>()
   }
 
   public async getRequiredProposalStake(numerator: number, denominator: number): Promise<BN> {
-    const issuance: number = await (await this.getTotalIssuance()).toNumber();
-    const stake = (issuance * numerator) / denominator;
-    return new BN(stake.toFixed(0));
+    const issuance: number = await (await this.getTotalIssuance()).toNumber()
+    const stake = (issuance * numerator) / denominator
+    return new BN(stake.toFixed(0))
   }
 
   public getProposalCount(): Promise<BN> {
-    return this.api.query.proposalsEngine.proposalCount<u32>();
+    return this.api.query.proposalsEngine.proposalCount<u32>()
   }
 
   public async getWorkingGroupMintCapacity(): Promise<BN> {
-    const mintId: MintId = await this.api.query.contentWorkingGroup.mint<MintId>();
-    const mintCodec = await this.api.query.minting.mints<Codec[]>(mintId);
-    const mint: Mint = (mintCodec[0] as unknown) as Mint;
-    return mint.getField<Balance>('capacity');
+    const mintId: MintId = await this.api.query.contentWorkingGroup.mint<MintId>()
+    const mintCodec = await this.api.query.minting.mints<Codec[]>(mintId)
+    const mint: Mint = (mintCodec[0] as unknown) as Mint
+    return mint.getField<Balance>('capacity')
   }
 
   public getValidatorCount(): Promise<BN> {
-    return this.api.query.staking.validatorCount<u32>();
+    return this.api.query.staking.validatorCount<u32>()
   }
 
   public async getCurrentLeadAddress(): Promise<string> {
-    const leadId: Option<LeadId> = await this.api.query.contentWorkingGroup.currentLeadId<Option<LeadId>>();
-    const leadCodec = await this.api.query.contentWorkingGroup.leadById<Codec[]>(leadId.unwrap());
-    const lead = (leadCodec[0] as unknown) as Lead;
-    return lead.role_account.toString();
+    const leadId: Option<LeadId> = await this.api.query.contentWorkingGroup.currentLeadId<Option<LeadId>>()
+    const leadCodec = await this.api.query.contentWorkingGroup.leadById<Codec[]>(leadId.unwrap())
+    const lead = (leadCodec[0] as unknown) as Lead
+    return lead.role_account.toString()
   }
 
   public async createStorageProvider(account: KeyringPair): Promise<void> {
-    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn();
-    await this.sender.signAndSend(this.api.tx.actors.roleEntryRequest('StorageProvider', memberId), account, false);
-    await this.sender.signAndSend(this.api.tx.actors.stake('StorageProvider', account.address), account, false);
-    return;
+    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn()
+    await this.sender.signAndSend(this.api.tx.actors.roleEntryRequest('StorageProvider', memberId), account, false)
+    await this.sender.signAndSend(this.api.tx.actors.stake('StorageProvider', account.address), account, false)
+    return
   }
 
   public async isStorageProvider(address: string): Promise<boolean> {
     const storageProviders: Vec<AccountId> = await this.api.query.actors.accountIdsByRole<Vec<AccountId>>(
       'StorageProvider'
-    );
-    return storageProviders.map(accountId => accountId.toString()).includes(address);
+    )
+    return storageProviders.map((accountId) => accountId.toString()).includes(address)
   }
 
   public async getStorageRoleParameters(): Promise<RoleParameters> {
-    return (await this.api.query.actors.parameters<Option<RoleParameters>>('StorageProvider')).unwrap();
+    return (await this.api.query.actors.parameters<Option<RoleParameters>>('StorageProvider')).unwrap()
   }
 
   public async getAnnouncingPeriod(): Promise<BN> {
-    return await this.api.query.councilElection.announcingPeriod<BlockNumber>();
+    return await this.api.query.councilElection.announcingPeriod<BlockNumber>()
   }
 
   public async getVotingPeriod(): Promise<BN> {
-    return await this.api.query.councilElection.votingPeriod<BlockNumber>();
+    return await this.api.query.councilElection.votingPeriod<BlockNumber>()
   }
 
   public async getRevealingPeriod(): Promise<BN> {
-    return await this.api.query.councilElection.revealingPeriod<BlockNumber>();
+    return await this.api.query.councilElection.revealingPeriod<BlockNumber>()
   }
 
   public async getCouncilSize(): Promise<BN> {
-    return await this.api.query.councilElection.councilSize<u32>();
+    return await this.api.query.councilElection.councilSize<u32>()
   }
 
   public async getCandidacyLimit(): Promise<BN> {
-    return await this.api.query.councilElection.candidacyLimit<u32>();
+    return await this.api.query.councilElection.candidacyLimit<u32>()
   }
 
   public async getNewTermDuration(): Promise<BN> {
-    return await this.api.query.councilElection.newTermDuration<BlockNumber>();
+    return await this.api.query.councilElection.newTermDuration<BlockNumber>()
   }
 
   public async getMinCouncilStake(): Promise<BN> {
-    return await this.api.query.councilElection.minCouncilStake<BalanceOf>();
+    return await this.api.query.councilElection.minCouncilStake<BalanceOf>()
   }
 
   public async getMinVotingStake(): Promise<BN> {
-    return await this.api.query.councilElection.minVotingStake<BalanceOf>();
+    return await this.api.query.councilElection.minVotingStake<BalanceOf>()
   }
 }

+ 2 - 2
tests/network-tests/src/constantinople/utils/config.ts

@@ -1,5 +1,5 @@
-import { config } from 'dotenv';
+import { config } from 'dotenv'
 
 export function initConfig() {
-  config();
+  config()
 }

+ 31 - 31
tests/network-tests/src/constantinople/utils/sender.ts

@@ -1,33 +1,33 @@
-import BN from 'bn.js';
-import { ApiPromise } from '@polkadot/api';
-import { Index } from '@polkadot/types/interfaces';
-import { SubmittableExtrinsic } from '@polkadot/api/types';
-import { KeyringPair } from '@polkadot/keyring/types';
+import BN from 'bn.js'
+import { ApiPromise } from '@polkadot/api'
+import { Index } from '@polkadot/types/interfaces'
+import { SubmittableExtrinsic } from '@polkadot/api/types'
+import { KeyringPair } from '@polkadot/keyring/types'
 
 export class Sender {
-  private readonly api: ApiPromise;
-  private static nonceMap: Map<string, BN> = new Map();
+  private readonly api: ApiPromise
+  private static nonceMap: Map<string, BN> = new Map()
 
   constructor(api: ApiPromise) {
-    this.api = api;
+    this.api = api
   }
 
   private async getNonce(address: string): Promise<BN> {
-    let oncahinNonce: BN = new BN(0);
+    let oncahinNonce: BN = new BN(0)
     if (!Sender.nonceMap.get(address)) {
-      oncahinNonce = await this.api.query.system.accountNonce<Index>(address);
+      oncahinNonce = await this.api.query.system.accountNonce<Index>(address)
     }
-    let nonce: BN | undefined = Sender.nonceMap.get(address);
+    let nonce: BN | undefined = Sender.nonceMap.get(address)
     if (!nonce) {
-      nonce = oncahinNonce;
+      nonce = oncahinNonce
     }
-    const nextNonce: BN = nonce.addn(1);
-    Sender.nonceMap.set(address, nextNonce);
-    return nonce;
+    const nextNonce: BN = nonce.addn(1)
+    Sender.nonceMap.set(address, nextNonce)
+    return nonce
   }
 
   private clearNonce(address: string): void {
-    Sender.nonceMap.delete(address);
+    Sender.nonceMap.delete(address)
   }
 
   public async signAndSend(
@@ -36,31 +36,31 @@ export class Sender {
     expectFailure = false
   ): Promise<void> {
     return new Promise(async (resolve, reject) => {
-      const nonce: BN = await this.getNonce(account.address);
-      const signedTx = tx.sign(account, { nonce });
+      const nonce: BN = await this.getNonce(account.address)
+      const signedTx = tx.sign(account, { nonce })
       await signedTx
-        .send(async result => {
+        .send(async (result) => {
           if (result.status.isFinalized === true && result.events !== undefined) {
-            result.events.forEach(event => {
+            result.events.forEach((event) => {
               if (event.event.method === 'ExtrinsicFailed') {
                 if (expectFailure) {
-                  resolve();
+                  resolve()
                 } else {
-                  reject(new Error('Extrinsic failed unexpectedly'));
+                  reject(new Error('Extrinsic failed unexpectedly'))
                 }
               }
-            });
-            resolve();
+            })
+            resolve()
           }
           if (result.status.isFuture) {
-            console.log('nonce ' + nonce + ' for account ' + account.address + ' is in future');
-            this.clearNonce(account.address);
-            reject(new Error('Extrinsic nonce is in future'));
+            console.log('nonce ' + nonce + ' for account ' + account.address + ' is in future')
+            this.clearNonce(account.address)
+            reject(new Error('Extrinsic nonce is in future'))
           }
         })
-        .catch(error => {
-          reject(error);
-        });
-    });
+        .catch((error) => {
+          reject(error)
+        })
+    })
   }
 }

+ 4 - 4
tests/network-tests/src/constantinople/utils/setTestTimeout.ts

@@ -1,7 +1,7 @@
-import tap from 'tap';
-import { ApiWrapper } from './apiWrapper';
+import tap from 'tap'
+import { ApiWrapper } from './apiWrapper'
 
 export function setTestTimeout(apiWrapper: ApiWrapper, durationInBlocks: number) {
-  const durationInMillis = apiWrapper.getBlockDuration().muln(durationInBlocks).toNumber();
-  tap.setTimeout(durationInMillis);
+  const durationInMillis = apiWrapper.getBlockDuration().muln(durationInBlocks).toNumber()
+  tap.setTimeout(durationInMillis)
 }

+ 23 - 23
tests/network-tests/src/constantinople/utils/utils.ts

@@ -1,16 +1,16 @@
-import { IExtrinsic } from '@polkadot/types/types';
-import { compactToU8a, stringToU8a } from '@polkadot/util';
-import { blake2AsHex } from '@polkadot/util-crypto';
-import BN from 'bn.js';
-import fs from 'fs';
-import { decodeAddress } from '@polkadot/keyring';
-import { Seat } from '@constantinople/types';
+import { IExtrinsic } from '@polkadot/types/types'
+import { compactToU8a, stringToU8a } from '@polkadot/util'
+import { blake2AsHex } from '@polkadot/util-crypto'
+import BN from 'bn.js'
+import fs from 'fs'
+import { decodeAddress } from '@polkadot/keyring'
+import { Seat } from '@constantinople/types'
 
 export class Utils {
-  private static LENGTH_ADDRESS = 32 + 1; // publicKey + prefix
-  private static LENGTH_ERA = 2; // assuming mortals
-  private static LENGTH_SIGNATURE = 64; // assuming ed25519 or sr25519
-  private static LENGTH_VERSION = 1; // 0x80 & version
+  private static LENGTH_ADDRESS = 32 + 1 // publicKey + prefix
+  private static LENGTH_ERA = 2 // assuming mortals
+  private static LENGTH_SIGNATURE = 64 // assuming ed25519 or sr25519
+  private static LENGTH_VERSION = 1 // 0x80 & version
 
   public static calcTxLength = (extrinsic?: IExtrinsic | null, nonce?: BN): BN => {
     return new BN(
@@ -20,31 +20,31 @@ export class Utils {
         Utils.LENGTH_ERA +
         compactToU8a(nonce || 0).length +
         (extrinsic ? extrinsic.encodedLength : 0)
-    );
-  };
+    )
+  }
 
   /** hash(accountId + salt) */
   public static hashVote(accountId: string, salt: string): string {
-    const accountU8a = decodeAddress(accountId);
-    const saltU8a = stringToU8a(salt);
-    const voteU8a = new Uint8Array(accountU8a.length + saltU8a.length);
-    voteU8a.set(accountU8a);
-    voteU8a.set(saltU8a, accountU8a.length);
+    const accountU8a = decodeAddress(accountId)
+    const saltU8a = stringToU8a(salt)
+    const voteU8a = new Uint8Array(accountU8a.length + saltU8a.length)
+    voteU8a.set(accountU8a)
+    voteU8a.set(saltU8a, accountU8a.length)
 
-    const hash = blake2AsHex(voteU8a, 256);
+    const hash = blake2AsHex(voteU8a, 256)
     // console.log('Vote hash:', hash, 'for', { accountId, salt });
-    return hash;
+    return hash
   }
 
   public static wait(ms: number): Promise<void> {
-    return new Promise(resolve => setTimeout(resolve, ms));
+    return new Promise((resolve) => setTimeout(resolve, ms))
   }
 
   public static getTotalStake(seat: Seat): BN {
-    return new BN(+seat.stake.toString() + seat.backers.reduce((a, baker) => a + +baker.stake.toString(), 0));
+    return new BN(+seat.stake.toString() + seat.backers.reduce((a, baker) => a + +baker.stake.toString(), 0))
   }
 
   public static readRuntimeFromFile(path: string): string {
-    return '0x' + fs.readFileSync(path).toString('hex');
+    return '0x' + fs.readFileSync(path).toString('hex')
   }
 }

+ 22 - 22
tests/network-tests/src/nicaea/dto/fillOpeningParameters.ts

@@ -1,63 +1,63 @@
-import BN from 'bn.js';
+import BN from 'bn.js'
 
 export class FillOpeningParameters {
-  private amountPerPayout!: BN;
-  private nextPaymentAtBlock!: BN;
-  private payoutInterval!: BN;
-  private openingId!: BN;
-  private successfulApplicationId!: BN;
-  private workingGroup!: string;
+  private amountPerPayout!: BN
+  private nextPaymentAtBlock!: BN
+  private payoutInterval!: BN
+  private openingId!: BN
+  private successfulApplicationId!: BN
+  private workingGroup!: string
 
   public getAmountPerPayout(): BN {
-    return this.amountPerPayout;
+    return this.amountPerPayout
   }
 
   public getNextPaymentAtBlock(): BN {
-    return this.nextPaymentAtBlock;
+    return this.nextPaymentAtBlock
   }
 
   public getPayoutInterval(): BN {
-    return this.payoutInterval;
+    return this.payoutInterval
   }
 
   public getOpeningId(): BN {
-    return this.openingId;
+    return this.openingId
   }
 
   public getSuccessfulApplicationId(): BN {
-    return this.successfulApplicationId;
+    return this.successfulApplicationId
   }
 
   public getWorkingGroup(): string {
-    return this.workingGroup;
+    return this.workingGroup
   }
 
   public setAmountPerPayout(value: BN) {
-    this.amountPerPayout = value;
+    this.amountPerPayout = value
   }
 
   public setNextPaymentAtBlock(value: BN) {
-    this.nextPaymentAtBlock = value;
+    this.nextPaymentAtBlock = value
   }
 
   public setPayoutInterval(value: BN) {
-    this.payoutInterval = value;
+    this.payoutInterval = value
   }
 
   public setOpeningId(value: BN) {
-    this.openingId = value;
+    this.openingId = value
   }
 
   public setSuccessfulApplicationId(value: BN) {
-    this.successfulApplicationId = value;
+    this.successfulApplicationId = value
   }
 
   public setWorkingGroup(value: string) {
-    this.workingGroup = value;
+    this.workingGroup = value
   }
 
   constructor() {
-    return;
+    return
   }
 
   public getRewardPolicy() {
@@ -65,7 +65,7 @@ export class FillOpeningParameters {
       amount_per_payout: this.amountPerPayout,
       next_payment_at_block: this.nextPaymentAtBlock,
       payout_interval: this.payoutInterval,
-    };
+    }
   }
 
   public getFillOpeningParameters() {
@@ -74,6 +74,6 @@ export class FillOpeningParameters {
       successful_application_id: this.successfulApplicationId,
       reward_policy: this.getRewardPolicy(),
       working_group: this.workingGroup,
-    };
+    }
   }
 }

+ 64 - 64
tests/network-tests/src/nicaea/dto/workingGroupOpening.ts

@@ -1,193 +1,193 @@
-import BN from 'bn.js';
+import BN from 'bn.js'
 
 export class WorkingGroupOpening {
-  private activateAtBlock: BN | undefined;
-  private maxActiveApplicants!: BN;
-  private maxReviewPeriodLength!: BN;
-  private applicationStakingPolicyAmount!: BN;
-  private applicationCrowdedOutUnstakingPeriodLength!: BN;
-  private applicationExpiredUnstakingPeriodLength!: BN;
-  private roleStakingPolicyAmount!: BN;
-  private roleCrowdedOutUnstakingPeriodLength!: BN;
-  private roleExpiredUnstakingPeriodLength!: BN;
-  private slashableMaxCount!: BN;
-  private slashableMaxPercentPtsPerTime!: BN;
-  private successfulApplicantApplicationStakeUnstakingPeriod!: BN;
-  private failedApplicantApplicationStakeUnstakingPeriod!: BN;
-  private failedApplicantRoleStakeUnstakingPeriod!: BN;
-  private terminateApplicationStakeUnstakingPeriod!: BN;
-  private terminateRoleStakeUnstakingPeriod!: BN;
-  private exitRoleApplicationStakeUnstakingPeriod!: BN;
-  private exitRoleStakeUnstakingPeriod!: BN;
-  private text!: string;
-  private openingType!: string;
+  private activateAtBlock: BN | undefined
+  private maxActiveApplicants!: BN
+  private maxReviewPeriodLength!: BN
+  private applicationStakingPolicyAmount!: BN
+  private applicationCrowdedOutUnstakingPeriodLength!: BN
+  private applicationExpiredUnstakingPeriodLength!: BN
+  private roleStakingPolicyAmount!: BN
+  private roleCrowdedOutUnstakingPeriodLength!: BN
+  private roleExpiredUnstakingPeriodLength!: BN
+  private slashableMaxCount!: BN
+  private slashableMaxPercentPtsPerTime!: BN
+  private successfulApplicantApplicationStakeUnstakingPeriod!: BN
+  private failedApplicantApplicationStakeUnstakingPeriod!: BN
+  private failedApplicantRoleStakeUnstakingPeriod!: BN
+  private terminateApplicationStakeUnstakingPeriod!: BN
+  private terminateRoleStakeUnstakingPeriod!: BN
+  private exitRoleApplicationStakeUnstakingPeriod!: BN
+  private exitRoleStakeUnstakingPeriod!: BN
+  private text!: string
+  private openingType!: string
 
   public getActivateAtBlock(): BN | undefined {
-    return this.activateAtBlock;
+    return this.activateAtBlock
   }
 
   public getMaxActiveApplicants(): BN {
-    return this.maxActiveApplicants;
+    return this.maxActiveApplicants
   }
 
   public getMaxReviewPeriodLength(): BN {
-    return this.maxReviewPeriodLength;
+    return this.maxReviewPeriodLength
   }
 
   public getApplicationStakingPolicyAmount(): BN {
-    return this.applicationStakingPolicyAmount;
+    return this.applicationStakingPolicyAmount
   }
 
   public getApplicationCrowdedOutUnstakingPeriodLength(): BN {
-    return this.applicationCrowdedOutUnstakingPeriodLength;
+    return this.applicationCrowdedOutUnstakingPeriodLength
   }
 
   public getApplicationExpiredUnstakingPeriodLength(): BN {
-    return this.applicationExpiredUnstakingPeriodLength;
+    return this.applicationExpiredUnstakingPeriodLength
   }
 
   public getRoleStakingPolicyAmount(): BN {
-    return this.roleStakingPolicyAmount;
+    return this.roleStakingPolicyAmount
   }
 
   public getRoleCrowdedOutUnstakingPeriodLength(): BN {
-    return this.roleCrowdedOutUnstakingPeriodLength;
+    return this.roleCrowdedOutUnstakingPeriodLength
   }
 
   public getRoleExpiredUnstakingPeriodLength(): BN {
-    return this.roleExpiredUnstakingPeriodLength;
+    return this.roleExpiredUnstakingPeriodLength
   }
 
   public getSlashableMaxCount(): BN {
-    return this.slashableMaxCount;
+    return this.slashableMaxCount
   }
 
   public getSlashableMaxPercentPtsPerTime(): BN {
-    return this.slashableMaxPercentPtsPerTime;
+    return this.slashableMaxPercentPtsPerTime
   }
 
   public getSuccessfulApplicantApplicationStakeUnstakingPeriod(): BN {
-    return this.successfulApplicantApplicationStakeUnstakingPeriod;
+    return this.successfulApplicantApplicationStakeUnstakingPeriod
   }
 
   public getFailedApplicantApplicationStakeUnstakingPeriod(): BN {
-    return this.failedApplicantApplicationStakeUnstakingPeriod;
+    return this.failedApplicantApplicationStakeUnstakingPeriod
   }
 
   public getFailedApplicantRoleStakeUnstakingPeriod(): BN {
-    return this.failedApplicantRoleStakeUnstakingPeriod;
+    return this.failedApplicantRoleStakeUnstakingPeriod
   }
 
   public getTerminateApplicationStakeUnstakingPeriod(): BN {
-    return this.terminateApplicationStakeUnstakingPeriod;
+    return this.terminateApplicationStakeUnstakingPeriod
   }
 
   public getTerminateRoleStakeUnstakingPeriod(): BN {
-    return this.terminateRoleStakeUnstakingPeriod;
+    return this.terminateRoleStakeUnstakingPeriod
   }
 
   public getExitRoleApplicationStakeUnstakingPeriod(): BN {
-    return this.exitRoleApplicationStakeUnstakingPeriod;
+    return this.exitRoleApplicationStakeUnstakingPeriod
   }
 
   public getExitRoleStakeUnstakingPeriod(): BN {
-    return this.exitRoleStakeUnstakingPeriod;
+    return this.exitRoleStakeUnstakingPeriod
   }
 
   public getText(): string {
-    return this.text;
+    return this.text
   }
 
   public getOpeningType(): string {
-    return this.openingType;
+    return this.openingType
   }
 
   public setActivateAtBlock(value: BN | undefined) {
-    this.activateAtBlock = value;
+    this.activateAtBlock = value
   }
 
   public setMaxActiveApplicants(value: BN) {
-    this.maxActiveApplicants = value;
+    this.maxActiveApplicants = value
   }
 
   public setMaxReviewPeriodLength(value: BN) {
-    this.maxReviewPeriodLength = value;
+    this.maxReviewPeriodLength = value
   }
 
   public setApplicationStakingPolicyAmount(value: BN) {
-    this.applicationStakingPolicyAmount = value;
+    this.applicationStakingPolicyAmount = value
   }
 
   public setApplicationCrowdedOutUnstakingPeriodLength(value: BN) {
-    this.applicationCrowdedOutUnstakingPeriodLength = value;
+    this.applicationCrowdedOutUnstakingPeriodLength = value
   }
 
   public setApplicationExpiredUnstakingPeriodLength(value: BN) {
-    this.applicationExpiredUnstakingPeriodLength = value;
+    this.applicationExpiredUnstakingPeriodLength = value
   }
 
   public setRoleStakingPolicyAmount(value: BN) {
-    this.roleStakingPolicyAmount = value;
+    this.roleStakingPolicyAmount = value
   }
 
   public setRoleCrowdedOutUnstakingPeriodLength(value: BN) {
-    this.roleCrowdedOutUnstakingPeriodLength = value;
+    this.roleCrowdedOutUnstakingPeriodLength = value
   }
 
   public setRoleExpiredUnstakingPeriodLength(value: BN) {
-    this.roleExpiredUnstakingPeriodLength = value;
+    this.roleExpiredUnstakingPeriodLength = value
   }
 
   public setSlashableMaxCount(value: BN) {
-    this.slashableMaxCount = value;
+    this.slashableMaxCount = value
   }
 
   public setSlashableMaxPercentPtsPerTime(value: BN) {
-    this.slashableMaxPercentPtsPerTime = value;
+    this.slashableMaxPercentPtsPerTime = value
   }
 
   public setSuccessfulApplicantApplicationStakeUnstakingPeriod(value: BN) {
-    this.successfulApplicantApplicationStakeUnstakingPeriod = value;
+    this.successfulApplicantApplicationStakeUnstakingPeriod = value
   }
 
   public setFailedApplicantApplicationStakeUnstakingPeriod(value: BN) {
-    this.failedApplicantApplicationStakeUnstakingPeriod = value;
+    this.failedApplicantApplicationStakeUnstakingPeriod = value
   }
 
   public setFailedApplicantRoleStakeUnstakingPeriod(value: BN) {
-    this.failedApplicantRoleStakeUnstakingPeriod = value;
+    this.failedApplicantRoleStakeUnstakingPeriod = value
   }
 
   public setTerminateApplicationStakeUnstakingPeriod(value: BN) {
-    this.terminateApplicationStakeUnstakingPeriod = value;
+    this.terminateApplicationStakeUnstakingPeriod = value
   }
 
   public setTerminateRoleStakeUnstakingPeriod(value: BN) {
-    this.terminateRoleStakeUnstakingPeriod = value;
+    this.terminateRoleStakeUnstakingPeriod = value
   }
 
   public setExitRoleApplicationStakeUnstakingPeriod(value: BN) {
-    this.exitRoleApplicationStakeUnstakingPeriod = value;
+    this.exitRoleApplicationStakeUnstakingPeriod = value
   }
 
   public setExitRoleStakeUnstakingPeriod(value: BN) {
-    this.exitRoleStakeUnstakingPeriod = value;
+    this.exitRoleStakeUnstakingPeriod = value
   }
 
   public setText(value: string) {
-    this.text = value;
+    this.text = value
   }
 
   public setOpeningType(value: string) {
-    this.openingType = value;
+    this.openingType = value
   }
 
   constructor() {
-    return;
+    return
   }
 
   public getActivateAt() {
-    return this.activateAtBlock === undefined ? 'CurrentBlock' : { ExactBlock: this.activateAtBlock };
+    return this.activateAtBlock === undefined ? 'CurrentBlock' : { ExactBlock: this.activateAtBlock }
   }
 
   public getCommitment() {
@@ -221,6 +221,6 @@ export class WorkingGroupOpening {
       terminate_role_stake_unstaking_period: this.terminateRoleStakeUnstakingPeriod,
       exit_role_application_stake_unstaking_period: this.exitRoleApplicationStakeUnstakingPeriod,
       exit_role_stake_unstaking_period: this.exitRoleStakeUnstakingPeriod,
-    };
+    }
   }
 }

+ 32 - 32
tests/network-tests/src/nicaea/tests/electingCouncilTest.ts

@@ -1,38 +1,38 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from './impl/membershipCreation';
-import { councilTest } from './impl/electingCouncil';
-import { initConfig } from '../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import { setTestTimeout } from '../utils/setTestTimeout';
-import BN from 'bn.js';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { ApiWrapper } from '../utils/apiWrapper';
-import { closeApi } from './impl/closeApi';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from './impl/membershipCreation'
+import { councilTest } from './impl/electingCouncil'
+import { initConfig } from '../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import { setTestTimeout } from '../utils/setTestTimeout'
+import BN from 'bn.js'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { ApiWrapper } from '../utils/apiWrapper'
+import { closeApi } from './impl/closeApi'
 
 tap.mocha.describe('Electing council scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const durationInBlocks: number = 25;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const durationInBlocks = 25
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
+  closeApi(apiWrapper)
+})

+ 4 - 4
tests/network-tests/src/nicaea/tests/impl/closeApi.ts

@@ -1,8 +1,8 @@
-import { ApiWrapper } from '../../utils/apiWrapper';
-import tap from 'tap';
+import { ApiWrapper } from '../../utils/apiWrapper'
+import tap from 'tap'
 
 export function closeApi(apiWrapper: ApiWrapper) {
   tap.teardown(() => {
-    apiWrapper.close();
-  });
+    apiWrapper.close()
+  })
 }

+ 52 - 57
tests/network-tests/src/nicaea/tests/impl/electingCouncil.ts

@@ -1,12 +1,12 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper } from '../../utils/apiWrapper';
-import { Keyring } from '@polkadot/api';
-import BN from 'bn.js';
-import { Seat } from '@nicaea/types/council';
-import { assert } from 'chai';
-import { v4 as uuid } from 'uuid';
-import { Utils } from '../../utils/utils';
-import tap from 'tap';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper } from '../../utils/apiWrapper'
+import { Keyring } from '@polkadot/api'
+import BN from 'bn.js'
+import { Seat } from '@nicaea/types/council'
+import { assert } from 'chai'
+import { v4 as uuid } from 'uuid'
+import { Utils } from '../../utils/utils'
+import tap from 'tap'
 
 export function councilTest(
   apiWrapper: ApiWrapper,
@@ -18,90 +18,85 @@ export function councilTest(
   greaterStake: BN,
   lesserStake: BN
 ) {
-  let sudo: KeyringPair;
+  let sudo: KeyringPair
 
   tap.test('Electing a council test', async () => {
     // Setup goes here because M keypairs are generated after before() function
-    sudo = keyring.addFromUri(sudoUri);
-    let now = await apiWrapper.getBestBlock();
-    const applyForCouncilFee: BN = apiWrapper.estimateApplyForCouncilFee(greaterStake);
-    const voteForCouncilFee: BN = apiWrapper.estimateVoteForCouncilFee(sudo.address, sudo.address, greaterStake);
-    const salt: string[] = new Array();
+    sudo = keyring.addFromUri(sudoUri)
+    let now = await apiWrapper.getBestBlock()
+    const applyForCouncilFee: BN = apiWrapper.estimateApplyForCouncilFee(greaterStake)
+    const voteForCouncilFee: BN = apiWrapper.estimateVoteForCouncilFee(sudo.address, sudo.address, greaterStake)
+    const salt: string[] = []
     m1KeyPairs.forEach(() => {
-      salt.push(''.concat(uuid().replace(/-/g, '')));
-    });
-    const revealVoteFee: BN = apiWrapper.estimateRevealVoteFee(sudo.address, salt[0]);
+      salt.push(''.concat(uuid().replace(/-/g, '')))
+    })
+    const revealVoteFee: BN = apiWrapper.estimateRevealVoteFee(sudo.address, salt[0])
 
     // Topping the balances
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, applyForCouncilFee.add(greaterStake));
-    await apiWrapper.transferBalanceToAccounts(
-      sudo,
-      m1KeyPairs,
-      voteForCouncilFee.add(revealVoteFee).add(greaterStake)
-    );
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, applyForCouncilFee.add(greaterStake))
+    await apiWrapper.transferBalanceToAccounts(sudo, m1KeyPairs, voteForCouncilFee.add(revealVoteFee).add(greaterStake))
 
     // First K members stake more
-    await apiWrapper.sudoStartAnnouncingPerion(sudo, now.addn(100));
-    await apiWrapper.batchApplyForCouncilElection(m2KeyPairs.slice(0, K), greaterStake);
-    m2KeyPairs.slice(0, K).forEach(keyPair =>
-      apiWrapper.getCouncilElectionStake(keyPair.address).then(stake => {
+    await apiWrapper.sudoStartAnnouncingPerion(sudo, now.addn(100))
+    await apiWrapper.batchApplyForCouncilElection(m2KeyPairs.slice(0, K), greaterStake)
+    m2KeyPairs.slice(0, K).forEach((keyPair) =>
+      apiWrapper.getCouncilElectionStake(keyPair.address).then((stake) => {
         assert(
           stake.eq(greaterStake),
           `${keyPair.address} not applied correctrly for council election with stake ${stake} versus expected ${greaterStake}`
-        );
+        )
       })
-    );
+    )
 
     // Last members stake less
-    await apiWrapper.batchApplyForCouncilElection(m2KeyPairs.slice(K), lesserStake);
-    m2KeyPairs.slice(K).forEach(keyPair =>
-      apiWrapper.getCouncilElectionStake(keyPair.address).then(stake => {
+    await apiWrapper.batchApplyForCouncilElection(m2KeyPairs.slice(K), lesserStake)
+    m2KeyPairs.slice(K).forEach((keyPair) =>
+      apiWrapper.getCouncilElectionStake(keyPair.address).then((stake) => {
         assert(
           stake.eq(lesserStake),
           `${keyPair.address} not applied correctrly for council election with stake ${stake} versus expected ${lesserStake}`
-        );
+        )
       })
-    );
+    )
 
     // Voting
-    await apiWrapper.sudoStartVotingPerion(sudo, now.addn(100));
+    await apiWrapper.sudoStartVotingPerion(sudo, now.addn(100))
     await apiWrapper.batchVoteForCouncilMember(
       m1KeyPairs.slice(0, K),
       m2KeyPairs.slice(0, K),
       salt.slice(0, K),
       lesserStake
-    );
-    await apiWrapper.batchVoteForCouncilMember(m1KeyPairs.slice(K), m2KeyPairs.slice(K), salt.slice(K), greaterStake);
+    )
+    await apiWrapper.batchVoteForCouncilMember(m1KeyPairs.slice(K), m2KeyPairs.slice(K), salt.slice(K), greaterStake)
 
     // Revealing
-    await apiWrapper.sudoStartRevealingPerion(sudo, now.addn(100));
-    await apiWrapper.batchRevealVote(m1KeyPairs.slice(0, K), m2KeyPairs.slice(0, K), salt.slice(0, K));
-    await apiWrapper.batchRevealVote(m1KeyPairs.slice(K), m2KeyPairs.slice(K), salt.slice(K));
-    now = await apiWrapper.getBestBlock();
+    await apiWrapper.sudoStartRevealingPerion(sudo, now.addn(100))
+    await apiWrapper.batchRevealVote(m1KeyPairs.slice(0, K), m2KeyPairs.slice(0, K), salt.slice(0, K))
+    await apiWrapper.batchRevealVote(m1KeyPairs.slice(K), m2KeyPairs.slice(K), salt.slice(K))
+    now = await apiWrapper.getBestBlock()
 
     // Resolving election
     // 3 is to ensure the revealing block is in future
-    await apiWrapper.sudoStartRevealingPerion(sudo, now.addn(3));
-    await Utils.wait(apiWrapper.getBlockDuration().muln(2.5).toNumber());
-    const seats: Seat[] = await apiWrapper.getCouncil();
+    await apiWrapper.sudoStartRevealingPerion(sudo, now.addn(3))
+    await Utils.wait(apiWrapper.getBlockDuration().muln(2.5).toNumber())
+    const seats: Seat[] = await apiWrapper.getCouncil()
 
     // Preparing collections to increase assertion readability
-    const m2addresses: string[] = m2KeyPairs.map(keyPair => keyPair.address);
-    const m1addresses: string[] = m1KeyPairs.map(keyPair => keyPair.address);
-    const members: string[] = seats.map(seat => seat.member.toString());
-    const bakers: string[] = seats.reduce(
-      (array, seat) => array.concat(seat.backers.map(baker => baker.member.toString())),
-      new Array()
-    );
+    const m2addresses: string[] = m2KeyPairs.map((keyPair) => keyPair.address)
+    const m1addresses: string[] = m1KeyPairs.map((keyPair) => keyPair.address)
+    const members: string[] = seats.map((seat) => seat.member.toString())
+
+    const bakers: string[] = seats.map((seat) => seat.backers.map((baker) => baker.member.toString())).flat()
+    console.log('' + bakers)
 
     // Assertions
-    m2addresses.forEach(address => assert(members.includes(address), `Account ${address} is not in the council`));
-    m1addresses.forEach(address => assert(bakers.includes(address), `Account ${address} is not in the voters`));
-    seats.forEach(seat =>
+    m2addresses.forEach((address) => assert(members.includes(address), `Account ${address} is not in the council`))
+    m1addresses.forEach((address) => assert(bakers.includes(address), `Account ${address} is not in the voters`))
+    seats.forEach((seat) =>
       assert(
         Utils.getTotalStake(seat).eq(greaterStake.add(lesserStake)),
         `Member ${seat.member} has unexpected stake ${Utils.getTotalStake(seat)}`
       )
-    );
-  });
+    )
+  })
 }

+ 38 - 38
tests/network-tests/src/nicaea/tests/impl/membershipCreation.ts

@@ -1,10 +1,10 @@
-import { Keyring } from '@polkadot/keyring';
-import { assert } from 'chai';
-import { KeyringPair } from '@polkadot/keyring/types';
-import BN from 'bn.js';
-import { ApiWrapper } from '../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import tap from 'tap';
+import { Keyring } from '@polkadot/keyring'
+import { assert } from 'chai'
+import { KeyringPair } from '@polkadot/keyring/types'
+import BN from 'bn.js'
+import { ApiWrapper } from '../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import tap from 'tap'
 
 export function membershipTest(
   apiWrapper: ApiWrapper,
@@ -14,73 +14,73 @@ export function membershipTest(
   paidTerms: number,
   sudoUri: string
 ) {
-  let sudo: KeyringPair;
-  let aKeyPair: KeyringPair;
-  let membershipFee: BN;
-  let membershipTransactionFee: BN;
+  let sudo: KeyringPair
+  let aKeyPair: KeyringPair
+  let membershipFee: BN
+  let membershipTransactionFee: BN
 
   tap.test('Membership creation test setup', async () => {
-    sudo = keyring.addFromUri(sudoUri);
+    sudo = keyring.addFromUri(sudoUri)
     for (let i = 0; i < N; i++) {
-      nKeyPairs.push(keyring.addFromUri(i + uuid().substring(0, 8)));
+      nKeyPairs.push(keyring.addFromUri(i + uuid().substring(0, 8)))
     }
-    aKeyPair = keyring.addFromUri(uuid().substring(0, 8));
-    membershipFee = await apiWrapper.getMembershipFee(paidTerms);
+    aKeyPair = keyring.addFromUri(uuid().substring(0, 8))
+    membershipFee = await apiWrapper.getMembershipFee(paidTerms)
     membershipTransactionFee = apiWrapper.estimateBuyMembershipFee(
       sudo,
       paidTerms,
       'member_name_which_is_longer_than_expected'
-    );
-    await apiWrapper.transferBalanceToAccounts(sudo, nKeyPairs, membershipTransactionFee.add(new BN(membershipFee)));
-    await apiWrapper.transferBalance(sudo, aKeyPair.address, membershipTransactionFee);
-  });
+    )
+    await apiWrapper.transferBalanceToAccounts(sudo, nKeyPairs, membershipTransactionFee.add(new BN(membershipFee)))
+    await apiWrapper.transferBalance(sudo, aKeyPair.address, membershipTransactionFee)
+  })
 
   tap.test('Buy membeship is accepted with sufficient funds', async () => {
     await Promise.all(
       nKeyPairs.map(async (keyPair, index) => {
-        await apiWrapper.buyMembership(keyPair, paidTerms, `new_member_${index}${keyPair.address.substring(0, 8)}`);
+        await apiWrapper.buyMembership(keyPair, paidTerms, `new_member_${index}${keyPair.address.substring(0, 8)}`)
       })
-    );
+    )
     nKeyPairs.forEach((keyPair, index) =>
       apiWrapper
         .getMemberIds(keyPair.address)
-        .then(membership => assert(membership.length > 0, `Account ${keyPair.address} is not a member`))
-    );
-  });
+        .then((membership) => assert(membership.length > 0, `Account ${keyPair.address} is not a member`))
+    )
+  })
 
   tap.test('Account A can not buy the membership with insufficient funds', async () => {
     await apiWrapper
       .getBalance(aKeyPair.address)
-      .then(balance =>
+      .then((balance) =>
         assert(
           balance.toBn() < membershipFee.add(membershipTransactionFee),
           'Account A already have sufficient balance to purchase membership'
         )
-      );
-    await apiWrapper.buyMembership(aKeyPair, paidTerms, `late_member_${aKeyPair.address.substring(0, 8)}`, true);
+      )
+    await apiWrapper.buyMembership(aKeyPair, paidTerms, `late_member_${aKeyPair.address.substring(0, 8)}`, true)
     apiWrapper
       .getMemberIds(aKeyPair.address)
-      .then(membership => assert(membership.length === 0, 'Account A is a member'));
-  });
+      .then((membership) => assert(membership.length === 0, 'Account A is a member'))
+  })
 
   tap.test('Account A was able to buy the membership with sufficient funds', async () => {
-    await apiWrapper.transferBalance(sudo, aKeyPair.address, membershipFee.add(membershipTransactionFee));
+    await apiWrapper.transferBalance(sudo, aKeyPair.address, membershipFee.add(membershipTransactionFee))
     apiWrapper
       .getBalance(aKeyPair.address)
-      .then(balance =>
+      .then((balance) =>
         assert(balance.toBn() >= membershipFee, 'The account balance is insufficient to purchase membership')
-      );
-    await apiWrapper.buyMembership(aKeyPair, paidTerms, `late_member_${aKeyPair.address.substring(0, 8)}`);
+      )
+    await apiWrapper.buyMembership(aKeyPair, paidTerms, `late_member_${aKeyPair.address.substring(0, 8)}`)
     apiWrapper
       .getMemberIds(aKeyPair.address)
-      .then(membership => assert(membership.length > 0, 'Account A is a not member'));
-  });
+      .then((membership) => assert(membership.length > 0, 'Account A is a not member'))
+  })
 }
 
 export function createKeyPairs(keyring: Keyring, N: number): KeyringPair[] {
-  const nKeyPairs: KeyringPair[] = new Array();
+  const nKeyPairs: KeyringPair[] = []
   for (let i = 0; i < N; i++) {
-    nKeyPairs.push(keyring.addFromUri(i + uuid().substring(0, 8)));
+    nKeyPairs.push(keyring.addFromUri(i + uuid().substring(0, 8)))
   }
-  return nKeyPairs;
+  return nKeyPairs
 }

+ 24 - 24
tests/network-tests/src/nicaea/tests/membershipCreationTest.ts

@@ -1,29 +1,29 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from './impl/membershipCreation';
-import { Keyring, WsProvider } from '@polkadot/api';
-import { initConfig } from '../utils/config';
-import { setTestTimeout } from '../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { ApiWrapper } from '../utils/apiWrapper';
-import { closeApi } from './impl/closeApi';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from './impl/membershipCreation'
+import { Keyring, WsProvider } from '@polkadot/api'
+import { initConfig } from '../utils/config'
+import { setTestTimeout } from '../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { ApiWrapper } from '../utils/apiWrapper'
+import { closeApi } from './impl/closeApi'
 
 tap.mocha.describe('Membership creation scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const nKeyPairs: KeyringPair[] = new Array();
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const durationInBlocks: number = 7;
+  const nKeyPairs: KeyringPair[] = []
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const durationInBlocks = 7
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri)
+  closeApi(apiWrapper)
+})

+ 35 - 35
tests/network-tests/src/nicaea/tests/proposals/contentWorkingGroupMintCapacityProposalTest.ts

@@ -1,41 +1,41 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from '../impl/membershipCreation';
-import { councilTest } from '../impl/electingCouncil';
-import { workingGroupMintCapacityProposalTest } from './impl/workingGroupMintCapacityProposal';
-import { initConfig } from '../../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper } from '../../utils/apiWrapper';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from '../impl/membershipCreation'
+import { councilTest } from '../impl/electingCouncil'
+import { workingGroupMintCapacityProposalTest } from './impl/workingGroupMintCapacityProposal'
+import { initConfig } from '../../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper } from '../../utils/apiWrapper'
 
 tap.mocha.describe('Validator count proposal scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const mintingCapacityIncrement: BN = new BN(+process.env.MINTING_CAPACITY_INCREMENT!);
-  const durationInBlocks: number = 29;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const mintingCapacityIncrement: BN = new BN(+process.env.MINTING_CAPACITY_INCREMENT!)
+  const durationInBlocks = 29
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
-  workingGroupMintCapacityProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri, mintingCapacityIncrement);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
+  workingGroupMintCapacityProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri, mintingCapacityIncrement)
+  closeApi(apiWrapper)
+})

+ 34 - 34
tests/network-tests/src/nicaea/tests/proposals/electionParametersProposalTest.ts

@@ -1,40 +1,40 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from '../impl/membershipCreation';
-import { councilTest } from '../impl/electingCouncil';
-import { electionParametersProposalTest } from './impl/electionParametersProposal';
-import { initConfig } from '../../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper } from '../../utils/apiWrapper';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from '../impl/membershipCreation'
+import { councilTest } from '../impl/electingCouncil'
+import { electionParametersProposalTest } from './impl/electionParametersProposal'
+import { initConfig } from '../../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper } from '../../utils/apiWrapper'
 
 tap.mocha.describe('Election parameters proposal scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const durationInBlocks: number = 29;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const durationInBlocks = 29
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
-  electionParametersProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
+  electionParametersProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri)
+  closeApi(apiWrapper)
+})

+ 55 - 55
tests/network-tests/src/nicaea/tests/proposals/impl/electionParametersProposal.ts

@@ -1,10 +1,10 @@
-import { Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper } from '../../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import BN from 'bn.js';
-import { assert } from 'chai';
-import tap from 'tap';
+import { Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper } from '../../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import BN from 'bn.js'
+import { assert } from 'chai'
+import tap from 'tap'
 
 export function electionParametersProposalTest(
   apiWrapper: ApiWrapper,
@@ -13,26 +13,26 @@ export function electionParametersProposalTest(
   keyring: Keyring,
   sudoUri: string
 ) {
-  let sudo: KeyringPair;
+  let sudo: KeyringPair
 
   tap.test('Election parameters proposal test', async () => {
     // Setup
-    sudo = keyring.addFromUri(sudoUri);
-    const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-    const description: string = 'Testing validator count proposal ' + uuid().substring(0, 8);
-    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee();
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee);
-    const announcingPeriod: BN = await apiWrapper.getAnnouncingPeriod();
-    const votingPeriod: BN = await apiWrapper.getVotingPeriod();
-    const revealingPeriod: BN = await apiWrapper.getRevealingPeriod();
-    const councilSize: BN = await apiWrapper.getCouncilSize();
-    const candidacyLimit: BN = await apiWrapper.getCandidacyLimit();
-    const newTermDuration: BN = await apiWrapper.getNewTermDuration();
-    const minCouncilStake: BN = await apiWrapper.getMinCouncilStake();
-    const minVotingStake: BN = await apiWrapper.getMinVotingStake();
+    sudo = keyring.addFromUri(sudoUri)
+    const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+    const description: string = 'Testing validator count proposal ' + uuid().substring(0, 8)
+    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee()
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee)
+    const announcingPeriod: BN = await apiWrapper.getAnnouncingPeriod()
+    const votingPeriod: BN = await apiWrapper.getVotingPeriod()
+    const revealingPeriod: BN = await apiWrapper.getRevealingPeriod()
+    const councilSize: BN = await apiWrapper.getCouncilSize()
+    const candidacyLimit: BN = await apiWrapper.getCandidacyLimit()
+    const newTermDuration: BN = await apiWrapper.getNewTermDuration()
+    const minCouncilStake: BN = await apiWrapper.getMinCouncilStake()
+    const minVotingStake: BN = await apiWrapper.getMinVotingStake()
 
     // Proposal stake calculation
-    const proposalStake: BN = new BN(200000);
+    const proposalStake: BN = new BN(200000)
     const proposalFee: BN = apiWrapper.estimateProposeElectionParametersFee(
       description,
       description,
@@ -45,19 +45,19 @@ export function electionParametersProposalTest(
       newTermDuration,
       minCouncilStake,
       minVotingStake
-    );
-    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake));
+    )
+    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake))
 
     // Proposal creation
-    const proposedAnnouncingPeriod: BN = announcingPeriod.subn(1);
-    const proposedVotingPeriod: BN = votingPeriod.addn(1);
-    const proposedRevealingPeriod: BN = revealingPeriod.addn(1);
-    const proposedCouncilSize: BN = councilSize.addn(1);
-    const proposedCandidacyLimit: BN = candidacyLimit.addn(1);
-    const proposedNewTermDuration: BN = newTermDuration.addn(1);
-    const proposedMinCouncilStake: BN = minCouncilStake.addn(1);
-    const proposedMinVotingStake: BN = minVotingStake.addn(1);
-    const proposalPromise = apiWrapper.expectProposalCreated();
+    const proposedAnnouncingPeriod: BN = announcingPeriod.subn(1)
+    const proposedVotingPeriod: BN = votingPeriod.addn(1)
+    const proposedRevealingPeriod: BN = revealingPeriod.addn(1)
+    const proposedCouncilSize: BN = councilSize.addn(1)
+    const proposedCandidacyLimit: BN = candidacyLimit.addn(1)
+    const proposedNewTermDuration: BN = newTermDuration.addn(1)
+    const proposedMinCouncilStake: BN = minCouncilStake.addn(1)
+    const proposedMinVotingStake: BN = minVotingStake.addn(1)
+    const proposalPromise = apiWrapper.expectProposalCreated()
     await apiWrapper.proposeElectionParameters(
       m1KeyPairs[0],
       proposalTitle,
@@ -71,54 +71,54 @@ export function electionParametersProposalTest(
       proposedNewTermDuration,
       proposedMinCouncilStake,
       proposedMinVotingStake
-    );
-    const proposalNumber = await proposalPromise;
+    )
+    const proposalNumber = await proposalPromise
 
     // Approving the proposal
-    const proposalExecutionPromise = apiWrapper.expectProposalFinalized();
-    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
-    await proposalExecutionPromise;
+    const proposalExecutionPromise = apiWrapper.expectProposalFinalized()
+    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber)
+    await proposalExecutionPromise
 
     // Assertions
-    const newAnnouncingPeriod: BN = await apiWrapper.getAnnouncingPeriod();
-    const newVotingPeriod: BN = await apiWrapper.getVotingPeriod();
-    const newRevealingPeriod: BN = await apiWrapper.getRevealingPeriod();
-    const newCouncilSize: BN = await apiWrapper.getCouncilSize();
-    const newCandidacyLimit: BN = await apiWrapper.getCandidacyLimit();
-    const newNewTermDuration: BN = await apiWrapper.getNewTermDuration();
-    const newMinCouncilStake: BN = await apiWrapper.getMinCouncilStake();
-    const newMinVotingStake: BN = await apiWrapper.getMinVotingStake();
+    const newAnnouncingPeriod: BN = await apiWrapper.getAnnouncingPeriod()
+    const newVotingPeriod: BN = await apiWrapper.getVotingPeriod()
+    const newRevealingPeriod: BN = await apiWrapper.getRevealingPeriod()
+    const newCouncilSize: BN = await apiWrapper.getCouncilSize()
+    const newCandidacyLimit: BN = await apiWrapper.getCandidacyLimit()
+    const newNewTermDuration: BN = await apiWrapper.getNewTermDuration()
+    const newMinCouncilStake: BN = await apiWrapper.getMinCouncilStake()
+    const newMinVotingStake: BN = await apiWrapper.getMinVotingStake()
     assert(
       proposedAnnouncingPeriod.eq(newAnnouncingPeriod),
       `Announcing period has unexpected value ${newAnnouncingPeriod}, expected ${proposedAnnouncingPeriod}`
-    );
+    )
     assert(
       proposedVotingPeriod.eq(newVotingPeriod),
       `Voting period has unexpected value ${newVotingPeriod}, expected ${proposedVotingPeriod}`
-    );
+    )
     assert(
       proposedRevealingPeriod.eq(newRevealingPeriod),
       `Revealing has unexpected value ${newRevealingPeriod}, expected ${proposedRevealingPeriod}`
-    );
+    )
     assert(
       proposedCouncilSize.eq(newCouncilSize),
       `Council size has unexpected value ${newCouncilSize}, expected ${proposedCouncilSize}`
-    );
+    )
     assert(
       proposedCandidacyLimit.eq(newCandidacyLimit),
       `Candidacy limit has unexpected value ${newCandidacyLimit}, expected ${proposedCandidacyLimit}`
-    );
+    )
     assert(
       proposedNewTermDuration.eq(newNewTermDuration),
       `New term duration has unexpected value ${newNewTermDuration}, expected ${proposedNewTermDuration}`
-    );
+    )
     assert(
       proposedMinCouncilStake.eq(newMinCouncilStake),
       `Min council stake has unexpected value ${newMinCouncilStake}, expected ${proposedMinCouncilStake}`
-    );
+    )
     assert(
       proposedMinVotingStake.eq(newMinVotingStake),
       `Min voting stake has unexpected value ${newMinVotingStake}, expected ${proposedMinVotingStake}`
-    );
-  });
+    )
+  })
 }

+ 122 - 122
tests/network-tests/src/nicaea/tests/proposals/impl/proposalsModule.ts

@@ -1,9 +1,9 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper, WorkingGroups } from '../../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import BN from 'bn.js';
-import { WorkingGroupOpening } from '../../../dto/workingGroupOpening';
-import { FillOpeningParameters } from '../../../dto/fillOpeningParameters';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper, WorkingGroups } from '../../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import BN from 'bn.js'
+import { WorkingGroupOpening } from '../../../dto/workingGroupOpening'
+import { FillOpeningParameters } from '../../../dto/fillOpeningParameters'
 
 export async function createWorkingGroupLeaderOpening(
   apiWrapper: ApiWrapper,
@@ -14,37 +14,37 @@ export async function createWorkingGroupLeaderOpening(
   workingGroup: string
 ): Promise<BN> {
   // Setup
-  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-  const description: string = 'Testing working group lead opening proposal ' + uuid().substring(0, 8);
+  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+  const description: string = 'Testing working group lead opening proposal ' + uuid().substring(0, 8)
 
   // Proposal stake calculation
-  const proposalStake: BN = new BN(100000);
-  const proposalFee: BN = apiWrapper.estimateProposeCreateWorkingGroupLeaderOpeningFee();
-  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake));
+  const proposalStake: BN = new BN(100000)
+  const proposalFee: BN = apiWrapper.estimateProposeCreateWorkingGroupLeaderOpeningFee()
+  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake))
 
   // Opening construction
-  const opening = new WorkingGroupOpening();
-  opening.setMaxActiveApplicants(new BN(m1KeyPairs.length));
-  opening.setMaxReviewPeriodLength(new BN(32));
-  opening.setApplicationStakingPolicyAmount(new BN(applicationStake));
-  opening.setApplicationCrowdedOutUnstakingPeriodLength(new BN(1));
-  opening.setApplicationExpiredUnstakingPeriodLength(new BN(1));
-  opening.setRoleStakingPolicyAmount(new BN(roleStake));
-  opening.setRoleCrowdedOutUnstakingPeriodLength(new BN(1));
-  opening.setRoleExpiredUnstakingPeriodLength(new BN(1));
-  opening.setSlashableMaxCount(new BN(1));
-  opening.setSlashableMaxPercentPtsPerTime(new BN(100));
-  opening.setSuccessfulApplicantApplicationStakeUnstakingPeriod(new BN(1));
-  opening.setFailedApplicantApplicationStakeUnstakingPeriod(new BN(1));
-  opening.setFailedApplicantRoleStakeUnstakingPeriod(new BN(1));
-  opening.setTerminateApplicationStakeUnstakingPeriod(new BN(1));
-  opening.setTerminateRoleStakeUnstakingPeriod(new BN(1));
-  opening.setExitRoleApplicationStakeUnstakingPeriod(new BN(1));
-  opening.setExitRoleStakeUnstakingPeriod(new BN(1));
-  opening.setText(uuid().substring(0, 8));
+  const opening = new WorkingGroupOpening()
+  opening.setMaxActiveApplicants(new BN(m1KeyPairs.length))
+  opening.setMaxReviewPeriodLength(new BN(32))
+  opening.setApplicationStakingPolicyAmount(new BN(applicationStake))
+  opening.setApplicationCrowdedOutUnstakingPeriodLength(new BN(1))
+  opening.setApplicationExpiredUnstakingPeriodLength(new BN(1))
+  opening.setRoleStakingPolicyAmount(new BN(roleStake))
+  opening.setRoleCrowdedOutUnstakingPeriodLength(new BN(1))
+  opening.setRoleExpiredUnstakingPeriodLength(new BN(1))
+  opening.setSlashableMaxCount(new BN(1))
+  opening.setSlashableMaxPercentPtsPerTime(new BN(100))
+  opening.setSuccessfulApplicantApplicationStakeUnstakingPeriod(new BN(1))
+  opening.setFailedApplicantApplicationStakeUnstakingPeriod(new BN(1))
+  opening.setFailedApplicantRoleStakeUnstakingPeriod(new BN(1))
+  opening.setTerminateApplicationStakeUnstakingPeriod(new BN(1))
+  opening.setTerminateRoleStakeUnstakingPeriod(new BN(1))
+  opening.setExitRoleApplicationStakeUnstakingPeriod(new BN(1))
+  opening.setExitRoleStakeUnstakingPeriod(new BN(1))
+  opening.setText(uuid().substring(0, 8))
 
   // Proposal creation
-  const proposalPromise = apiWrapper.expectProposalCreated();
+  const proposalPromise = apiWrapper.expectProposalCreated()
   await apiWrapper.proposeCreateWorkingGroupLeaderOpening(
     m1KeyPairs[0],
     proposalTitle,
@@ -52,9 +52,9 @@ export async function createWorkingGroupLeaderOpening(
     proposalStake,
     opening,
     workingGroup
-  );
-  const proposalNumber: BN = await proposalPromise;
-  return proposalNumber;
+  )
+  const proposalNumber: BN = await proposalPromise
+  return proposalNumber
 }
 
 export async function beginWorkingGroupLeaderApplicationReview(
@@ -65,16 +65,16 @@ export async function beginWorkingGroupLeaderApplicationReview(
   workingGroup: string
 ): Promise<BN> {
   // Setup
-  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-  const description: string = 'Testing begin working group lead application review proposal ' + uuid().substring(0, 8);
+  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+  const description: string = 'Testing begin working group lead application review proposal ' + uuid().substring(0, 8)
 
   // Proposal stake calculation
-  const proposalStake: BN = new BN(25000);
-  const proposalFee: BN = apiWrapper.estimateProposeBeginWorkingGroupLeaderApplicationReviewFee();
-  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake));
+  const proposalStake: BN = new BN(25000)
+  const proposalFee: BN = apiWrapper.estimateProposeBeginWorkingGroupLeaderApplicationReviewFee()
+  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake))
 
   // Proposal creation
-  const proposalPromise = apiWrapper.expectProposalCreated();
+  const proposalPromise = apiWrapper.expectProposalCreated()
   await apiWrapper.proposeBeginWorkingGroupLeaderApplicationReview(
     m1KeyPairs[0],
     proposalTitle,
@@ -82,9 +82,9 @@ export async function beginWorkingGroupLeaderApplicationReview(
     proposalStake,
     openingId,
     workingGroup
-  );
-  const proposalNumber: BN = await proposalPromise;
-  return proposalNumber;
+  )
+  const proposalNumber: BN = await proposalPromise
+  return proposalNumber
 }
 
 export async function fillLeaderOpeningProposal(
@@ -99,38 +99,38 @@ export async function fillLeaderOpeningProposal(
   workingGroup: WorkingGroups
 ): Promise<BN> {
   // Setup
-  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-  const description: string = 'Testing fill opening proposal ' + uuid().substring(0, 8);
-  const workingGroupString: string = apiWrapper.getWorkingGroupString(workingGroup);
+  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+  const description: string = 'Testing fill opening proposal ' + uuid().substring(0, 8)
+  const workingGroupString: string = apiWrapper.getWorkingGroupString(workingGroup)
 
   // Proposal stake calculation
-  const proposalStake: BN = new BN(50000);
-  const proposalFee: BN = apiWrapper.estimateProposeFillLeaderOpeningFee();
-  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake));
+  const proposalStake: BN = new BN(50000)
+  const proposalFee: BN = apiWrapper.estimateProposeFillLeaderOpeningFee()
+  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake))
 
   // Proposal creation
   const applicationId: BN = (
     await apiWrapper.getActiveApplicationsIdsByRoleAccount(applicantRoleAccountAddress, workingGroup)
-  )[0];
-  const now = await apiWrapper.getBestBlock();
-  const fillOpeningParameters: FillOpeningParameters = new FillOpeningParameters();
-  fillOpeningParameters.setAmountPerPayout(payoutAmount);
-  fillOpeningParameters.setNextPaymentAtBlock(now.add(firstRewardInterval));
-  fillOpeningParameters.setPayoutInterval(rewardInterval);
-  fillOpeningParameters.setOpeningId(openingId);
-  fillOpeningParameters.setSuccessfulApplicationId(applicationId);
-  fillOpeningParameters.setWorkingGroup(workingGroupString);
+  )[0]
+  const now = await apiWrapper.getBestBlock()
+  const fillOpeningParameters: FillOpeningParameters = new FillOpeningParameters()
+  fillOpeningParameters.setAmountPerPayout(payoutAmount)
+  fillOpeningParameters.setNextPaymentAtBlock(now.add(firstRewardInterval))
+  fillOpeningParameters.setPayoutInterval(rewardInterval)
+  fillOpeningParameters.setOpeningId(openingId)
+  fillOpeningParameters.setSuccessfulApplicationId(applicationId)
+  fillOpeningParameters.setWorkingGroup(workingGroupString)
 
-  const proposalPromise = apiWrapper.expectProposalCreated();
+  const proposalPromise = apiWrapper.expectProposalCreated()
   await apiWrapper.proposeFillLeaderOpening(
     m1KeyPairs[0],
     proposalTitle,
     description,
     proposalStake,
     fillOpeningParameters
-  );
-  const proposalNumber: BN = await proposalPromise;
-  return proposalNumber;
+  )
+  const proposalNumber: BN = await proposalPromise
+  return proposalNumber
 }
 
 export async function terminateLeaderRoleProposal(
@@ -142,19 +142,19 @@ export async function terminateLeaderRoleProposal(
   workingGroup: WorkingGroups
 ) {
   // Setup
-  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-  const description: string = 'Testing begin working group lead application review proposal ' + uuid().substring(0, 8);
-  const rationale: string = 'Testing leader termination ' + uuid().substring(0, 8);
-  const workingGroupString: string = apiWrapper.getWorkingGroupString(workingGroup);
-  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(leaderRoleAccountAddress, workingGroup);
+  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+  const description: string = 'Testing begin working group lead application review proposal ' + uuid().substring(0, 8)
+  const rationale: string = 'Testing leader termination ' + uuid().substring(0, 8)
+  const workingGroupString: string = apiWrapper.getWorkingGroupString(workingGroup)
+  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(leaderRoleAccountAddress, workingGroup)
 
   // Proposal stake calculation
-  const proposalStake: BN = new BN(100000);
-  const proposalFee: BN = apiWrapper.estimateProposeTerminateLeaderRoleFee();
-  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake));
+  const proposalStake: BN = new BN(100000)
+  const proposalFee: BN = apiWrapper.estimateProposeTerminateLeaderRoleFee()
+  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake))
 
   // Proposal creation
-  const proposalPromise = apiWrapper.expectProposalCreated();
+  const proposalPromise = apiWrapper.expectProposalCreated()
   await apiWrapper.proposeTerminateLeaderRole(
     m1KeyPairs[0],
     proposalTitle,
@@ -164,9 +164,9 @@ export async function terminateLeaderRoleProposal(
     rationale,
     slash,
     workingGroupString
-  );
-  const proposalNumber: BN = await proposalPromise;
-  return proposalNumber;
+  )
+  const proposalNumber: BN = await proposalPromise
+  return proposalNumber
 }
 
 export async function setLeaderRewardProposal(
@@ -177,18 +177,18 @@ export async function setLeaderRewardProposal(
   workingGroup: WorkingGroups
 ): Promise<BN> {
   // Setup
-  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-  const description: string = 'Testing set leader reward proposal ' + uuid().substring(0, 8);
-  const workingGroupString: string = apiWrapper.getWorkingGroupString(workingGroup);
-  const workerId: BN = (await apiWrapper.getLeadWorkerId(workingGroup))!;
+  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+  const description: string = 'Testing set leader reward proposal ' + uuid().substring(0, 8)
+  const workingGroupString: string = apiWrapper.getWorkingGroupString(workingGroup)
+  const workerId: BN = (await apiWrapper.getLeadWorkerId(workingGroup))!
 
   // Proposal stake calculation
-  const proposalStake: BN = new BN(50000);
-  const proposalFee: BN = apiWrapper.estimateProposeLeaderRewardFee();
-  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake));
+  const proposalStake: BN = new BN(50000)
+  const proposalFee: BN = apiWrapper.estimateProposeLeaderRewardFee()
+  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake))
 
   // Proposal creation
-  const proposalPromise = apiWrapper.expectProposalCreated();
+  const proposalPromise = apiWrapper.expectProposalCreated()
   await apiWrapper.proposeLeaderReward(
     m1KeyPairs[0],
     proposalTitle,
@@ -197,9 +197,9 @@ export async function setLeaderRewardProposal(
     workerId,
     payoutAmount,
     workingGroupString
-  );
-  const proposalNumber: BN = await proposalPromise;
-  return proposalNumber;
+  )
+  const proposalNumber: BN = await proposalPromise
+  return proposalNumber
 }
 
 export async function decreaseLeaderStakeProposal(
@@ -210,18 +210,18 @@ export async function decreaseLeaderStakeProposal(
   workingGroup: WorkingGroups
 ): Promise<BN> {
   // Setup
-  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-  const description: string = 'Testing decrease leader stake proposal ' + uuid().substring(0, 8);
-  const workingGroupString: string = apiWrapper.getWorkingGroupString(workingGroup);
-  const workerId: BN = (await apiWrapper.getLeadWorkerId(workingGroup))!;
+  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+  const description: string = 'Testing decrease leader stake proposal ' + uuid().substring(0, 8)
+  const workingGroupString: string = apiWrapper.getWorkingGroupString(workingGroup)
+  const workerId: BN = (await apiWrapper.getLeadWorkerId(workingGroup))!
 
   // Proposal stake calculation
-  const proposalStake: BN = new BN(50000);
-  const proposalFee: BN = apiWrapper.estimateProposeDecreaseLeaderStakeFee();
-  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake));
+  const proposalStake: BN = new BN(50000)
+  const proposalFee: BN = apiWrapper.estimateProposeDecreaseLeaderStakeFee()
+  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake))
 
   // Proposal creation
-  const proposalPromise = apiWrapper.expectProposalCreated();
+  const proposalPromise = apiWrapper.expectProposalCreated()
   await apiWrapper.proposeDecreaseLeaderStake(
     m1KeyPairs[0],
     proposalTitle,
@@ -230,9 +230,9 @@ export async function decreaseLeaderStakeProposal(
     workerId,
     stakeDecrement,
     workingGroupString
-  );
-  const proposalNumber: BN = await proposalPromise;
-  return proposalNumber;
+  )
+  const proposalNumber: BN = await proposalPromise
+  return proposalNumber
 }
 
 export async function slashLeaderProposal(
@@ -243,18 +243,18 @@ export async function slashLeaderProposal(
   workingGroup: WorkingGroups
 ): Promise<BN> {
   // Setup
-  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-  const description: string = 'Testing slash leader stake proposal ' + uuid().substring(0, 8);
-  const workingGroupString: string = apiWrapper.getWorkingGroupString(workingGroup);
-  const workerId: BN = (await apiWrapper.getLeadWorkerId(workingGroup))!;
+  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+  const description: string = 'Testing slash leader stake proposal ' + uuid().substring(0, 8)
+  const workingGroupString: string = apiWrapper.getWorkingGroupString(workingGroup)
+  const workerId: BN = (await apiWrapper.getLeadWorkerId(workingGroup))!
 
   // Proposal stake calculation
-  const proposalStake: BN = new BN(50000);
-  const proposalFee: BN = apiWrapper.estimateProposeSlashLeaderStakeFee();
-  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake));
+  const proposalStake: BN = new BN(50000)
+  const proposalFee: BN = apiWrapper.estimateProposeSlashLeaderStakeFee()
+  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake))
 
   // Proposal creation
-  const proposalPromise = apiWrapper.expectProposalCreated();
+  const proposalPromise = apiWrapper.expectProposalCreated()
   await apiWrapper.proposeSlashLeaderStake(
     m1KeyPairs[0],
     proposalTitle,
@@ -263,9 +263,9 @@ export async function slashLeaderProposal(
     workerId,
     slashAmount,
     workingGroupString
-  );
-  const proposalNumber: BN = await proposalPromise;
-  return proposalNumber;
+  )
+  const proposalNumber: BN = await proposalPromise
+  return proposalNumber
 }
 
 export async function workingGroupMintCapacityProposal(
@@ -276,17 +276,17 @@ export async function workingGroupMintCapacityProposal(
   workingGroup: WorkingGroups
 ): Promise<BN> {
   // Setup
-  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-  const description: string = 'Testing working group mint capacity proposal ' + uuid().substring(0, 8);
-  const workingGroupString: string = apiWrapper.getWorkingGroupString(workingGroup);
+  const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+  const description: string = 'Testing working group mint capacity proposal ' + uuid().substring(0, 8)
+  const workingGroupString: string = apiWrapper.getWorkingGroupString(workingGroup)
 
   // Proposal stake calculation
-  const proposalStake: BN = new BN(50000);
-  const proposalFee: BN = apiWrapper.estimateProposeWorkingGroupMintCapacityFee();
-  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake));
+  const proposalStake: BN = new BN(50000)
+  const proposalFee: BN = apiWrapper.estimateProposeWorkingGroupMintCapacityFee()
+  await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake))
 
   // Proposal creation
-  const proposalPromise = apiWrapper.expectProposalCreated();
+  const proposalPromise = apiWrapper.expectProposalCreated()
   await apiWrapper.proposeWorkingGroupMintCapacity(
     m1KeyPairs[0],
     proposalTitle,
@@ -294,9 +294,9 @@ export async function workingGroupMintCapacityProposal(
     proposalStake,
     mintCapacity,
     workingGroupString
-  );
-  const proposalNumber: BN = await proposalPromise;
-  return proposalNumber;
+  )
+  const proposalNumber: BN = await proposalPromise
+  return proposalNumber
 }
 
 export async function voteForProposal(
@@ -305,11 +305,11 @@ export async function voteForProposal(
   sudo: KeyringPair,
   proposalNumber: BN
 ): Promise<void> {
-  const proposalVoteFee: BN = apiWrapper.estimateVoteForProposalFee();
-  await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, proposalVoteFee);
+  const proposalVoteFee: BN = apiWrapper.estimateVoteForProposalFee()
+  await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, proposalVoteFee)
 
   // Approving the proposal
-  const proposalExecutionPromise = apiWrapper.expectProposalFinalized();
-  await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
-  await proposalExecutionPromise;
+  const proposalExecutionPromise = apiWrapper.expectProposalFinalized()
+  await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber)
+  await proposalExecutionPromise
 }

+ 25 - 25
tests/network-tests/src/nicaea/tests/proposals/impl/setLeadProposal.ts

@@ -1,10 +1,10 @@
-import { Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper } from '../../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import BN from 'bn.js';
-import { assert } from 'chai';
-import tap from 'tap';
+import { Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper } from '../../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import BN from 'bn.js'
+import { assert } from 'chai'
+import tap from 'tap'
 
 export function setLeadProposalTest(
   apiWrapper: ApiWrapper,
@@ -13,34 +13,34 @@ export function setLeadProposalTest(
   keyring: Keyring,
   sudoUri: string
 ) {
-  let sudo: KeyringPair;
+  let sudo: KeyringPair
 
   tap.test('Lead proposal test', async () => {
     // Setup
-    sudo = keyring.addFromUri(sudoUri);
-    const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-    const description: string = 'Testing validator count proposal ' + uuid().substring(0, 8);
-    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee();
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee);
+    sudo = keyring.addFromUri(sudoUri)
+    const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+    const description: string = 'Testing validator count proposal ' + uuid().substring(0, 8)
+    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee()
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee)
 
     // Proposal stake calculation
-    const proposalStake: BN = new BN(50000);
-    const proposalFee: BN = apiWrapper.estimateProposeLeadFee(description, description, proposalStake, sudo.address);
-    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake));
+    const proposalStake: BN = new BN(50000)
+    const proposalFee: BN = apiWrapper.estimateProposeLeadFee(description, description, proposalStake, sudo.address)
+    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake))
 
     // Proposal creation
-    const proposalPromise = apiWrapper.expectProposalCreated();
-    await apiWrapper.proposeLead(m1KeyPairs[0], proposalTitle, description, proposalStake, m1KeyPairs[1]);
-    const proposalNumber = await proposalPromise;
+    const proposalPromise = apiWrapper.expectProposalCreated()
+    await apiWrapper.proposeLead(m1KeyPairs[0], proposalTitle, description, proposalStake, m1KeyPairs[1])
+    const proposalNumber = await proposalPromise
 
     // Approving the proposal
-    const proposalExecutionPromise = apiWrapper.expectProposalFinalized();
-    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
-    await proposalExecutionPromise;
-    const newLead: string = await apiWrapper.getCurrentLeadAddress();
+    const proposalExecutionPromise = apiWrapper.expectProposalFinalized()
+    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber)
+    await proposalExecutionPromise
+    const newLead: string = await apiWrapper.getCurrentLeadAddress()
     assert(
       newLead === m1KeyPairs[1].address,
       `New lead has unexpected value ${newLead}, expected ${m1KeyPairs[1].address}`
-    );
-  });
+    )
+  })
 }

+ 26 - 26
tests/network-tests/src/nicaea/tests/proposals/impl/spendingProposal.ts

@@ -1,10 +1,10 @@
-import { Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper } from '../../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import BN from 'bn.js';
-import { assert } from 'chai';
-import tap from 'tap';
+import { Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper } from '../../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import BN from 'bn.js'
+import { assert } from 'chai'
+import tap from 'tap'
 
 export function spendingProposalTest(
   apiWrapper: ApiWrapper,
@@ -15,29 +15,29 @@ export function spendingProposalTest(
   spendingBalance: BN,
   mintCapacity: BN
 ) {
-  let sudo: KeyringPair;
+  let sudo: KeyringPair
 
   tap.test('Spending proposal test', async () => {
     // Setup
-    sudo = keyring.addFromUri(sudoUri);
-    const description: string = 'spending proposal which is used for API network testing with some mock data';
-    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee();
+    sudo = keyring.addFromUri(sudoUri)
+    const description = 'spending proposal which is used for API network testing with some mock data'
+    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee()
 
     // Topping the balances
-    const proposalStake: BN = new BN(25000);
+    const proposalStake: BN = new BN(25000)
     const runtimeProposalFee: BN = apiWrapper.estimateProposeSpendingFee(
       description,
       description,
       proposalStake,
       spendingBalance,
       sudo.address
-    );
-    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, runtimeProposalFee.add(proposalStake));
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee);
-    await apiWrapper.sudoSetCouncilMintCapacity(sudo, mintCapacity);
+    )
+    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, runtimeProposalFee.add(proposalStake))
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee)
+    await apiWrapper.sudoSetCouncilMintCapacity(sudo, mintCapacity)
 
     // Proposal creation
-    const proposalPromise = apiWrapper.expectProposalCreated();
+    const proposalPromise = apiWrapper.expectProposalCreated()
     await apiWrapper.proposeSpending(
       m1KeyPairs[0],
       'testing spending' + uuid().substring(0, 8),
@@ -45,20 +45,20 @@ export function spendingProposalTest(
       proposalStake,
       spendingBalance,
       sudo.address
-    );
-    const proposalNumber = await proposalPromise;
+    )
+    const proposalNumber = await proposalPromise
 
     // Approving spending proposal
-    const balanceBeforeMinting: BN = await apiWrapper.getBalance(sudo.address);
-    const spendingPromise = apiWrapper.expectProposalFinalized();
-    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
-    await spendingPromise;
-    const balanceAfterMinting: BN = await apiWrapper.getBalance(sudo.address);
+    const balanceBeforeMinting: BN = await apiWrapper.getBalance(sudo.address)
+    const spendingPromise = apiWrapper.expectProposalFinalized()
+    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber)
+    await spendingPromise
+    const balanceAfterMinting: BN = await apiWrapper.getBalance(sudo.address)
     assert(
       balanceAfterMinting.sub(balanceBeforeMinting).eq(spendingBalance),
       `member ${
         m1KeyPairs[0].address
       } has unexpected balance ${balanceAfterMinting}, expected ${balanceBeforeMinting.add(spendingBalance)}`
-    );
-  });
+    )
+  })
 }

+ 23 - 23
tests/network-tests/src/nicaea/tests/proposals/impl/textProposal.ts

@@ -1,9 +1,9 @@
-import { Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper } from '../../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import BN from 'bn.js';
-import tap from 'tap';
+import { Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper } from '../../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import BN from 'bn.js'
+import tap from 'tap'
 
 export function textProposalTest(
   apiWrapper: ApiWrapper,
@@ -12,35 +12,35 @@ export function textProposalTest(
   keyring: Keyring,
   sudoUri: string
 ) {
-  let sudo: KeyringPair;
+  let sudo: KeyringPair
 
   tap.test('Text proposal test', async () => {
     // Setup
-    sudo = keyring.addFromUri(sudoUri);
-    const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-    const description: string = 'Testing text proposal ' + uuid().substring(0, 8);
-    const proposalText: string = 'Text of the testing proposal ' + uuid().substring(0, 8);
-    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee();
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee);
+    sudo = keyring.addFromUri(sudoUri)
+    const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+    const description: string = 'Testing text proposal ' + uuid().substring(0, 8)
+    const proposalText: string = 'Text of the testing proposal ' + uuid().substring(0, 8)
+    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee()
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee)
 
     // Proposal stake calculation
-    const proposalStake: BN = new BN(25000);
+    const proposalStake: BN = new BN(25000)
     const runtimeProposalFee: BN = apiWrapper.estimateProposeTextFee(
       proposalStake,
       description,
       description,
       proposalText
-    );
-    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, runtimeProposalFee.add(proposalStake));
+    )
+    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, runtimeProposalFee.add(proposalStake))
 
     // Proposal creation
-    const proposalPromise = apiWrapper.expectProposalCreated();
-    await apiWrapper.proposeText(m1KeyPairs[0], proposalStake, proposalTitle, description, proposalText);
-    const proposalNumber = await proposalPromise;
+    const proposalPromise = apiWrapper.expectProposalCreated()
+    await apiWrapper.proposeText(m1KeyPairs[0], proposalStake, proposalTitle, description, proposalText)
+    const proposalNumber = await proposalPromise
 
     // Approving text proposal
-    const textProposalPromise = apiWrapper.expectProposalFinalized();
-    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
-    await textProposalPromise;
-  });
+    const textProposalPromise = apiWrapper.expectProposalFinalized()
+    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber)
+    await textProposalPromise
+  })
 }

+ 23 - 23
tests/network-tests/src/nicaea/tests/proposals/impl/updateRuntime.ts

@@ -1,10 +1,10 @@
-import { Keyring } from '@polkadot/api';
-import { Bytes } from '@polkadot/types';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper } from '../../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import BN from 'bn.js';
-import tap from 'tap';
+import { Keyring } from '@polkadot/api'
+import { Bytes } from '@polkadot/types'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper } from '../../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import BN from 'bn.js'
+import tap from 'tap'
 
 export function updateRuntimeTest(
   apiWrapper: ApiWrapper,
@@ -13,40 +13,40 @@ export function updateRuntimeTest(
   keyring: Keyring,
   sudoUri: string
 ) {
-  let sudo: KeyringPair;
+  let sudo: KeyringPair
 
   tap.test('\n\tUpgrading the runtime test', async () => {
     // Setup
-    sudo = keyring.addFromUri(sudoUri);
-    const runtime: Bytes = await apiWrapper.getRuntime();
-    const description: string = 'runtime upgrade proposal which is used for API network testing';
-    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee();
+    sudo = keyring.addFromUri(sudoUri)
+    const runtime: Bytes = await apiWrapper.getRuntime()
+    const description = 'runtime upgrade proposal which is used for API network testing'
+    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee()
 
     // Topping the balances
-    const proposalStake: BN = new BN(1000000);
+    const proposalStake: BN = new BN(1000000)
     const runtimeProposalFee: BN = apiWrapper.estimateProposeRuntimeUpgradeFee(
       proposalStake,
       description,
       description,
       runtime
-    );
-    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, runtimeProposalFee.add(proposalStake));
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee);
+    )
+    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, runtimeProposalFee.add(proposalStake))
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee)
 
     // Proposal creation
-    const proposalPromise = apiWrapper.expectProposalCreated();
+    const proposalPromise = apiWrapper.expectProposalCreated()
     await apiWrapper.proposeRuntime(
       m1KeyPairs[0],
       proposalStake,
       'testing runtime' + uuid().substring(0, 8),
       'runtime to test proposal functionality' + uuid().substring(0, 8),
       runtime
-    );
-    const proposalNumber = await proposalPromise;
+    )
+    const proposalNumber = await proposalPromise
 
     // Approving runtime update proposal
-    const runtimePromise = apiWrapper.expectProposalFinalized();
-    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
-    await runtimePromise;
-  });
+    const runtimePromise = apiWrapper.expectProposalFinalized()
+    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber)
+    await runtimePromise
+  })
 }

+ 27 - 27
tests/network-tests/src/nicaea/tests/proposals/impl/validatorCountProposal.ts

@@ -1,10 +1,10 @@
-import { Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper } from '../../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import BN from 'bn.js';
-import { assert } from 'chai';
-import tap from 'tap';
+import { Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper } from '../../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import BN from 'bn.js'
+import { assert } from 'chai'
+import tap from 'tap'
 
 export function validatorCountProposal(
   apiWrapper: ApiWrapper,
@@ -14,42 +14,42 @@ export function validatorCountProposal(
   sudoUri: string,
   validatorCountIncrement: BN
 ) {
-  let sudo: KeyringPair;
+  let sudo: KeyringPair
 
   tap.test('Validator count proposal test', async () => {
     // Setup
-    sudo = keyring.addFromUri(sudoUri);
-    const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8);
-    const description: string = 'Testing validator count proposal ' + uuid().substring(0, 8);
-    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee();
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee);
+    sudo = keyring.addFromUri(sudoUri)
+    const proposalTitle: string = 'Testing proposal ' + uuid().substring(0, 8)
+    const description: string = 'Testing validator count proposal ' + uuid().substring(0, 8)
+    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee()
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee)
 
     // Proposal stake calculation
-    const proposalStake: BN = new BN(100000);
-    const proposalFee: BN = apiWrapper.estimateProposeValidatorCountFee(description, description, proposalStake);
-    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake));
-    const validatorCount: BN = await apiWrapper.getValidatorCount();
+    const proposalStake: BN = new BN(100000)
+    const proposalFee: BN = apiWrapper.estimateProposeValidatorCountFee(description, description, proposalStake)
+    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, proposalFee.add(proposalStake))
+    const validatorCount: BN = await apiWrapper.getValidatorCount()
 
     // Proposal creation
-    const proposedValidatorCount: BN = validatorCount.add(validatorCountIncrement);
-    const proposalPromise = apiWrapper.expectProposalCreated();
+    const proposedValidatorCount: BN = validatorCount.add(validatorCountIncrement)
+    const proposalPromise = apiWrapper.expectProposalCreated()
     await apiWrapper.proposeValidatorCount(
       m1KeyPairs[0],
       proposalTitle,
       description,
       proposalStake,
       proposedValidatorCount
-    );
-    const proposalNumber = await proposalPromise;
+    )
+    const proposalNumber = await proposalPromise
 
     // Approving the proposal
-    const proposalExecutionPromise = apiWrapper.expectProposalFinalized();
-    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
-    await proposalExecutionPromise;
-    const newValidatorCount: BN = await apiWrapper.getValidatorCount();
+    const proposalExecutionPromise = apiWrapper.expectProposalFinalized()
+    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber)
+    await proposalExecutionPromise
+    const newValidatorCount: BN = await apiWrapper.getValidatorCount()
     assert(
       proposedValidatorCount.eq(newValidatorCount),
       `Validator count has unexpeccted value ${newValidatorCount}, expected ${proposedValidatorCount}`
-    );
-  });
+    )
+  })
 }

+ 26 - 26
tests/network-tests/src/nicaea/tests/proposals/impl/workingGroupMintCapacityProposal.ts

@@ -1,10 +1,10 @@
-import { Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper } from '../../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import BN from 'bn.js';
-import { assert } from 'chai';
-import tap from 'tap';
+import { Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper } from '../../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import BN from 'bn.js'
+import { assert } from 'chai'
+import tap from 'tap'
 
 export function workingGroupMintCapacityProposalTest(
   apiWrapper: ApiWrapper,
@@ -14,46 +14,46 @@ export function workingGroupMintCapacityProposalTest(
   sudoUri: string,
   mintingCapacityIncrement: BN
 ) {
-  let sudo: KeyringPair;
+  let sudo: KeyringPair
 
   tap.test('Mint capacity proposal test', async () => {
     // Setup
-    sudo = keyring.addFromUri(sudoUri);
-    const description: string = 'spending proposal which is used for API network testing';
-    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee();
-    const initialMintingCapacity: BN = await apiWrapper.getContentWorkingGroupMintCapacity();
+    sudo = keyring.addFromUri(sudoUri)
+    const description = 'spending proposal which is used for API network testing'
+    const runtimeVoteFee: BN = apiWrapper.estimateVoteForProposalFee()
+    const initialMintingCapacity: BN = await apiWrapper.getContentWorkingGroupMintCapacity()
 
     // Topping the balances
-    const proposalStake: BN = new BN(50000);
+    const proposalStake: BN = new BN(50000)
     const runtimeProposalFee: BN = apiWrapper.estimateProposeContentWorkingGroupMintCapacityFee(
       description,
       description,
       proposalStake,
       initialMintingCapacity.add(mintingCapacityIncrement)
-    );
-    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, runtimeProposalFee.add(proposalStake));
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee);
+    )
+    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, runtimeProposalFee.add(proposalStake))
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee)
 
     // Proposal creation
-    const proposedMintingCapacity: BN = initialMintingCapacity.add(mintingCapacityIncrement);
-    const proposalPromise = apiWrapper.expectProposalCreated();
+    const proposedMintingCapacity: BN = initialMintingCapacity.add(mintingCapacityIncrement)
+    const proposalPromise = apiWrapper.expectProposalCreated()
     await apiWrapper.proposeContentWorkingGroupMintCapacity(
       m1KeyPairs[0],
       'testing mint capacity' + uuid().substring(0, 8),
       'mint capacity to test proposal functionality' + uuid().substring(0, 8),
       proposalStake,
       proposedMintingCapacity
-    );
-    const proposalNumber = await proposalPromise;
+    )
+    const proposalNumber = await proposalPromise
 
     // Approving mint capacity proposal
-    const mintCapacityPromise = apiWrapper.expectProposalFinalized();
-    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
-    await mintCapacityPromise;
-    const newMintingCapacity: BN = await apiWrapper.getContentWorkingGroupMintCapacity();
+    const mintCapacityPromise = apiWrapper.expectProposalFinalized()
+    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber)
+    await mintCapacityPromise
+    const newMintingCapacity: BN = await apiWrapper.getContentWorkingGroupMintCapacity()
     assert(
       proposedMintingCapacity.eq(newMintingCapacity),
       `Content working group has unexpected minting capacity ${newMintingCapacity}, expected ${proposedMintingCapacity}`
-    );
-  });
+    )
+  })
 }

+ 85 - 85
tests/network-tests/src/nicaea/tests/proposals/manageLeaderRole.ts

@@ -1,14 +1,14 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from '../impl/membershipCreation';
-import { councilTest } from '../impl/electingCouncil';
-import { initConfig } from '../../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from '../impl/membershipCreation'
+import { councilTest } from '../impl/electingCouncil'
+import { initConfig } from '../../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper'
 import {
   createWorkingGroupLeaderOpening,
   voteForProposal,
@@ -18,7 +18,7 @@ import {
   setLeaderRewardProposal,
   decreaseLeaderStakeProposal,
   slashLeaderProposal,
-} from './impl/proposalsModule';
+} from './impl/proposalsModule'
 import {
   applyForOpening,
   expectLeadOpeningAdded,
@@ -28,46 +28,46 @@ import {
   expectLeaderRewardAmountUpdated,
   expectLeaderStakeDecreased,
   expectLeaderSlashed,
-} from '../workingGroup/impl/workingGroupModule';
+} from '../workingGroup/impl/workingGroupModule'
 
 tap.mocha.describe('Set lead proposal scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
-  const leadKeyPair: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
+  const leadKeyPair: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!);
-  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!);
-  const firstRewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!);
-  const rewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!);
-  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!);
-  const alteredPayoutAmount: BN = new BN(process.env.ALTERED_PAYOUT_AMOUNT!);
-  const stakeDecrement: BN = new BN(process.env.STAKE_DECREMENT!);
-  const slashAmount: BN = new BN(process.env.SLASH_AMOUNT!);
-  const durationInBlocks: number = 70;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!)
+  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!)
+  const firstRewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!)
+  const rewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!)
+  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!)
+  const alteredPayoutAmount: BN = new BN(process.env.ALTERED_PAYOUT_AMOUNT!)
+  const stakeDecrement: BN = new BN(process.env.STAKE_DECREMENT!)
+  const slashAmount: BN = new BN(process.env.SLASH_AMOUNT!)
+  const durationInBlocks = 70
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
-  const sudo: KeyringPair = keyring.addFromUri(sudoUri);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
+  const sudo: KeyringPair = keyring.addFromUri(sudoUri)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
 
-  let createOpeningProposalId: BN;
-  let openingId: BN;
+  let createOpeningProposalId: BN
+  let openingId: BN
   tap.test(
     'Propose create leader opening',
     async () =>
@@ -79,11 +79,11 @@ tap.mocha.describe('Set lead proposal scenario', async () => {
         roleStake,
         'Storage'
       ))
-  );
+  )
   tap.test('Approve add opening proposal', async () => {
-    voteForProposal(apiWrapper, m2KeyPairs, sudo, createOpeningProposalId);
-    openingId = await expectLeadOpeningAdded(apiWrapper);
-  });
+    voteForProposal(apiWrapper, m2KeyPairs, sudo, createOpeningProposalId)
+    openingId = await expectLeadOpeningAdded(apiWrapper)
+  })
 
   tap.test(
     'Apply for lead opening',
@@ -98,8 +98,8 @@ tap.mocha.describe('Set lead proposal scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       )
-  );
-  let beginReviewProposalId: BN;
+  )
+  let beginReviewProposalId: BN
   tap.test(
     'Propose begin leader application review',
     async () =>
@@ -110,13 +110,13 @@ tap.mocha.describe('Set lead proposal scenario', async () => {
         new BN(openingId),
         'Storage'
       ))
-  );
+  )
   tap.test('Approve begin review proposal', async () => {
-    voteForProposal(apiWrapper, m2KeyPairs, sudo, beginReviewProposalId);
-    expectBeganApplicationReview(apiWrapper);
-  });
+    voteForProposal(apiWrapper, m2KeyPairs, sudo, beginReviewProposalId)
+    expectBeganApplicationReview(apiWrapper)
+  })
 
-  let fillLeaderOpeningProposalId: BN;
+  let fillLeaderOpeningProposalId: BN
   tap.test(
     'Propose fill leader opening',
     async () =>
@@ -131,13 +131,13 @@ tap.mocha.describe('Set lead proposal scenario', async () => {
         new BN(openingId),
         WorkingGroups.storageWorkingGroup
       ))
-  );
+  )
   tap.test('Approve fill leader opening', async () => {
-    voteForProposal(apiWrapper, m2KeyPairs, sudo, fillLeaderOpeningProposalId);
-    await expectLeaderSet(apiWrapper, leadKeyPair[0].address, WorkingGroups.storageWorkingGroup);
-  });
+    voteForProposal(apiWrapper, m2KeyPairs, sudo, fillLeaderOpeningProposalId)
+    await expectLeaderSet(apiWrapper, leadKeyPair[0].address, WorkingGroups.storageWorkingGroup)
+  })
 
-  let rewardProposalId: BN;
+  let rewardProposalId: BN
   tap.test(
     'Propose leader reward',
     async () =>
@@ -148,14 +148,14 @@ tap.mocha.describe('Set lead proposal scenario', async () => {
         alteredPayoutAmount,
         WorkingGroups.storageWorkingGroup
       ))
-  );
+  )
   tap.test('Approve new leader reward', async () => {
-    voteForProposal(apiWrapper, m2KeyPairs, sudo, rewardProposalId);
-    await expectLeaderRewardAmountUpdated(apiWrapper, alteredPayoutAmount, WorkingGroups.storageWorkingGroup);
-  });
+    voteForProposal(apiWrapper, m2KeyPairs, sudo, rewardProposalId)
+    await expectLeaderRewardAmountUpdated(apiWrapper, alteredPayoutAmount, WorkingGroups.storageWorkingGroup)
+  })
 
-  let decreaseStakeProposalId: BN;
-  let newStake: BN;
+  let decreaseStakeProposalId: BN
+  let newStake: BN
   tap.test(
     'Propose decrease stake',
     async () =>
@@ -166,14 +166,14 @@ tap.mocha.describe('Set lead proposal scenario', async () => {
         stakeDecrement,
         WorkingGroups.storageWorkingGroup
       ))
-  );
+  )
   tap.test('Approve decreased leader stake', async () => {
-    newStake = applicationStake.sub(stakeDecrement);
-    voteForProposal(apiWrapper, m2KeyPairs, sudo, decreaseStakeProposalId);
-    await expectLeaderStakeDecreased(apiWrapper, newStake, WorkingGroups.storageWorkingGroup);
-  });
+    newStake = applicationStake.sub(stakeDecrement)
+    voteForProposal(apiWrapper, m2KeyPairs, sudo, decreaseStakeProposalId)
+    await expectLeaderStakeDecreased(apiWrapper, newStake, WorkingGroups.storageWorkingGroup)
+  })
 
-  let slashProposalId: BN;
+  let slashProposalId: BN
   tap.test(
     'Propose leader slash',
     async () =>
@@ -184,14 +184,14 @@ tap.mocha.describe('Set lead proposal scenario', async () => {
         slashAmount,
         WorkingGroups.storageWorkingGroup
       ))
-  );
+  )
   tap.test('Approve leader slash', async () => {
-    newStake = newStake.sub(slashAmount);
-    voteForProposal(apiWrapper, m2KeyPairs, sudo, slashProposalId);
-    await expectLeaderSlashed(apiWrapper, newStake, WorkingGroups.storageWorkingGroup);
-  });
+    newStake = newStake.sub(slashAmount)
+    voteForProposal(apiWrapper, m2KeyPairs, sudo, slashProposalId)
+    await expectLeaderSlashed(apiWrapper, newStake, WorkingGroups.storageWorkingGroup)
+  })
 
-  let terminateLeaderRoleProposalId: BN;
+  let terminateLeaderRoleProposalId: BN
   tap.test(
     'Propose terminate leader role',
     async () =>
@@ -203,11 +203,11 @@ tap.mocha.describe('Set lead proposal scenario', async () => {
         false,
         WorkingGroups.storageWorkingGroup
       ))
-  );
+  )
   tap.test('Approve leader role termination', async () => {
-    voteForProposal(apiWrapper, m2KeyPairs, sudo, terminateLeaderRoleProposalId);
-    await expectLeaderRoleTerminated(apiWrapper, WorkingGroups.storageWorkingGroup);
-  });
+    voteForProposal(apiWrapper, m2KeyPairs, sudo, terminateLeaderRoleProposalId)
+    await expectLeaderRoleTerminated(apiWrapper, WorkingGroups.storageWorkingGroup)
+  })
 
-  closeApi(apiWrapper);
-});
+  closeApi(apiWrapper)
+})

+ 34 - 34
tests/network-tests/src/nicaea/tests/proposals/setLeadProposalTest.ts

@@ -1,40 +1,40 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from '../impl/membershipCreation';
-import { councilTest } from '../impl/electingCouncil';
-import { setLeadProposalTest } from './impl/setLeadProposal';
-import { initConfig } from '../../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper } from '../../utils/apiWrapper';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from '../impl/membershipCreation'
+import { councilTest } from '../impl/electingCouncil'
+import { setLeadProposalTest } from './impl/setLeadProposal'
+import { initConfig } from '../../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper } from '../../utils/apiWrapper'
 
 tap.mocha.describe('Set lead proposal scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const durationInBlocks: number = 29;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const durationInBlocks = 29
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
-  setLeadProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
+  setLeadProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri)
+  closeApi(apiWrapper)
+})

+ 36 - 36
tests/network-tests/src/nicaea/tests/proposals/spendingProposalTest.ts

@@ -1,42 +1,42 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from '../impl/membershipCreation';
-import { councilTest } from '../impl/electingCouncil';
-import { spendingProposalTest } from './impl/spendingProposal';
-import { initConfig } from '../../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper } from '../../utils/apiWrapper';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from '../impl/membershipCreation'
+import { councilTest } from '../impl/electingCouncil'
+import { spendingProposalTest } from './impl/spendingProposal'
+import { initConfig } from '../../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper } from '../../utils/apiWrapper'
 
 tap.mocha.describe('Spending proposal scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const spendingBalance: BN = new BN(+process.env.SPENDING_BALANCE!);
-  const mintCapacity: BN = new BN(+process.env.COUNCIL_MINTING_CAPACITY!);
-  const durationInBlocks: number = 29;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const spendingBalance: BN = new BN(+process.env.SPENDING_BALANCE!)
+  const mintCapacity: BN = new BN(+process.env.COUNCIL_MINTING_CAPACITY!)
+  const durationInBlocks = 29
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
-  spendingProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri, spendingBalance, mintCapacity);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
+  spendingProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri, spendingBalance, mintCapacity)
+  closeApi(apiWrapper)
+})

+ 34 - 34
tests/network-tests/src/nicaea/tests/proposals/textProposalTest.ts

@@ -1,40 +1,40 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from '../impl/membershipCreation';
-import { councilTest } from '../impl/electingCouncil';
-import { textProposalTest } from './impl/textProposal';
-import { initConfig } from '../../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper } from '../../utils/apiWrapper';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from '../impl/membershipCreation'
+import { councilTest } from '../impl/electingCouncil'
+import { textProposalTest } from './impl/textProposal'
+import { initConfig } from '../../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper } from '../../utils/apiWrapper'
 
 tap.mocha.describe('Text proposal scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const durationInBlocks: number = 28;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const durationInBlocks = 28
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
-  textProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
+  textProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri)
+  closeApi(apiWrapper)
+})

+ 35 - 35
tests/network-tests/src/nicaea/tests/proposals/updateRuntimeTest.ts

@@ -1,41 +1,41 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from '../impl/membershipCreation';
-import { councilTest } from '../impl/electingCouncil';
-import { updateRuntimeTest } from './impl/updateRuntime';
-import { initConfig } from '../../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper } from '../../utils/apiWrapper';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from '../impl/membershipCreation'
+import { councilTest } from '../impl/electingCouncil'
+import { updateRuntimeTest } from './impl/updateRuntime'
+import { initConfig } from '../../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper } from '../../utils/apiWrapper'
 
 tap.mocha.describe('Update runtime scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const durationInBlocks: number = 54;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const durationInBlocks = 54
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
-  updateRuntimeTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri);
-  membershipTest(apiWrapper, new Array<KeyringPair>(), keyring, N, paidTerms, sudoUri);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
+  updateRuntimeTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri)
+  membershipTest(apiWrapper, new Array<KeyringPair>(), keyring, N, paidTerms, sudoUri)
+  closeApi(apiWrapper)
+})

+ 35 - 35
tests/network-tests/src/nicaea/tests/proposals/validatorCountProposalTest.ts

@@ -1,41 +1,41 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from '../impl/membershipCreation';
-import { councilTest } from '../impl/electingCouncil';
-import { validatorCountProposal } from './impl/validatorCountProposal';
-import { initConfig } from '../../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper } from '../../utils/apiWrapper';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from '../impl/membershipCreation'
+import { councilTest } from '../impl/electingCouncil'
+import { validatorCountProposal } from './impl/validatorCountProposal'
+import { initConfig } from '../../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper } from '../../utils/apiWrapper'
 
 tap.mocha.describe('Validator count proposal scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const validatorCountIncrement: BN = new BN(+process.env.VALIDATOR_COUNT_INCREMENT!);
-  const durationInBlocks: number = 29;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const validatorCountIncrement: BN = new BN(+process.env.VALIDATOR_COUNT_INCREMENT!)
+  const durationInBlocks = 29
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
-  validatorCountProposal(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri, validatorCountIncrement);
-  closeApi(apiWrapper);
-});
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
+  validatorCountProposal(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri, validatorCountIncrement)
+  closeApi(apiWrapper)
+})

+ 42 - 42
tests/network-tests/src/nicaea/tests/proposals/workingGroupMintCapacityProposalTest.ts

@@ -1,48 +1,48 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from '../impl/membershipCreation';
-import { councilTest } from '../impl/electingCouncil';
-import { initConfig } from '../../utils/config';
-import { Keyring, WsProvider } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import tap from 'tap';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper';
-import { voteForProposal, workingGroupMintCapacityProposal } from './impl/proposalsModule';
-import { expectMintCapacityChanged } from '../workingGroup/impl/workingGroupModule';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from '../impl/membershipCreation'
+import { councilTest } from '../impl/electingCouncil'
+import { initConfig } from '../../utils/config'
+import { Keyring, WsProvider } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import tap from 'tap'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper'
+import { voteForProposal, workingGroupMintCapacityProposal } from './impl/proposalsModule'
+import { expectMintCapacityChanged } from '../workingGroup/impl/workingGroupModule'
 
 tap.mocha.describe('Set storage working group mint capacity scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const m1KeyPairs: KeyringPair[] = new Array();
-  const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = []
+  const m2KeyPairs: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const K: number = +process.env.COUNCIL_ELECTION_K!;
-  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-  const mintCapacityIncrement: BN = new BN(process.env.MINT_CAPACITY_INCREMENT!);
-  const durationInBlocks: number = 30;
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const K: number = +process.env.COUNCIL_ELECTION_K!
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+  const mintCapacityIncrement: BN = new BN(process.env.MINT_CAPACITY_INCREMENT!)
+  const durationInBlocks = 30
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
-  const sudo: KeyringPair = keyring.addFromUri(sudoUri);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
+  const sudo: KeyringPair = keyring.addFromUri(sudoUri)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
-  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri)
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake)
 
-  let mintCapacityProposalId: BN;
+  let mintCapacityProposalId: BN
   const newMintCapacity: BN = (await apiWrapper.getWorkingGroupMintCapacity(WorkingGroups.storageWorkingGroup)).add(
     mintCapacityIncrement
-  );
+  )
   tap.test(
     'Propose mint capacity',
     async () =>
@@ -53,11 +53,11 @@ tap.mocha.describe('Set storage working group mint capacity scenario', async ()
         newMintCapacity,
         WorkingGroups.storageWorkingGroup
       ))
-  );
+  )
   tap.test('Approve mint capacity', async () => {
-    voteForProposal(apiWrapper, m2KeyPairs, sudo, mintCapacityProposalId);
-    await expectMintCapacityChanged(apiWrapper, newMintCapacity);
-  });
+    voteForProposal(apiWrapper, m2KeyPairs, sudo, mintCapacityProposalId)
+    await expectMintCapacityChanged(apiWrapper, newMintCapacity)
+  })
 
-  closeApi(apiWrapper);
-});
+  closeApi(apiWrapper)
+})

+ 45 - 47
tests/network-tests/src/nicaea/tests/workingGroup/atLeastValueBugTest.ts

@@ -1,12 +1,11 @@
-import tap from 'tap';
-import { initConfig } from '../../utils/config';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper';
-import { WsProvider, Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import { membershipTest } from '../impl/membershipCreation';
+import { initConfig } from '../../utils/config'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper'
+import { WsProvider, Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import { membershipTest } from '../impl/membershipCreation'
 import {
   addWorkerOpening,
   applyForOpening,
@@ -14,39 +13,40 @@ import {
   beginLeaderApplicationReview,
   fillLeaderOpening,
   leaveRole,
-} from './impl/workingGroupModule';
-import BN from 'bn.js';
+} from './impl/workingGroupModule'
+import BN from 'bn.js'
+import tap from 'tap'
 
 tap.mocha.describe('Worker application happy case scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const nKeyPairs: KeyringPair[] = new Array();
-  const leadKeyPair: KeyringPair[] = new Array();
+  const nKeyPairs: KeyringPair[] = []
+  const leadKeyPair: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.WORKING_GROUP_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!);
-  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!);
-  const firstRewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!);
-  const rewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!);
-  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!);
-  const unstakingPeriod: BN = new BN(process.env.STORAGE_WORKING_GROUP_UNSTAKING_PERIOD!);
-  const durationInBlocks: number = 48;
-  const openingActivationDelay: BN = new BN(0);
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.WORKING_GROUP_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!)
+  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!)
+  const firstRewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!)
+  const rewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!)
+  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!)
+  const unstakingPeriod: BN = new BN(process.env.STORAGE_WORKING_GROUP_UNSTAKING_PERIOD!)
+  const durationInBlocks = 48
+  const openingActivationDelay: BN = new BN(0)
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
-  const sudo: KeyringPair = keyring.addFromUri(sudoUri);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
+  const sudo: KeyringPair = keyring.addFromUri(sudoUri)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri);
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri)
 
-  let leadOpenignId: BN;
+  let leadOpenignId: BN
   tap.test(
     'Add lead opening',
     async () =>
@@ -59,7 +59,7 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
         openingActivationDelay,
         WorkingGroups.storageWorkingGroup
       ))
-  );
+  )
   tap.test(
     'Apply for lead opening',
     async () =>
@@ -73,10 +73,10 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       )
-  );
+  )
   tap.test('Begin lead application review', async () =>
     beginLeaderApplicationReview(apiWrapper, sudo, leadOpenignId, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Fill lead opening', async () =>
     fillLeaderOpening(
       apiWrapper,
@@ -88,9 +88,9 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
       payoutAmount,
       WorkingGroups.storageWorkingGroup
     )
-  );
+  )
 
-  let workerOpenignId: BN;
+  let workerOpenignId: BN
   tap.test(
     'Add worker opening with 0 stake, expect failure',
     async () =>
@@ -106,7 +106,7 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         true
       ))
-  );
+  )
   tap.test(
     'Add worker opening with 0 unstaking period, expect failure',
     async () =>
@@ -122,11 +122,9 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         true
       ))
-  );
+  )
 
-  tap.test('Leaving lead role', async () =>
-    leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup)
-  );
+  tap.test('Leaving lead role', async () => leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup))
 
-  closeApi(apiWrapper);
-});
+  closeApi(apiWrapper)
+})

+ 230 - 230
tests/network-tests/src/nicaea/tests/workingGroup/impl/workingGroupModule.ts

@@ -1,15 +1,15 @@
-import BN from 'bn.js';
-import { assert } from 'chai';
-import { ApiWrapper, WorkingGroups } from '../../../utils/apiWrapper';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { Balance } from '@polkadot/types/interfaces';
-import { Keyring } from '@polkadot/api';
-import { v4 as uuid } from 'uuid';
-import { RewardRelationship } from '@nicaea/types/recurring-rewards';
-import { Worker, ApplicationIdToWorkerIdMap, Application } from '@nicaea/types/working-group';
-import { Utils } from '../../../utils/utils';
-import { Opening as HiringOpening } from '@nicaea/types/hiring';
-import { WorkingGroupOpening } from '../../../dto/workingGroupOpening';
+import BN from 'bn.js'
+import { assert } from 'chai'
+import { ApiWrapper, WorkingGroups } from '../../../utils/apiWrapper'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { Balance } from '@polkadot/types/interfaces'
+import { Keyring } from '@polkadot/api'
+import { v4 as uuid } from 'uuid'
+import { RewardRelationship } from '@nicaea/types/recurring-rewards'
+import { Worker, ApplicationIdToWorkerIdMap, Application } from '@nicaea/types/working-group'
+import { Utils } from '../../../utils/utils'
+import { Opening as HiringOpening } from '@nicaea/types/hiring'
+import { WorkingGroupOpening } from '../../../dto/workingGroupOpening'
 
 export async function addWorkerOpening(
   apiWrapper: ApiWrapper,
@@ -24,43 +24,43 @@ export async function addWorkerOpening(
   expectFailure: boolean
 ): Promise<BN> {
   // Worker opening construction
-  const opening = new WorkingGroupOpening();
+  const opening = new WorkingGroupOpening()
   const activateAtBlock: BN | undefined = activationDelay.eqn(0)
     ? undefined
-    : (await apiWrapper.getBestBlock()).add(activationDelay);
-  opening.setActivateAtBlock(activateAtBlock);
-  opening.setMaxActiveApplicants(new BN(membersKeyPairs.length));
-  opening.setMaxReviewPeriodLength(new BN(32));
-  opening.setApplicationStakingPolicyAmount(new BN(applicationStake));
-  opening.setApplicationCrowdedOutUnstakingPeriodLength(new BN(1));
-  opening.setApplicationExpiredUnstakingPeriodLength(new BN(1));
-  opening.setRoleStakingPolicyAmount(new BN(roleStake));
-  opening.setRoleCrowdedOutUnstakingPeriodLength(new BN(1));
-  opening.setRoleExpiredUnstakingPeriodLength(new BN(1));
-  opening.setSlashableMaxCount(new BN(1));
-  opening.setSlashableMaxPercentPtsPerTime(new BN(100));
-  opening.setSuccessfulApplicantApplicationStakeUnstakingPeriod(unstakingPeriod);
-  opening.setFailedApplicantApplicationStakeUnstakingPeriod(unstakingPeriod);
-  opening.setFailedApplicantRoleStakeUnstakingPeriod(unstakingPeriod);
-  opening.setTerminateApplicationStakeUnstakingPeriod(unstakingPeriod);
-  opening.setTerminateRoleStakeUnstakingPeriod(unstakingPeriod);
-  opening.setExitRoleApplicationStakeUnstakingPeriod(unstakingPeriod);
-  opening.setExitRoleStakeUnstakingPeriod(unstakingPeriod);
-  opening.setText(uuid().substring(0, 8));
-  opening.setOpeningType('Worker');
+    : (await apiWrapper.getBestBlock()).add(activationDelay)
+  opening.setActivateAtBlock(activateAtBlock)
+  opening.setMaxActiveApplicants(new BN(membersKeyPairs.length))
+  opening.setMaxReviewPeriodLength(new BN(32))
+  opening.setApplicationStakingPolicyAmount(new BN(applicationStake))
+  opening.setApplicationCrowdedOutUnstakingPeriodLength(new BN(1))
+  opening.setApplicationExpiredUnstakingPeriodLength(new BN(1))
+  opening.setRoleStakingPolicyAmount(new BN(roleStake))
+  opening.setRoleCrowdedOutUnstakingPeriodLength(new BN(1))
+  opening.setRoleExpiredUnstakingPeriodLength(new BN(1))
+  opening.setSlashableMaxCount(new BN(1))
+  opening.setSlashableMaxPercentPtsPerTime(new BN(100))
+  opening.setSuccessfulApplicantApplicationStakeUnstakingPeriod(unstakingPeriod)
+  opening.setFailedApplicantApplicationStakeUnstakingPeriod(unstakingPeriod)
+  opening.setFailedApplicantRoleStakeUnstakingPeriod(unstakingPeriod)
+  opening.setTerminateApplicationStakeUnstakingPeriod(unstakingPeriod)
+  opening.setTerminateRoleStakeUnstakingPeriod(unstakingPeriod)
+  opening.setExitRoleApplicationStakeUnstakingPeriod(unstakingPeriod)
+  opening.setExitRoleStakeUnstakingPeriod(unstakingPeriod)
+  opening.setText(uuid().substring(0, 8))
+  opening.setOpeningType('Worker')
 
   // Fee estimation and transfer
-  const addOpeningFee: BN = apiWrapper.estimateAddOpeningFee(opening, module);
-  await apiWrapper.transferBalance(sudo, lead.address, addOpeningFee);
+  const addOpeningFee: BN = apiWrapper.estimateAddOpeningFee(opening, module)
+  await apiWrapper.transferBalance(sudo, lead.address, addOpeningFee)
 
   // Worker opening creation
-  const addOpeningPromise: Promise<BN> = apiWrapper.expectOpeningAdded();
-  await apiWrapper.addOpening(lead, opening, module, expectFailure);
+  const addOpeningPromise: Promise<BN> = apiWrapper.expectOpeningAdded()
+  await apiWrapper.addOpening(lead, opening, module, expectFailure)
   if (!expectFailure) {
-    const openingId: BN = await addOpeningPromise;
-    return openingId;
+    const openingId: BN = await addOpeningPromise
+    return openingId
   }
-  return new BN(-1);
+  return new BN(-1)
 }
 
 export async function addLeaderOpening(
@@ -75,34 +75,34 @@ export async function addLeaderOpening(
   // Leader opening creation
   const activateAtBlock: BN | undefined = activationDelay.eqn(0)
     ? undefined
-    : (await apiWrapper.getBestBlock()).add(activationDelay);
-  const opening = new WorkingGroupOpening();
-  opening.setActivateAtBlock(activateAtBlock);
-  opening.setMaxActiveApplicants(new BN(membersKeyPairs.length));
-  opening.setMaxReviewPeriodLength(new BN(32));
-  opening.setApplicationStakingPolicyAmount(new BN(applicationStake));
-  opening.setApplicationCrowdedOutUnstakingPeriodLength(new BN(1));
-  opening.setApplicationExpiredUnstakingPeriodLength(new BN(1));
-  opening.setRoleStakingPolicyAmount(new BN(roleStake));
-  opening.setRoleCrowdedOutUnstakingPeriodLength(new BN(1));
-  opening.setRoleExpiredUnstakingPeriodLength(new BN(1));
-  opening.setSlashableMaxCount(new BN(1));
-  opening.setSlashableMaxPercentPtsPerTime(new BN(100));
-  opening.setSuccessfulApplicantApplicationStakeUnstakingPeriod(new BN(1));
-  opening.setFailedApplicantApplicationStakeUnstakingPeriod(new BN(1));
-  opening.setFailedApplicantRoleStakeUnstakingPeriod(new BN(1));
-  opening.setTerminateApplicationStakeUnstakingPeriod(new BN(1));
-  opening.setTerminateRoleStakeUnstakingPeriod(new BN(1));
-  opening.setExitRoleApplicationStakeUnstakingPeriod(new BN(1));
-  opening.setExitRoleStakeUnstakingPeriod(new BN(1));
-  opening.setText(uuid().substring(0, 8));
-  opening.setOpeningType('leader');
-
-  const addOpeningPromise: Promise<BN> = apiWrapper.expectOpeningAdded();
-  await apiWrapper.sudoAddOpening(sudo, opening, module);
-  const openingId: BN = await addOpeningPromise;
-
-  return openingId;
+    : (await apiWrapper.getBestBlock()).add(activationDelay)
+  const opening = new WorkingGroupOpening()
+  opening.setActivateAtBlock(activateAtBlock)
+  opening.setMaxActiveApplicants(new BN(membersKeyPairs.length))
+  opening.setMaxReviewPeriodLength(new BN(32))
+  opening.setApplicationStakingPolicyAmount(new BN(applicationStake))
+  opening.setApplicationCrowdedOutUnstakingPeriodLength(new BN(1))
+  opening.setApplicationExpiredUnstakingPeriodLength(new BN(1))
+  opening.setRoleStakingPolicyAmount(new BN(roleStake))
+  opening.setRoleCrowdedOutUnstakingPeriodLength(new BN(1))
+  opening.setRoleExpiredUnstakingPeriodLength(new BN(1))
+  opening.setSlashableMaxCount(new BN(1))
+  opening.setSlashableMaxPercentPtsPerTime(new BN(100))
+  opening.setSuccessfulApplicantApplicationStakeUnstakingPeriod(new BN(1))
+  opening.setFailedApplicantApplicationStakeUnstakingPeriod(new BN(1))
+  opening.setFailedApplicantRoleStakeUnstakingPeriod(new BN(1))
+  opening.setTerminateApplicationStakeUnstakingPeriod(new BN(1))
+  opening.setTerminateRoleStakeUnstakingPeriod(new BN(1))
+  opening.setExitRoleApplicationStakeUnstakingPeriod(new BN(1))
+  opening.setExitRoleStakeUnstakingPeriod(new BN(1))
+  opening.setText(uuid().substring(0, 8))
+  opening.setOpeningType('leader')
+
+  const addOpeningPromise: Promise<BN> = apiWrapper.expectOpeningAdded()
+  await apiWrapper.sudoAddOpening(sudo, opening, module)
+  const openingId: BN = await addOpeningPromise
+
+  return openingId
 }
 
 export async function acceptApplications(
@@ -113,14 +113,14 @@ export async function acceptApplications(
   module: WorkingGroups
 ) {
   // Fee estimation and transfer
-  const acceptApplicationsFee = apiWrapper.estimateAcceptApplicationsFee(module);
-  await apiWrapper.transferBalance(sudo, lead.address, acceptApplicationsFee);
+  const acceptApplicationsFee = apiWrapper.estimateAcceptApplicationsFee(module)
+  await apiWrapper.transferBalance(sudo, lead.address, acceptApplicationsFee)
 
   // Begin accepting applications
-  await apiWrapper.acceptApplications(lead, openingId, module);
+  await apiWrapper.acceptApplications(lead, openingId, module)
 
-  const opening: HiringOpening = await apiWrapper.getHiringOpening(openingId);
-  assert(opening.is_active, `Opening ${openingId} is not active`);
+  const opening: HiringOpening = await apiWrapper.getHiringOpening(openingId)
+  assert(opening.is_active, `Opening ${openingId} is not active`)
 }
 
 export async function applyForOpening(
@@ -134,8 +134,8 @@ export async function applyForOpening(
   expectFailure: boolean
 ): Promise<void> {
   // Fee estimation and transfer
-  const applyOnOpeningFee: BN = apiWrapper.estimateApplyOnOpeningFee(sudo, module).add(applicationStake).add(roleStake);
-  await apiWrapper.transferBalanceToAccounts(sudo, membersKeyPairs, applyOnOpeningFee);
+  const applyOnOpeningFee: BN = apiWrapper.estimateApplyOnOpeningFee(sudo, module).add(applicationStake).add(roleStake)
+  await apiWrapper.transferBalanceToAccounts(sudo, membersKeyPairs, applyOnOpeningFee)
 
   // Applying for created worker opening
   await apiWrapper.batchApplyOnOpening(
@@ -146,7 +146,7 @@ export async function applyForOpening(
     uuid().substring(0, 8),
     module,
     expectFailure
-  );
+  )
 }
 
 export async function withdrawApplicaiton(
@@ -156,17 +156,17 @@ export async function withdrawApplicaiton(
   module: WorkingGroups
 ) {
   // Fee estimation and transfer
-  const withdrawApplicaitonFee: BN = apiWrapper.estimateWithdrawApplicationFee(module);
-  await apiWrapper.transferBalanceToAccounts(sudo, membersKeyPairs, withdrawApplicaitonFee);
+  const withdrawApplicaitonFee: BN = apiWrapper.estimateWithdrawApplicationFee(module)
+  await apiWrapper.transferBalanceToAccounts(sudo, membersKeyPairs, withdrawApplicaitonFee)
 
   // Application withdrawal
-  await apiWrapper.batchWithdrawApplication(membersKeyPairs, module);
+  await apiWrapper.batchWithdrawApplication(membersKeyPairs, module)
 
   // Assertions
-  membersKeyPairs.forEach(async keyPair => {
-    const activeApplications: BN[] = await apiWrapper.getActiveApplicationsIdsByRoleAccount(keyPair.address, module);
-    assert(activeApplications.length === 0, `Unexpected active application found for ${keyPair.address}`);
-  });
+  membersKeyPairs.forEach(async (keyPair) => {
+    const activeApplications: BN[] = await apiWrapper.getActiveApplicationsIdsByRoleAccount(keyPair.address, module)
+    assert(activeApplications.length === 0, `Unexpected active application found for ${keyPair.address}`)
+  })
 }
 
 export async function beginApplicationReview(
@@ -177,13 +177,13 @@ export async function beginApplicationReview(
   module: WorkingGroups
 ) {
   // Fee estimation and transfer
-  const beginReviewFee: BN = apiWrapper.estimateBeginApplicantReviewFee(module);
-  await apiWrapper.transferBalance(sudo, lead.address, beginReviewFee);
+  const beginReviewFee: BN = apiWrapper.estimateBeginApplicantReviewFee(module)
+  await apiWrapper.transferBalance(sudo, lead.address, beginReviewFee)
 
   // Begin application review
-  const beginApplicantReviewPromise: Promise<BN> = apiWrapper.expectApplicationReviewBegan();
-  await apiWrapper.beginApplicantReview(lead, openingId, module);
-  await beginApplicantReviewPromise;
+  const beginApplicantReviewPromise: Promise<BN> = apiWrapper.expectApplicationReviewBegan()
+  await apiWrapper.beginApplicantReview(lead, openingId, module)
+  await beginApplicantReviewPromise
 }
 
 export async function beginLeaderApplicationReview(
@@ -193,7 +193,7 @@ export async function beginLeaderApplicationReview(
   module: WorkingGroups
 ) {
   // Begin application review
-  await apiWrapper.sudoBeginApplicantReview(sudo, openingId, module);
+  await apiWrapper.sudoBeginApplicantReview(sudo, openingId, module)
 }
 
 export async function fillOpening(
@@ -208,17 +208,17 @@ export async function fillOpening(
   module: WorkingGroups
 ) {
   // Fee estimation and transfer
-  const beginReviewFee: BN = apiWrapper.estimateBeginApplicantReviewFee(module);
-  await apiWrapper.transferBalance(sudo, lead.address, beginReviewFee);
+  const beginReviewFee: BN = apiWrapper.estimateBeginApplicantReviewFee(module)
+  await apiWrapper.transferBalance(sudo, lead.address, beginReviewFee)
   const applicationIds: BN[] = (
     await Promise.all(
-      membersKeyPairs.map(async keypair => apiWrapper.getActiveApplicationsIdsByRoleAccount(keypair.address, module))
+      membersKeyPairs.map(async (keypair) => apiWrapper.getActiveApplicationsIdsByRoleAccount(keypair.address, module))
     )
-  ).flat();
+  ).flat()
 
   // Fill worker opening
-  const now: BN = await apiWrapper.getBestBlock();
-  const fillOpeningPromise: Promise<ApplicationIdToWorkerIdMap> = apiWrapper.expectOpeningFilled();
+  const now: BN = await apiWrapper.getBestBlock()
+  const fillOpeningPromise: Promise<ApplicationIdToWorkerIdMap> = apiWrapper.expectOpeningFilled()
   await apiWrapper.fillOpening(
     lead,
     openingId,
@@ -227,24 +227,24 @@ export async function fillOpening(
     now.add(firstPayoutInterval),
     payoutInterval,
     module
-  );
-  const applicationIdToWorkerIdMap: ApplicationIdToWorkerIdMap = await fillOpeningPromise;
+  )
+  const applicationIdToWorkerIdMap: ApplicationIdToWorkerIdMap = await fillOpeningPromise
 
   // Assertions
   applicationIdToWorkerIdMap.forEach(async (workerId, applicationId) => {
-    const worker: Worker = await apiWrapper.getWorkerById(workerId, module);
-    const application: Application = await apiWrapper.getApplicationById(applicationId, module);
+    const worker: Worker = await apiWrapper.getWorkerById(workerId, module)
+    const application: Application = await apiWrapper.getApplicationById(applicationId, module)
     assert(
       worker.role_account_id.toString() === application.role_account_id.toString(),
       `Role account ids does not match, worker account: ${worker.role_account_id}, application account ${application.role_account_id}`
-    );
-  });
-  const openingWorkersAccounts: string[] = (await apiWrapper.getWorkers(module)).map(worker =>
+    )
+  })
+  const openingWorkersAccounts: string[] = (await apiWrapper.getWorkers(module)).map((worker) =>
     worker.role_account_id.toString()
-  );
-  membersKeyPairs.forEach(keyPair =>
+  )
+  membersKeyPairs.forEach((keyPair) =>
     assert(openingWorkersAccounts.includes(keyPair.address), `Account ${keyPair.address} is not worker`)
-  );
+  )
 }
 
 export async function fillLeaderOpening(
@@ -259,13 +259,13 @@ export async function fillLeaderOpening(
 ) {
   const applicationIds: BN[] = (
     await Promise.all(
-      membersKeyPairs.map(async keypair => apiWrapper.getActiveApplicationsIdsByRoleAccount(keypair.address, module))
+      membersKeyPairs.map(async (keypair) => apiWrapper.getActiveApplicationsIdsByRoleAccount(keypair.address, module))
     )
-  ).flat();
+  ).flat()
 
   // Fill leader opening
-  const now: BN = await apiWrapper.getBestBlock();
-  const fillOpeningPromise: Promise<ApplicationIdToWorkerIdMap> = apiWrapper.expectOpeningFilled();
+  const now: BN = await apiWrapper.getBestBlock()
+  const fillOpeningPromise: Promise<ApplicationIdToWorkerIdMap> = apiWrapper.expectOpeningFilled()
   await apiWrapper.sudoFillOpening(
     sudo,
     openingId,
@@ -274,18 +274,18 @@ export async function fillLeaderOpening(
     now.add(firstPayoutInterval),
     payoutInterval,
     module
-  );
+  )
 
   // Assertions
-  const applicationIdToWorkerIdMap: ApplicationIdToWorkerIdMap = await fillOpeningPromise;
+  const applicationIdToWorkerIdMap: ApplicationIdToWorkerIdMap = await fillOpeningPromise
   applicationIdToWorkerIdMap.forEach(async (workerId, applicationId) => {
-    const worker: Worker = await apiWrapper.getWorkerById(workerId, module);
-    const application: Application = await apiWrapper.getApplicationById(applicationId, module);
+    const worker: Worker = await apiWrapper.getWorkerById(workerId, module)
+    const application: Application = await apiWrapper.getApplicationById(applicationId, module)
     assert(
       worker.role_account_id.toString() === application.role_account_id.toString(),
       `Role account ids does not match, leader account: ${worker.role_account_id}, application account ${application.role_account_id}`
-    );
-  });
+    )
+  })
 }
 
 export async function increaseStake(
@@ -295,19 +295,19 @@ export async function increaseStake(
   module: WorkingGroups
 ) {
   // Fee estimation and transfer
-  const increaseStakeFee: BN = apiWrapper.estimateIncreaseStakeFee(module);
-  const stakeIncrement: BN = new BN(1);
-  await apiWrapper.transferBalance(sudo, membersKeyPairs[0].address, increaseStakeFee.add(stakeIncrement));
-  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module);
+  const increaseStakeFee: BN = apiWrapper.estimateIncreaseStakeFee(module)
+  const stakeIncrement: BN = new BN(1)
+  await apiWrapper.transferBalance(sudo, membersKeyPairs[0].address, increaseStakeFee.add(stakeIncrement))
+  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module)
 
   // Increase worker stake
-  const increasedWorkerStake: BN = (await apiWrapper.getWorkerStakeAmount(workerId, module)).add(stakeIncrement);
-  await apiWrapper.increaseStake(membersKeyPairs[0], workerId, stakeIncrement, module);
-  const newWorkerStake: BN = await apiWrapper.getWorkerStakeAmount(workerId, module);
+  const increasedWorkerStake: BN = (await apiWrapper.getWorkerStakeAmount(workerId, module)).add(stakeIncrement)
+  await apiWrapper.increaseStake(membersKeyPairs[0], workerId, stakeIncrement, module)
+  const newWorkerStake: BN = await apiWrapper.getWorkerStakeAmount(workerId, module)
   assert(
     increasedWorkerStake.eq(newWorkerStake),
     `Unexpected worker stake ${newWorkerStake}, expected ${increasedWorkerStake}`
-  );
+  )
 }
 
 export async function updateRewardAccount(
@@ -318,18 +318,18 @@ export async function updateRewardAccount(
   module: WorkingGroups
 ) {
   // Fee estimation and transfer
-  const updateRewardAccountFee: BN = apiWrapper.estimateUpdateRewardAccountFee(sudo.address, module);
-  await apiWrapper.transferBalance(sudo, membersKeyPairs[0].address, updateRewardAccountFee);
-  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module);
+  const updateRewardAccountFee: BN = apiWrapper.estimateUpdateRewardAccountFee(sudo.address, module)
+  await apiWrapper.transferBalance(sudo, membersKeyPairs[0].address, updateRewardAccountFee)
+  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module)
 
   // Update reward account
-  const createdAccount: KeyringPair = keyring.addFromUri(uuid().substring(0, 8));
-  await apiWrapper.updateRewardAccount(membersKeyPairs[0], workerId, createdAccount.address, module);
-  const newRewardAccount: string = await apiWrapper.getWorkerRewardAccount(workerId, module);
+  const createdAccount: KeyringPair = keyring.addFromUri(uuid().substring(0, 8))
+  await apiWrapper.updateRewardAccount(membersKeyPairs[0], workerId, createdAccount.address, module)
+  const newRewardAccount: string = await apiWrapper.getWorkerRewardAccount(workerId, module)
   assert(
     newRewardAccount === createdAccount.address,
     `Unexpected role account ${newRewardAccount}, expected ${createdAccount.address}`
-  );
+  )
 }
 
 export async function updateRoleAccount(
@@ -340,20 +340,20 @@ export async function updateRoleAccount(
   module: WorkingGroups
 ) {
   // Fee estimation and transfer
-  const updateRoleAccountFee: BN = apiWrapper.estimateUpdateRoleAccountFee(sudo.address, module);
-  await apiWrapper.transferBalance(sudo, membersKeyPairs[0].address, updateRoleAccountFee);
-  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module);
+  const updateRoleAccountFee: BN = apiWrapper.estimateUpdateRoleAccountFee(sudo.address, module)
+  await apiWrapper.transferBalance(sudo, membersKeyPairs[0].address, updateRoleAccountFee)
+  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module)
 
   // Update role account
-  const createdAccount: KeyringPair = keyring.addFromUri(uuid().substring(0, 8));
-  await apiWrapper.updateRoleAccount(membersKeyPairs[0], workerId, createdAccount.address, module);
-  const newRoleAccount: string = (await apiWrapper.getWorkerById(workerId, module)).role_account_id.toString();
+  const createdAccount: KeyringPair = keyring.addFromUri(uuid().substring(0, 8))
+  await apiWrapper.updateRoleAccount(membersKeyPairs[0], workerId, createdAccount.address, module)
+  const newRoleAccount: string = (await apiWrapper.getWorkerById(workerId, module)).role_account_id.toString()
   assert(
     newRoleAccount === createdAccount.address,
     `Unexpected role account ${newRoleAccount}, expected ${createdAccount.address}`
-  );
+  )
 
-  membersKeyPairs[0] = createdAccount;
+  membersKeyPairs[0] = createdAccount
 }
 
 export async function terminateApplications(
@@ -364,15 +364,15 @@ export async function terminateApplications(
   module: WorkingGroups
 ) {
   // Fee estimation and transfer
-  const terminateApplicationFee = apiWrapper.estimateTerminateApplicationFee(module);
-  await apiWrapper.transferBalance(sudo, lead.address, terminateApplicationFee.muln(membersKeyPairs.length));
+  const terminateApplicationFee = apiWrapper.estimateTerminateApplicationFee(module)
+  await apiWrapper.transferBalance(sudo, lead.address, terminateApplicationFee.muln(membersKeyPairs.length))
 
   // Terminate worker applications
-  await apiWrapper.batchTerminateApplication(lead, membersKeyPairs, module);
-  membersKeyPairs.forEach(async keyPair => {
-    const activeApplications = await apiWrapper.getActiveApplicationsIdsByRoleAccount(keyPair.address, module);
-    assert(activeApplications.length === 0, `Account ${keyPair.address} has unexpected active applications`);
-  });
+  await apiWrapper.batchTerminateApplication(lead, membersKeyPairs, module)
+  membersKeyPairs.forEach(async (keyPair) => {
+    const activeApplications = await apiWrapper.getActiveApplicationsIdsByRoleAccount(keyPair.address, module)
+    assert(activeApplications.length === 0, `Account ${keyPair.address} has unexpected active applications`)
+  })
 }
 
 export async function decreaseStake(
@@ -384,22 +384,22 @@ export async function decreaseStake(
   expectFailure: boolean
 ) {
   // Fee estimation and transfer
-  const decreaseStakeFee = apiWrapper.estimateDecreaseStakeFee(module);
-  await apiWrapper.transferBalance(sudo, lead.address, decreaseStakeFee);
-  const workerStakeDecrement = new BN(1);
-  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module);
+  const decreaseStakeFee = apiWrapper.estimateDecreaseStakeFee(module)
+  await apiWrapper.transferBalance(sudo, lead.address, decreaseStakeFee)
+  const workerStakeDecrement = new BN(1)
+  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module)
 
   // Worker stake decrement
-  const decreasedWorkerStake: BN = (await apiWrapper.getWorkerStakeAmount(workerId, module)).sub(workerStakeDecrement);
-  await apiWrapper.decreaseStake(lead, workerId, workerStakeDecrement, module, expectFailure);
-  const newWorkerStake: BN = await apiWrapper.getWorkerStakeAmount(workerId, module);
+  const decreasedWorkerStake: BN = (await apiWrapper.getWorkerStakeAmount(workerId, module)).sub(workerStakeDecrement)
+  await apiWrapper.decreaseStake(lead, workerId, workerStakeDecrement, module, expectFailure)
+  const newWorkerStake: BN = await apiWrapper.getWorkerStakeAmount(workerId, module)
 
   // Assertions
   if (!expectFailure) {
     assert(
       decreasedWorkerStake.eq(newWorkerStake),
       `Unexpected worker stake ${newWorkerStake}, expected ${decreasedWorkerStake}`
-    );
+    )
   }
 }
 
@@ -412,18 +412,18 @@ export async function slash(
   expectFailure: boolean
 ) {
   // Fee estimation and transfer
-  const slashStakeFee = apiWrapper.estimateSlashStakeFee(module);
-  await apiWrapper.transferBalance(sudo, lead.address, slashStakeFee);
-  const slashAmount = new BN(1);
-  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module);
+  const slashStakeFee = apiWrapper.estimateSlashStakeFee(module)
+  await apiWrapper.transferBalance(sudo, lead.address, slashStakeFee)
+  const slashAmount = new BN(1)
+  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module)
 
   // Slash worker
-  const slashedStake: BN = (await apiWrapper.getWorkerStakeAmount(workerId, module)).sub(slashAmount);
-  await apiWrapper.slashStake(lead, workerId, slashAmount, module, expectFailure);
-  const newStake: BN = await apiWrapper.getWorkerStakeAmount(workerId, module);
+  const slashedStake: BN = (await apiWrapper.getWorkerStakeAmount(workerId, module)).sub(slashAmount)
+  await apiWrapper.slashStake(lead, workerId, slashAmount, module, expectFailure)
+  const newStake: BN = await apiWrapper.getWorkerStakeAmount(workerId, module)
 
   // Assertions
-  assert(slashedStake.eq(newStake), `Unexpected worker stake ${newStake}, expected ${slashedStake}`);
+  assert(slashedStake.eq(newStake), `Unexpected worker stake ${newStake}, expected ${slashedStake}`)
 }
 
 export async function terminateRole(
@@ -435,17 +435,17 @@ export async function terminateRole(
   expectFailure: boolean
 ) {
   // Fee estimation and transfer
-  const terminateRoleFee = apiWrapper.estimateTerminateRoleFee(module);
-  await apiWrapper.transferBalance(sudo, lead.address, terminateRoleFee);
-  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module);
+  const terminateRoleFee = apiWrapper.estimateTerminateRoleFee(module)
+  await apiWrapper.transferBalance(sudo, lead.address, terminateRoleFee)
+  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module)
 
   // Slash worker
-  await apiWrapper.terminateRole(lead, workerId, uuid().substring(0, 8), module, expectFailure);
+  await apiWrapper.terminateRole(lead, workerId, uuid().substring(0, 8), module, expectFailure)
 
   // Assertions
-  apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module);
-  const newWorkerId = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module);
-  assert(newWorkerId === undefined, `Worker with account ${membersKeyPairs[0].address} is not terminated`);
+  apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module)
+  const newWorkerId = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module)
+  assert(newWorkerId === undefined, `Worker with account ${membersKeyPairs[0].address} is not terminated`)
 }
 
 export async function leaveRole(
@@ -455,58 +455,58 @@ export async function leaveRole(
   module: WorkingGroups
 ) {
   // Fee estimation and transfer
-  const leaveRoleFee = apiWrapper.estimateLeaveRoleFee(module);
-  await apiWrapper.transferBalanceToAccounts(sudo, membersKeyPairs, leaveRoleFee);
+  const leaveRoleFee = apiWrapper.estimateLeaveRoleFee(module)
+  await apiWrapper.transferBalanceToAccounts(sudo, membersKeyPairs, leaveRoleFee)
 
-  await apiWrapper.batchLeaveRole(membersKeyPairs, uuid().substring(0, 8), false, module);
+  await apiWrapper.batchLeaveRole(membersKeyPairs, uuid().substring(0, 8), false, module)
 
   // Assertions
-  membersKeyPairs.forEach(async keyPair => {
-    apiWrapper.getWorkerIdByRoleAccount(keyPair.address, module);
-    const newWorkerId = await apiWrapper.getWorkerIdByRoleAccount(keyPair.address, module);
-    assert(newWorkerId === undefined, `Worker with account ${keyPair.address} is not terminated`);
-  });
+  membersKeyPairs.forEach(async (keyPair) => {
+    apiWrapper.getWorkerIdByRoleAccount(keyPair.address, module)
+    const newWorkerId = await apiWrapper.getWorkerIdByRoleAccount(keyPair.address, module)
+    assert(newWorkerId === undefined, `Worker with account ${keyPair.address} is not terminated`)
+  })
 }
 
 export async function awaitPayout(apiWrapper: ApiWrapper, membersKeyPairs: KeyringPair[], module: WorkingGroups) {
-  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module);
-  const worker: Worker = await apiWrapper.getWorkerById(workerId, module);
-  const reward: RewardRelationship = await apiWrapper.getRewardRelationship(worker.reward_relationship.unwrap());
-  const now: BN = await apiWrapper.getBestBlock();
-  const nextPaymentBlock: BN = new BN(reward.getField('next_payment_at_block').toString());
-  const payoutInterval: BN = new BN(reward.getField('payout_interval').toString());
-  const amountPerPayout: BN = new BN(reward.getField('amount_per_payout').toString());
-
-  assert(now.lt(nextPaymentBlock), `Payout already happened in block ${nextPaymentBlock} now ${now}`);
-  const balance = await apiWrapper.getBalance(membersKeyPairs[0].address);
-
-  const firstPayoutWaitingPeriod = nextPaymentBlock.sub(now).addn(1);
-  await Utils.wait(apiWrapper.getBlockDuration().mul(firstPayoutWaitingPeriod).toNumber());
-
-  const balanceAfterFirstPayout = await apiWrapper.getBalance(membersKeyPairs[0].address);
-  const expectedBalanceFirst = balance.add(amountPerPayout);
+  const workerId: BN = await apiWrapper.getWorkerIdByRoleAccount(membersKeyPairs[0].address, module)
+  const worker: Worker = await apiWrapper.getWorkerById(workerId, module)
+  const reward: RewardRelationship = await apiWrapper.getRewardRelationship(worker.reward_relationship.unwrap())
+  const now: BN = await apiWrapper.getBestBlock()
+  const nextPaymentBlock: BN = new BN(reward.getField('next_payment_at_block').toString())
+  const payoutInterval: BN = new BN(reward.getField('payout_interval').toString())
+  const amountPerPayout: BN = new BN(reward.getField('amount_per_payout').toString())
+
+  assert(now.lt(nextPaymentBlock), `Payout already happened in block ${nextPaymentBlock} now ${now}`)
+  const balance = await apiWrapper.getBalance(membersKeyPairs[0].address)
+
+  const firstPayoutWaitingPeriod = nextPaymentBlock.sub(now).addn(1)
+  await Utils.wait(apiWrapper.getBlockDuration().mul(firstPayoutWaitingPeriod).toNumber())
+
+  const balanceAfterFirstPayout = await apiWrapper.getBalance(membersKeyPairs[0].address)
+  const expectedBalanceFirst = balance.add(amountPerPayout)
   assert(
     balanceAfterFirstPayout.eq(expectedBalanceFirst),
     `Unexpected balance, expected ${expectedBalanceFirst} got ${balanceAfterFirstPayout}`
-  );
+  )
 
-  const secondPayoutWaitingPeriod = payoutInterval.addn(1);
-  await Utils.wait(apiWrapper.getBlockDuration().mul(secondPayoutWaitingPeriod).toNumber());
+  const secondPayoutWaitingPeriod = payoutInterval.addn(1)
+  await Utils.wait(apiWrapper.getBlockDuration().mul(secondPayoutWaitingPeriod).toNumber())
 
-  const balanceAfterSecondPayout = await apiWrapper.getBalance(membersKeyPairs[0].address);
-  const expectedBalanceSecond = expectedBalanceFirst.add(amountPerPayout);
+  const balanceAfterSecondPayout = await apiWrapper.getBalance(membersKeyPairs[0].address)
+  const expectedBalanceSecond = expectedBalanceFirst.add(amountPerPayout)
   assert(
     balanceAfterSecondPayout.eq(expectedBalanceSecond),
     `Unexpected balance, expected ${expectedBalanceSecond} got ${balanceAfterSecondPayout}`
-  );
+  )
 }
 
 export async function setMintCapacity(apiWrapper: ApiWrapper, sudo: KeyringPair, capacity: BN, module: WorkingGroups) {
-  await apiWrapper.sudoSetWorkingGroupMintCapacity(sudo, capacity, module);
+  await apiWrapper.sudoSetWorkingGroupMintCapacity(sudo, capacity, module)
 }
 
 export async function expectLeadOpeningAdded(apiWrapper: ApiWrapper): Promise<BN> {
-  return apiWrapper.expectOpeningAdded();
+  return apiWrapper.expectOpeningAdded()
 }
 
 export async function expectLeaderSet(
@@ -514,26 +514,26 @@ export async function expectLeaderSet(
   leaderAddress: string,
   module: WorkingGroups
 ): Promise<BN> {
-  const leadWorkerId: BN = await apiWrapper.expectLeaderSet();
-  const worker: Worker = await apiWrapper.getWorkerById(leadWorkerId, module);
-  const leaderApplicationId = (await apiWrapper.getApplicationsIdsByRoleAccount(leaderAddress, module))[0];
-  const application: Application = await apiWrapper.getApplicationById(leaderApplicationId, module);
+  const leadWorkerId: BN = await apiWrapper.expectLeaderSet()
+  const worker: Worker = await apiWrapper.getWorkerById(leadWorkerId, module)
+  const leaderApplicationId = (await apiWrapper.getApplicationsIdsByRoleAccount(leaderAddress, module))[0]
+  const application: Application = await apiWrapper.getApplicationById(leaderApplicationId, module)
   assert(
     worker.role_account_id.toString() === application.role_account_id.toString(),
     `Role account ids does not match, leader account: ${worker.role_account_id}, application account ${application.role_account_id}`
-  );
-  return leadWorkerId;
+  )
+  return leadWorkerId
 }
 
 export async function expectBeganApplicationReview(apiWrapper: ApiWrapper): Promise<BN> {
-  return apiWrapper.expectApplicationReviewBegan();
+  return apiWrapper.expectApplicationReviewBegan()
 }
 
 export async function expectLeaderRoleTerminated(apiWrapper: ApiWrapper, module: WorkingGroups): Promise<void> {
-  await apiWrapper.expectLeaderTerminated();
-  const leadWorkerId: BN | undefined = await apiWrapper.getLeadWorkerId(module);
-  assert(leadWorkerId === undefined, `Unexpected lead worker id: ${leadWorkerId}, expected none`);
-  return;
+  await apiWrapper.expectLeaderTerminated()
+  const leadWorkerId: BN | undefined = await apiWrapper.getLeadWorkerId(module)
+  assert(leadWorkerId === undefined, `Unexpected lead worker id: ${leadWorkerId}, expected none`)
+  return
 }
 
 export async function expectLeaderRewardAmountUpdated(
@@ -541,16 +541,16 @@ export async function expectLeaderRewardAmountUpdated(
   expectedReward: BN,
   module: WorkingGroups
 ): Promise<void> {
-  await apiWrapper.expectWorkerRewardAmountUpdated();
-  const leadWorkerId: BN = (await apiWrapper.getLeadWorkerId(module))!;
+  await apiWrapper.expectWorkerRewardAmountUpdated()
+  const leadWorkerId: BN = (await apiWrapper.getLeadWorkerId(module))!
   const receivedReward: BN = (await apiWrapper.getRewardRelationship(leadWorkerId)).getField<Balance>(
     'amount_per_payout'
-  );
+  )
   assert(
     receivedReward.eq(expectedReward),
     `Unexpected reward amount for worker with id ${leadWorkerId}: ${receivedReward}, expected ${expectedReward}`
-  );
-  return;
+  )
+  return
 }
 
 export async function expectLeaderStakeDecreased(
@@ -558,14 +558,14 @@ export async function expectLeaderStakeDecreased(
   expectedStake: BN,
   module: WorkingGroups
 ): Promise<void> {
-  await apiWrapper.expectWorkerStakeDecreased();
-  const leadWorkerId: BN = (await apiWrapper.getLeadWorkerId(module))!;
-  const receivedStake: BN = await apiWrapper.getWorkerStakeAmount(leadWorkerId, module);
+  await apiWrapper.expectWorkerStakeDecreased()
+  const leadWorkerId: BN = (await apiWrapper.getLeadWorkerId(module))!
+  const receivedStake: BN = await apiWrapper.getWorkerStakeAmount(leadWorkerId, module)
   assert(
     receivedStake.eq(expectedStake),
     `Unexpected stake amount for worker with id ${leadWorkerId}: ${receivedStake}, expected ${expectedStake}`
-  );
-  return;
+  )
+  return
 }
 
 export async function expectLeaderSlashed(
@@ -573,21 +573,21 @@ export async function expectLeaderSlashed(
   expectedStake: BN,
   module: WorkingGroups
 ): Promise<void> {
-  await apiWrapper.expectWorkerStakeSlashed();
-  const leadWorkerId: BN = (await apiWrapper.getLeadWorkerId(module))!;
-  const receivedStake: BN = await apiWrapper.getWorkerStakeAmount(leadWorkerId, module);
+  await apiWrapper.expectWorkerStakeSlashed()
+  const leadWorkerId: BN = (await apiWrapper.getLeadWorkerId(module))!
+  const receivedStake: BN = await apiWrapper.getWorkerStakeAmount(leadWorkerId, module)
   assert(
     receivedStake.eq(expectedStake),
     `Unexpected stake amount for worker with id after slash ${leadWorkerId}: ${receivedStake}, expected ${expectedStake}`
-  );
-  return;
+  )
+  return
 }
 
 export async function expectMintCapacityChanged(apiWrapper: ApiWrapper, expectedMintCapacity: BN): Promise<void> {
-  const receivedMintCapacity = await apiWrapper.expectMintCapacityChanged();
+  const receivedMintCapacity = await apiWrapper.expectMintCapacityChanged()
   assert(
     receivedMintCapacity.eq(expectedMintCapacity),
     `Unexpected mint capacity: ${receivedMintCapacity}, expected ${expectedMintCapacity}`
-  );
-  return;
+  )
+  return
 }

+ 56 - 60
tests/network-tests/src/nicaea/tests/workingGroup/manageWorkerAsLeadTest.ts

@@ -1,12 +1,11 @@
-import tap = require('tap');
-import { initConfig } from '../../utils/config';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper';
-import { WsProvider, Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import { membershipTest } from '../impl/membershipCreation';
+import { initConfig } from '../../utils/config'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper'
+import { WsProvider, Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import { membershipTest } from '../impl/membershipCreation'
 import {
   addWorkerOpening,
   applyForOpening,
@@ -19,39 +18,40 @@ import {
   beginLeaderApplicationReview,
   fillLeaderOpening,
   leaveRole,
-} from './impl/workingGroupModule';
-import BN from 'bn.js';
+} from './impl/workingGroupModule'
+import BN from 'bn.js'
+import tap = require('tap')
 
 tap.mocha.describe('Manage worker as worker scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const nKeyPairs: KeyringPair[] = new Array();
-  const leadKeyPair: KeyringPair[] = new Array();
+  const nKeyPairs: KeyringPair[] = []
+  const leadKeyPair: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.WORKING_GROUP_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!);
-  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!);
-  const firstRewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!);
-  const rewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!);
-  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!);
-  const unstakingPeriod: BN = new BN(process.env.STORAGE_WORKING_GROUP_UNSTAKING_PERIOD!);
-  const durationInBlocks: number = 60;
-  const openingActivationDelay: BN = new BN(0);
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.WORKING_GROUP_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!)
+  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!)
+  const firstRewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!)
+  const rewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!)
+  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!)
+  const unstakingPeriod: BN = new BN(process.env.STORAGE_WORKING_GROUP_UNSTAKING_PERIOD!)
+  const durationInBlocks = 60
+  const openingActivationDelay: BN = new BN(0)
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
-  const sudo: KeyringPair = keyring.addFromUri(sudoUri);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
+  const sudo: KeyringPair = keyring.addFromUri(sudoUri)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri);
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri)
 
-  let leadOpenignId: BN;
+  let leadOpenignId: BN
   tap.test(
     'Add lead opening',
     async () =>
@@ -64,7 +64,7 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
         openingActivationDelay,
         WorkingGroups.storageWorkingGroup
       ))
-  );
+  )
   tap.test(
     'Apply for lead opening',
     async () =>
@@ -78,10 +78,10 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       )
-  );
+  )
   tap.test('Begin lead application review', async () =>
     beginLeaderApplicationReview(apiWrapper, sudo, leadOpenignId, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Fill lead opening', async () =>
     fillLeaderOpening(
       apiWrapper,
@@ -93,9 +93,9 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
       payoutAmount,
       WorkingGroups.storageWorkingGroup
     )
-  );
+  )
 
-  let openignId: BN;
+  let openignId: BN
   tap.test(
     'Add worker opening',
     async () =>
@@ -111,7 +111,7 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       ))
-  );
+  )
   tap.test(
     'Apply for worker opening',
     async () =>
@@ -125,10 +125,10 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       )
-  );
+  )
   tap.test('Begin application review', async () =>
     beginApplicationReview(apiWrapper, leadKeyPair[0], sudo, openignId, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Fill worker opening', async () =>
     fillOpening(
       apiWrapper,
@@ -141,14 +141,12 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
       payoutAmount,
       WorkingGroups.storageWorkingGroup
     )
-  );
+  )
 
-  tap.test('Leaving lead role', async () =>
-    leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup)
-  );
+  tap.test('Leaving lead role', async () => leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup))
   tap.test('Decrease worker stake, expect failure', async () =>
     decreaseStake(apiWrapper, nKeyPairs, leadKeyPair[0], sudo, WorkingGroups.storageWorkingGroup, true)
-  );
+  )
 
   tap.test(
     'Add lead opening',
@@ -162,7 +160,7 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
         openingActivationDelay,
         WorkingGroups.storageWorkingGroup
       ))
-  );
+  )
   tap.test(
     'Apply for lead opening',
     async () =>
@@ -176,10 +174,10 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       )
-  );
+  )
   tap.test('Begin lead application review', async () =>
     beginLeaderApplicationReview(apiWrapper, sudo, leadOpenignId, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Fill lead opening', async () =>
     fillLeaderOpening(
       apiWrapper,
@@ -191,21 +189,19 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
       payoutAmount,
       WorkingGroups.storageWorkingGroup
     )
-  );
+  )
 
   tap.test('Decrease worker stake', async () =>
     decreaseStake(apiWrapper, nKeyPairs, leadKeyPair[0], sudo, WorkingGroups.storageWorkingGroup, false)
-  );
+  )
   tap.test('Slash worker', async () =>
     slash(apiWrapper, nKeyPairs, leadKeyPair[0], sudo, WorkingGroups.storageWorkingGroup, false)
-  );
+  )
   tap.test('Terminate worker role', async () =>
     terminateRole(apiWrapper, nKeyPairs, leadKeyPair[0], sudo, WorkingGroups.storageWorkingGroup, false)
-  );
+  )
 
-  tap.test('Leaving lead role', async () =>
-    leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup)
-  );
+  tap.test('Leaving lead role', async () => leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup))
 
-  closeApi(apiWrapper);
-});
+  closeApi(apiWrapper)
+})

+ 50 - 52
tests/network-tests/src/nicaea/tests/workingGroup/manageWorkerAsWorkerTest.ts

@@ -1,12 +1,11 @@
-import tap = require('tap');
-import { initConfig } from '../../utils/config';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper';
-import { WsProvider, Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import { membershipTest } from '../impl/membershipCreation';
+import { initConfig } from '../../utils/config'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper'
+import { WsProvider, Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import { membershipTest } from '../impl/membershipCreation'
 import {
   addWorkerOpening,
   applyForOpening,
@@ -19,39 +18,40 @@ import {
   beginLeaderApplicationReview,
   fillLeaderOpening,
   leaveRole,
-} from './impl/workingGroupModule';
-import BN from 'bn.js';
+} from './impl/workingGroupModule'
+import BN from 'bn.js'
+import tap = require('tap')
 
 tap.mocha.describe('Manage worker as worker scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const nKeyPairs: KeyringPair[] = new Array();
-  const leadKeyPair: KeyringPair[] = new Array();
+  const nKeyPairs: KeyringPair[] = []
+  const leadKeyPair: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.WORKING_GROUP_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!);
-  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!);
-  const firstRewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!);
-  const rewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!);
-  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!);
-  const unstakingPeriod: BN = new BN(process.env.STORAGE_WORKING_GROUP_UNSTAKING_PERIOD!);
-  const durationInBlocks: number = 38;
-  const openingActivationDelay: BN = new BN(0);
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.WORKING_GROUP_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!)
+  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!)
+  const firstRewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!)
+  const rewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!)
+  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!)
+  const unstakingPeriod: BN = new BN(process.env.STORAGE_WORKING_GROUP_UNSTAKING_PERIOD!)
+  const durationInBlocks = 38
+  const openingActivationDelay: BN = new BN(0)
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
-  const sudo: KeyringPair = keyring.addFromUri(sudoUri);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
+  const sudo: KeyringPair = keyring.addFromUri(sudoUri)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri);
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri)
 
-  let leadOpenignId: BN;
+  let leadOpenignId: BN
   tap.test(
     'Add lead opening',
     async () =>
@@ -64,7 +64,7 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
         openingActivationDelay,
         WorkingGroups.storageWorkingGroup
       ))
-  );
+  )
   tap.test(
     'Apply for lead opening',
     async () =>
@@ -78,10 +78,10 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       )
-  );
+  )
   tap.test('Begin lead application review', async () =>
     beginLeaderApplicationReview(apiWrapper, sudo, leadOpenignId, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Fill lead opening', async () =>
     fillLeaderOpening(
       apiWrapper,
@@ -93,9 +93,9 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
       payoutAmount,
       WorkingGroups.storageWorkingGroup
     )
-  );
+  )
 
-  let openignId: BN;
+  let openignId: BN
   tap.test(
     'Add worker opening',
     async () =>
@@ -111,7 +111,7 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       ))
-  );
+  )
   tap.test(
     'Apply for worker opening',
     async () =>
@@ -125,10 +125,10 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       )
-  );
+  )
   tap.test('Begin application review', async () =>
     beginApplicationReview(apiWrapper, leadKeyPair[0], sudo, openignId, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Fill worker opening', async () =>
     fillOpening(
       apiWrapper,
@@ -141,21 +141,19 @@ tap.mocha.describe('Manage worker as worker scenario', async () => {
       payoutAmount,
       WorkingGroups.storageWorkingGroup
     )
-  );
+  )
 
   tap.test('Increase worker stake', async () =>
     increaseStake(apiWrapper, nKeyPairs, sudo, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Update reward account', async () =>
     updateRewardAccount(apiWrapper, nKeyPairs, keyring, sudo, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Update role account', async () =>
     updateRoleAccount(apiWrapper, nKeyPairs, keyring, sudo, WorkingGroups.storageWorkingGroup)
-  );
+  )
 
-  tap.test('Leaving lead role', async () =>
-    leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup)
-  );
+  tap.test('Leaving lead role', async () => leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup))
 
-  closeApi(apiWrapper);
-});
+  closeApi(apiWrapper)
+})

+ 49 - 51
tests/network-tests/src/nicaea/tests/workingGroup/workerApplicationHappyCaseTest.ts

@@ -1,12 +1,11 @@
-import tap from 'tap';
-import { initConfig } from '../../utils/config';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper';
-import { WsProvider, Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import { membershipTest } from '../impl/membershipCreation';
+import { initConfig } from '../../utils/config'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper'
+import { WsProvider, Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import { membershipTest } from '../impl/membershipCreation'
 import {
   addWorkerOpening,
   applyForOpening,
@@ -17,39 +16,40 @@ import {
   beginLeaderApplicationReview,
   fillLeaderOpening,
   leaveRole,
-} from './impl/workingGroupModule';
-import BN from 'bn.js';
+} from './impl/workingGroupModule'
+import BN from 'bn.js'
+import tap from 'tap'
 
 tap.mocha.describe('Worker application happy case scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const nKeyPairs: KeyringPair[] = new Array();
-  const leadKeyPair: KeyringPair[] = new Array();
+  const nKeyPairs: KeyringPair[] = []
+  const leadKeyPair: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.WORKING_GROUP_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!);
-  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!);
-  const firstRewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!);
-  const rewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!);
-  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!);
-  const unstakingPeriod: BN = new BN(process.env.STORAGE_WORKING_GROUP_UNSTAKING_PERIOD!);
-  const durationInBlocks: number = 48;
-  const openingActivationDelay: BN = new BN(0);
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.WORKING_GROUP_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!)
+  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!)
+  const firstRewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!)
+  const rewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!)
+  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!)
+  const unstakingPeriod: BN = new BN(process.env.STORAGE_WORKING_GROUP_UNSTAKING_PERIOD!)
+  const durationInBlocks = 48
+  const openingActivationDelay: BN = new BN(0)
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
-  const sudo: KeyringPair = keyring.addFromUri(sudoUri);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
+  const sudo: KeyringPair = keyring.addFromUri(sudoUri)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri);
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri)
 
-  let leadOpenignId: BN;
+  let leadOpenignId: BN
   tap.test(
     'Add lead opening',
     async () =>
@@ -62,7 +62,7 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
         openingActivationDelay,
         WorkingGroups.storageWorkingGroup
       ))
-  );
+  )
   tap.test(
     'Apply for lead opening',
     async () =>
@@ -76,10 +76,10 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       )
-  );
+  )
   tap.test('Begin lead application review', async () =>
     beginLeaderApplicationReview(apiWrapper, sudo, leadOpenignId, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Fill lead opening', async () =>
     fillLeaderOpening(
       apiWrapper,
@@ -91,9 +91,9 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
       payoutAmount,
       WorkingGroups.storageWorkingGroup
     )
-  );
+  )
 
-  let workerOpenignId: BN;
+  let workerOpenignId: BN
   tap.test(
     'Add worker opening',
     async () =>
@@ -109,7 +109,7 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       ))
-  );
+  )
   tap.test('Apply for worker opening', async () =>
     applyForOpening(
       apiWrapper,
@@ -121,10 +121,10 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
       WorkingGroups.storageWorkingGroup,
       false
     )
-  );
+  )
   tap.test('Withdraw worker application', async () =>
     withdrawApplicaiton(apiWrapper, nKeyPairs, sudo, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Apply for worker opening', async () =>
     applyForOpening(
       apiWrapper,
@@ -136,10 +136,10 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
       WorkingGroups.storageWorkingGroup,
       false
     )
-  );
+  )
   tap.test('Begin application review', async () =>
     beginApplicationReview(apiWrapper, leadKeyPair[0], sudo, workerOpenignId, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Fill worker opening', async () =>
     fillOpening(
       apiWrapper,
@@ -152,11 +152,9 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
       payoutAmount,
       WorkingGroups.storageWorkingGroup
     )
-  );
+  )
 
-  tap.test('Leaving lead role', async () =>
-    leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup)
-  );
+  tap.test('Leaving lead role', async () => leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup))
 
-  closeApi(apiWrapper);
-});
+  closeApi(apiWrapper)
+})

+ 51 - 53
tests/network-tests/src/nicaea/tests/workingGroup/workerApplicationRejectionCaseTest.ts

@@ -1,12 +1,11 @@
-import tap from 'tap';
-import { initConfig } from '../../utils/config';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper';
-import { WsProvider, Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import { membershipTest, createKeyPairs } from '../impl/membershipCreation';
+import { initConfig } from '../../utils/config'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper'
+import { WsProvider, Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import { membershipTest, createKeyPairs } from '../impl/membershipCreation'
 import {
   addWorkerOpening,
   applyForOpening,
@@ -16,41 +15,42 @@ import {
   beginLeaderApplicationReview,
   fillLeaderOpening,
   leaveRole,
-} from './impl/workingGroupModule';
-import BN from 'bn.js';
+} from './impl/workingGroupModule'
+import BN from 'bn.js'
+import tap from 'tap'
 
 tap.mocha.describe('Worker application happy case scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const nKeyPairs: KeyringPair[] = new Array();
-  const leadKeyPair: KeyringPair[] = new Array();
+  const nKeyPairs: KeyringPair[] = []
+  const leadKeyPair: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.WORKING_GROUP_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!);
-  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!);
-  const firstRewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!);
-  const rewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!);
-  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!);
-  const unstakingPeriod: BN = new BN(process.env.STORAGE_WORKING_GROUP_UNSTAKING_PERIOD!);
-  const durationInBlocks: number = 38;
-  const openingActivationDelay: BN = new BN(100);
-  const leadOpeningActivationDelay: BN = new BN(0);
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.WORKING_GROUP_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!)
+  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!)
+  const firstRewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!)
+  const rewardInterval: BN = new BN(process.env.LONG_REWARD_INTERVAL!)
+  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!)
+  const unstakingPeriod: BN = new BN(process.env.STORAGE_WORKING_GROUP_UNSTAKING_PERIOD!)
+  const durationInBlocks = 38
+  const openingActivationDelay: BN = new BN(100)
+  const leadOpeningActivationDelay: BN = new BN(0)
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
-  const sudo: KeyringPair = keyring.addFromUri(sudoUri);
-  const nonMemberKeyPairs = createKeyPairs(keyring, N);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
+  const sudo: KeyringPair = keyring.addFromUri(sudoUri)
+  const nonMemberKeyPairs = createKeyPairs(keyring, N)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri);
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri)
 
-  let leadOpenignId: BN;
+  let leadOpenignId: BN
   tap.test(
     'Add lead opening',
     async () =>
@@ -63,7 +63,7 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
         leadOpeningActivationDelay,
         WorkingGroups.storageWorkingGroup
       ))
-  );
+  )
   tap.test(
     'Apply for lead opening',
     async () =>
@@ -77,10 +77,10 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       )
-  );
+  )
   tap.test('Begin lead application review', async () =>
     beginLeaderApplicationReview(apiWrapper, sudo, leadOpenignId, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Fill lead opening', async () =>
     fillLeaderOpening(
       apiWrapper,
@@ -92,9 +92,9 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
       payoutAmount,
       WorkingGroups.storageWorkingGroup
     )
-  );
+  )
 
-  let openignId: BN;
+  let openignId: BN
   tap.test(
     'Add worker opening',
     async () =>
@@ -110,7 +110,7 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       ))
-  );
+  )
   tap.test('Apply for worker opening, expect failure', async () =>
     applyForOpening(
       apiWrapper,
@@ -122,10 +122,10 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
       WorkingGroups.storageWorkingGroup,
       true
     )
-  );
+  )
   tap.test('Begin accepting worker applications', async () =>
     acceptApplications(apiWrapper, leadKeyPair[0], sudo, openignId, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Apply for worker opening as non-member, expect failure', async () =>
     applyForOpening(
       apiWrapper,
@@ -137,7 +137,7 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
       WorkingGroups.storageWorkingGroup,
       true
     )
-  );
+  )
   tap.test('Apply for worker opening as member', async () =>
     applyForOpening(
       apiWrapper,
@@ -149,14 +149,12 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
       WorkingGroups.storageWorkingGroup,
       false
     )
-  );
+  )
   tap.test('Terminate worker applicaitons', async () =>
     terminateApplications(apiWrapper, nKeyPairs, leadKeyPair[0], sudo, WorkingGroups.storageWorkingGroup)
-  );
+  )
 
-  tap.test('Leaving lead role', async () =>
-    leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup)
-  );
+  tap.test('Leaving lead role', async () => leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup))
 
-  closeApi(apiWrapper);
-});
+  closeApi(apiWrapper)
+})

+ 50 - 52
tests/network-tests/src/nicaea/tests/workingGroup/workerPayout.ts

@@ -1,12 +1,11 @@
-import tap from 'tap';
-import { initConfig } from '../../utils/config';
-import { registerJoystreamTypes } from '@nicaea/types';
-import { closeApi } from '../impl/closeApi';
-import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper';
-import { WsProvider, Keyring } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { setTestTimeout } from '../../utils/setTestTimeout';
-import { membershipTest } from '../impl/membershipCreation';
+import { initConfig } from '../../utils/config'
+import { registerJoystreamTypes } from '@nicaea/types'
+import { closeApi } from '../impl/closeApi'
+import { ApiWrapper, WorkingGroups } from '../../utils/apiWrapper'
+import { WsProvider, Keyring } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { setTestTimeout } from '../../utils/setTestTimeout'
+import { membershipTest } from '../impl/membershipCreation'
 import {
   addWorkerOpening,
   applyForOpening,
@@ -18,40 +17,41 @@ import {
   leaveRole,
   awaitPayout,
   setMintCapacity,
-} from './impl/workingGroupModule';
-import BN from 'bn.js';
+} from './impl/workingGroupModule'
+import BN from 'bn.js'
+import tap from 'tap'
 
 tap.mocha.describe('Worker application happy case scenario', async () => {
-  initConfig();
-  registerJoystreamTypes();
+  initConfig()
+  registerJoystreamTypes()
 
-  const nKeyPairs: KeyringPair[] = new Array();
-  const leadKeyPair: KeyringPair[] = new Array();
+  const nKeyPairs: KeyringPair[] = []
+  const leadKeyPair: KeyringPair[] = []
 
-  const keyring = new Keyring({ type: 'sr25519' });
-  const N: number = +process.env.WORKING_GROUP_N!;
-  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-  const nodeUrl: string = process.env.NODE_URL!;
-  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!);
-  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!);
-  const firstRewardInterval: BN = new BN(process.env.SHORT_FIRST_REWARD_INTERVAL!);
-  const rewardInterval: BN = new BN(process.env.SHORT_REWARD_INTERVAL!);
-  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!);
-  const unstakingPeriod: BN = new BN(process.env.STORAGE_WORKING_GROUP_UNSTAKING_PERIOD!);
-  const mintCapacity: BN = new BN(process.env.STORAGE_WORKING_GROUP_MINTING_CAPACITY!);
-  const durationInBlocks: number = 48;
-  const openingActivationDelay: BN = new BN(0);
+  const keyring = new Keyring({ type: 'sr25519' })
+  const N: number = +process.env.WORKING_GROUP_N!
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+  const nodeUrl: string = process.env.NODE_URL!
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+  const applicationStake: BN = new BN(process.env.WORKING_GROUP_APPLICATION_STAKE!)
+  const roleStake: BN = new BN(process.env.WORKING_GROUP_ROLE_STAKE!)
+  const firstRewardInterval: BN = new BN(process.env.SHORT_FIRST_REWARD_INTERVAL!)
+  const rewardInterval: BN = new BN(process.env.SHORT_REWARD_INTERVAL!)
+  const payoutAmount: BN = new BN(process.env.PAYOUT_AMOUNT!)
+  const unstakingPeriod: BN = new BN(process.env.STORAGE_WORKING_GROUP_UNSTAKING_PERIOD!)
+  const mintCapacity: BN = new BN(process.env.STORAGE_WORKING_GROUP_MINTING_CAPACITY!)
+  const durationInBlocks = 48
+  const openingActivationDelay: BN = new BN(0)
 
-  const provider = new WsProvider(nodeUrl);
-  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
-  const sudo: KeyringPair = keyring.addFromUri(sudoUri);
+  const provider = new WsProvider(nodeUrl)
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider)
+  const sudo: KeyringPair = keyring.addFromUri(sudoUri)
 
-  setTestTimeout(apiWrapper, durationInBlocks);
-  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri);
-  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri);
+  setTestTimeout(apiWrapper, durationInBlocks)
+  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri)
+  membershipTest(apiWrapper, leadKeyPair, keyring, 1, paidTerms, sudoUri)
 
-  let leadOpenignId: BN;
+  let leadOpenignId: BN
   tap.test(
     'Add lead opening',
     async () =>
@@ -64,7 +64,7 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
         openingActivationDelay,
         WorkingGroups.storageWorkingGroup
       ))
-  );
+  )
   tap.test(
     'Apply for lead opening',
     async () =>
@@ -78,10 +78,10 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       )
-  );
+  )
   tap.test('Begin lead application review', async () =>
     beginLeaderApplicationReview(apiWrapper, sudo, leadOpenignId, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Fill lead opening', async () =>
     fillLeaderOpening(
       apiWrapper,
@@ -93,9 +93,9 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
       payoutAmount,
       WorkingGroups.storageWorkingGroup
     )
-  );
+  )
 
-  let workerOpenignId: BN;
+  let workerOpenignId: BN
   tap.test(
     'Add worker opening',
     async () =>
@@ -111,7 +111,7 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
         WorkingGroups.storageWorkingGroup,
         false
       ))
-  );
+  )
   tap.test('Apply for worker opening', async () =>
     applyForOpening(
       apiWrapper,
@@ -123,13 +123,13 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
       WorkingGroups.storageWorkingGroup,
       false
     )
-  );
+  )
   tap.test('Begin application review', async () =>
     beginApplicationReview(apiWrapper, leadKeyPair[0], sudo, workerOpenignId, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Set mint capacity', async () =>
     setMintCapacity(apiWrapper, sudo, mintCapacity, WorkingGroups.storageWorkingGroup)
-  );
+  )
   tap.test('Fill worker opening', async () =>
     fillOpening(
       apiWrapper,
@@ -142,13 +142,11 @@ tap.mocha.describe('Worker application happy case scenario', async () => {
       payoutAmount,
       WorkingGroups.storageWorkingGroup
     )
-  );
+  )
 
-  tap.test('Await worker payout', async () => awaitPayout(apiWrapper, nKeyPairs, WorkingGroups.storageWorkingGroup));
+  tap.test('Await worker payout', async () => awaitPayout(apiWrapper, nKeyPairs, WorkingGroups.storageWorkingGroup))
 
-  tap.test('Leaving lead role', async () =>
-    leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup)
-  );
+  tap.test('Leaving lead role', async () => leaveRole(apiWrapper, leadKeyPair, sudo, WorkingGroups.storageWorkingGroup))
 
-  closeApi(apiWrapper);
-});
+  closeApi(apiWrapper)
+})

File diff suppressed because it is too large
+ 250 - 251
tests/network-tests/src/nicaea/utils/apiWrapper.ts


+ 2 - 2
tests/network-tests/src/nicaea/utils/config.ts

@@ -1,5 +1,5 @@
-import { config } from 'dotenv';
+import { config } from 'dotenv'
 
 export function initConfig() {
-  config();
+  config()
 }

+ 31 - 31
tests/network-tests/src/nicaea/utils/sender.ts

@@ -1,33 +1,33 @@
-import BN from 'bn.js';
-import { ApiPromise } from '@polkadot/api';
-import { Index } from '@polkadot/types/interfaces';
-import { SubmittableExtrinsic } from '@polkadot/api/types';
-import { KeyringPair } from '@polkadot/keyring/types';
+import BN from 'bn.js'
+import { ApiPromise } from '@polkadot/api'
+import { Index } from '@polkadot/types/interfaces'
+import { SubmittableExtrinsic } from '@polkadot/api/types'
+import { KeyringPair } from '@polkadot/keyring/types'
 
 export class Sender {
-  private readonly api: ApiPromise;
-  private static nonceMap: Map<string, BN> = new Map();
+  private readonly api: ApiPromise
+  private static nonceMap: Map<string, BN> = new Map()
 
   constructor(api: ApiPromise) {
-    this.api = api;
+    this.api = api
   }
 
   private async getNonce(address: string): Promise<BN> {
-    let oncahinNonce: BN = new BN(0);
+    let oncahinNonce: BN = new BN(0)
     if (!Sender.nonceMap.get(address)) {
-      oncahinNonce = await this.api.query.system.accountNonce<Index>(address);
+      oncahinNonce = await this.api.query.system.accountNonce<Index>(address)
     }
-    let nonce: BN | undefined = Sender.nonceMap.get(address);
+    let nonce: BN | undefined = Sender.nonceMap.get(address)
     if (!nonce) {
-      nonce = oncahinNonce;
+      nonce = oncahinNonce
     }
-    const nextNonce: BN = nonce.addn(1);
-    Sender.nonceMap.set(address, nextNonce);
-    return nonce;
+    const nextNonce: BN = nonce.addn(1)
+    Sender.nonceMap.set(address, nextNonce)
+    return nonce
   }
 
   private clearNonce(address: string): void {
-    Sender.nonceMap.delete(address);
+    Sender.nonceMap.delete(address)
   }
 
   public async signAndSend(
@@ -36,31 +36,31 @@ export class Sender {
     expectFailure = false
   ): Promise<void> {
     return new Promise(async (resolve, reject) => {
-      const nonce: BN = await this.getNonce(account.address);
-      const signedTx = tx.sign(account, { nonce });
+      const nonce: BN = await this.getNonce(account.address)
+      const signedTx = tx.sign(account, { nonce })
       await signedTx
-        .send(async result => {
+        .send(async (result) => {
           if (result.status.isFinalized === true && result.events !== undefined) {
-            result.events.forEach(event => {
+            result.events.forEach((event) => {
               if (event.event.method === 'ExtrinsicFailed') {
                 if (expectFailure) {
-                  resolve();
+                  resolve()
                 } else {
-                  reject(new Error('Extrinsic failed unexpectedly'));
+                  reject(new Error('Extrinsic failed unexpectedly'))
                 }
               }
-            });
-            resolve();
+            })
+            resolve()
           }
           if (result.status.isFuture) {
-            console.log('nonce ' + nonce + ' for account ' + account.address + ' is in future');
-            this.clearNonce(account.address);
-            reject(new Error('Extrinsic nonce is in future'));
+            console.log('nonce ' + nonce + ' for account ' + account.address + ' is in future')
+            this.clearNonce(account.address)
+            reject(new Error('Extrinsic nonce is in future'))
           }
         })
-        .catch(error => {
-          reject(error);
-        });
-    });
+        .catch((error) => {
+          reject(error)
+        })
+    })
   }
 }

+ 4 - 4
tests/network-tests/src/nicaea/utils/setTestTimeout.ts

@@ -1,7 +1,7 @@
-import tap from 'tap';
-import { ApiWrapper } from './apiWrapper';
+import tap from 'tap'
+import { ApiWrapper } from './apiWrapper'
 
 export function setTestTimeout(apiWrapper: ApiWrapper, durationInBlocks: number) {
-  const durationInMillis = apiWrapper.getBlockDuration().muln(durationInBlocks).toNumber();
-  tap.setTimeout(durationInMillis);
+  const durationInMillis = apiWrapper.getBlockDuration().muln(durationInBlocks).toNumber()
+  tap.setTimeout(durationInMillis)
 }

+ 23 - 23
tests/network-tests/src/nicaea/utils/utils.ts

@@ -1,16 +1,16 @@
-import { IExtrinsic } from '@polkadot/types/types';
-import { compactToU8a, stringToU8a } from '@polkadot/util';
-import { blake2AsHex } from '@polkadot/util-crypto';
-import BN from 'bn.js';
-import fs from 'fs';
-import { decodeAddress } from '@polkadot/keyring';
-import { Seat } from '@nicaea/types/council';
+import { IExtrinsic } from '@polkadot/types/types'
+import { compactToU8a, stringToU8a } from '@polkadot/util'
+import { blake2AsHex } from '@polkadot/util-crypto'
+import BN from 'bn.js'
+import fs from 'fs'
+import { decodeAddress } from '@polkadot/keyring'
+import { Seat } from '@nicaea/types/council'
 
 export class Utils {
-  private static LENGTH_ADDRESS = 32 + 1; // publicKey + prefix
-  private static LENGTH_ERA = 2; // assuming mortals
-  private static LENGTH_SIGNATURE = 64; // assuming ed25519 or sr25519
-  private static LENGTH_VERSION = 1; // 0x80 & version
+  private static LENGTH_ADDRESS = 32 + 1 // publicKey + prefix
+  private static LENGTH_ERA = 2 // assuming mortals
+  private static LENGTH_SIGNATURE = 64 // assuming ed25519 or sr25519
+  private static LENGTH_VERSION = 1 // 0x80 & version
 
   public static calcTxLength = (extrinsic?: IExtrinsic | null, nonce?: BN): BN => {
     return new BN(
@@ -20,30 +20,30 @@ export class Utils {
         Utils.LENGTH_ERA +
         compactToU8a(nonce || 0).length +
         (extrinsic ? extrinsic.encodedLength : 0)
-    );
-  };
+    )
+  }
 
   /** hash(accountId + salt) */
   public static hashVote(accountId: string, salt: string): string {
-    const accountU8a = decodeAddress(accountId);
-    const saltU8a = stringToU8a(salt);
-    const voteU8a = new Uint8Array(accountU8a.length + saltU8a.length);
-    voteU8a.set(accountU8a);
-    voteU8a.set(saltU8a, accountU8a.length);
+    const accountU8a = decodeAddress(accountId)
+    const saltU8a = stringToU8a(salt)
+    const voteU8a = new Uint8Array(accountU8a.length + saltU8a.length)
+    voteU8a.set(accountU8a)
+    voteU8a.set(saltU8a, accountU8a.length)
 
-    const hash = blake2AsHex(voteU8a, 256);
-    return hash;
+    const hash = blake2AsHex(voteU8a, 256)
+    return hash
   }
 
   public static wait(ms: number): Promise<void> {
-    return new Promise(resolve => setTimeout(resolve, ms));
+    return new Promise((resolve) => setTimeout(resolve, ms))
   }
 
   public static getTotalStake(seat: Seat): BN {
-    return new BN(+seat.stake.toString() + seat.backers.reduce((a, baker) => a + +baker.stake.toString(), 0));
+    return new BN(+seat.stake.toString() + seat.backers.reduce((a, baker) => a + +baker.stake.toString(), 0))
   }
 
   public static readRuntimeFromFile(path: string): string {
-    return '0x' + fs.readFileSync(path).toString('hex');
+    return '0x' + fs.readFileSync(path).toString('hex')
   }
 }

+ 23 - 23
tests/network-tests/src/rome/tests/electingCouncilTest.ts

@@ -1,27 +1,27 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from './impl/membershipCreation';
-import { councilTest } from './impl/electingCouncil';
-import { initConfig } from '../utils/config';
-import { Keyring } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTimeout } from './impl/setTimeout';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from './impl/membershipCreation'
+import { councilTest } from './impl/electingCouncil'
+import { initConfig } from '../utils/config'
+import { Keyring } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTimeout } from './impl/setTimeout'
 
-initConfig();
+initConfig()
 
-const m1KeyPairs: KeyringPair[] = new Array();
-const m2KeyPairs: KeyringPair[] = new Array();
+const m1KeyPairs: KeyringPair[] = []
+const m2KeyPairs: KeyringPair[] = []
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const K: number = +process.env.COUNCIL_ELECTION_K!;
-const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-const durationInBlocks: number = 25;
+const keyring = new Keyring({ type: 'sr25519' })
+const N: number = +process.env.MEMBERSHIP_CREATION_N!
+const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+const nodeUrl: string = process.env.NODE_URL!
+const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+const K: number = +process.env.COUNCIL_ELECTION_K!
+const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+const durationInBlocks = 25
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake);
+setTimeout(nodeUrl, durationInBlocks)
+membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri)
+membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri)
+councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake)

+ 57 - 64
tests/network-tests/src/rome/tests/impl/electingCouncil.ts

@@ -1,12 +1,12 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { ApiWrapper } from '../../utils/apiWrapper';
-import { WsProvider, Keyring } from '@polkadot/api';
-import BN from 'bn.js';
-import { registerJoystreamTypes, Seat } from '@rome/types';
-import { assert } from 'chai';
-import { v4 as uuid } from 'uuid';
-import { Utils } from '../../utils/utils';
-import tap from 'tap';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { ApiWrapper } from '../../utils/apiWrapper'
+import { WsProvider, Keyring } from '@polkadot/api'
+import BN from 'bn.js'
+import { registerJoystreamTypes, Seat } from '@rome/types'
+import { assert } from 'chai'
+import { v4 as uuid } from 'uuid'
+import { Utils } from '../../utils/utils'
+import tap from 'tap'
 
 export function councilTest(
   m1KeyPairs: KeyringPair[],
@@ -18,101 +18,94 @@ export function councilTest(
   greaterStake: BN,
   lesserStake: BN
 ) {
-  let sudo: KeyringPair;
-  let apiWrapper: ApiWrapper;
+  let sudo: KeyringPair
+  let apiWrapper: ApiWrapper
 
   tap.test('Electing council test setup', async () => {
-    registerJoystreamTypes();
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-  });
+    registerJoystreamTypes()
+    const provider = new WsProvider(nodeUrl)
+    apiWrapper = await ApiWrapper.create(provider)
+  })
 
   tap.test('Electing a council test', async () => {
     // Setup goes here because M keypairs are generated after before() function
-    sudo = keyring.addFromUri(sudoUri);
-    let now = await apiWrapper.getBestBlock();
-    const applyForCouncilFee: BN = apiWrapper.estimateApplyForCouncilFee(greaterStake);
-    const voteForCouncilFee: BN = apiWrapper.estimateVoteForCouncilFee(sudo.address, sudo.address, greaterStake);
-    const salt: string[] = new Array();
+    sudo = keyring.addFromUri(sudoUri)
+    let now = await apiWrapper.getBestBlock()
+    const applyForCouncilFee: BN = apiWrapper.estimateApplyForCouncilFee(greaterStake)
+    const voteForCouncilFee: BN = apiWrapper.estimateVoteForCouncilFee(sudo.address, sudo.address, greaterStake)
+    const salt: string[] = []
     m1KeyPairs.forEach(() => {
-      salt.push(''.concat(uuid().replace(/-/g, '')));
-    });
-    const revealVoteFee: BN = apiWrapper.estimateRevealVoteFee(sudo.address, salt[0]);
+      salt.push(''.concat(uuid().replace(/-/g, '')))
+    })
+    const revealVoteFee: BN = apiWrapper.estimateRevealVoteFee(sudo.address, salt[0])
 
     // Topping the balances
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, applyForCouncilFee.add(greaterStake));
-    await apiWrapper.transferBalanceToAccounts(
-      sudo,
-      m1KeyPairs,
-      voteForCouncilFee.add(revealVoteFee).add(greaterStake)
-    );
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, applyForCouncilFee.add(greaterStake))
+    await apiWrapper.transferBalanceToAccounts(sudo, m1KeyPairs, voteForCouncilFee.add(revealVoteFee).add(greaterStake))
 
     // First K members stake more
-    await apiWrapper.sudoStartAnnouncingPerion(sudo, now.addn(100));
-    await apiWrapper.batchApplyForCouncilElection(m2KeyPairs.slice(0, K), greaterStake);
-    m2KeyPairs.slice(0, K).forEach(keyPair =>
-      apiWrapper.getCouncilElectionStake(keyPair.address).then(stake => {
+    await apiWrapper.sudoStartAnnouncingPerion(sudo, now.addn(100))
+    await apiWrapper.batchApplyForCouncilElection(m2KeyPairs.slice(0, K), greaterStake)
+    m2KeyPairs.slice(0, K).forEach((keyPair) =>
+      apiWrapper.getCouncilElectionStake(keyPair.address).then((stake) => {
         assert(
           stake.eq(greaterStake),
           `${keyPair.address} not applied correctrly for council election with stake ${stake} versus expected ${greaterStake}`
-        );
+        )
       })
-    );
+    )
 
     // Last members stake less
-    await apiWrapper.batchApplyForCouncilElection(m2KeyPairs.slice(K), lesserStake);
-    m2KeyPairs.slice(K).forEach(keyPair =>
-      apiWrapper.getCouncilElectionStake(keyPair.address).then(stake => {
+    await apiWrapper.batchApplyForCouncilElection(m2KeyPairs.slice(K), lesserStake)
+    m2KeyPairs.slice(K).forEach((keyPair) =>
+      apiWrapper.getCouncilElectionStake(keyPair.address).then((stake) => {
         assert(
           stake.eq(lesserStake),
           `${keyPair.address} not applied correctrly for council election with stake ${stake} versus expected ${lesserStake}`
-        );
+        )
       })
-    );
+    )
 
     // Voting
-    await apiWrapper.sudoStartVotingPerion(sudo, now.addn(100));
+    await apiWrapper.sudoStartVotingPerion(sudo, now.addn(100))
     await apiWrapper.batchVoteForCouncilMember(
       m1KeyPairs.slice(0, K),
       m2KeyPairs.slice(0, K),
       salt.slice(0, K),
       lesserStake
-    );
-    await apiWrapper.batchVoteForCouncilMember(m1KeyPairs.slice(K), m2KeyPairs.slice(K), salt.slice(K), greaterStake);
+    )
+    await apiWrapper.batchVoteForCouncilMember(m1KeyPairs.slice(K), m2KeyPairs.slice(K), salt.slice(K), greaterStake)
 
     // Revealing
-    await apiWrapper.sudoStartRevealingPerion(sudo, now.addn(100));
-    await apiWrapper.batchRevealVote(m1KeyPairs.slice(0, K), m2KeyPairs.slice(0, K), salt.slice(0, K));
-    await apiWrapper.batchRevealVote(m1KeyPairs.slice(K), m2KeyPairs.slice(K), salt.slice(K));
-    now = await apiWrapper.getBestBlock();
+    await apiWrapper.sudoStartRevealingPerion(sudo, now.addn(100))
+    await apiWrapper.batchRevealVote(m1KeyPairs.slice(0, K), m2KeyPairs.slice(0, K), salt.slice(0, K))
+    await apiWrapper.batchRevealVote(m1KeyPairs.slice(K), m2KeyPairs.slice(K), salt.slice(K))
+    now = await apiWrapper.getBestBlock()
 
     // Resolving election
     // 3 is to ensure the revealing block is in future
-    await apiWrapper.sudoStartRevealingPerion(sudo, now.addn(3));
-    await Utils.wait(apiWrapper.getBlockDuration().muln(2.5).toNumber());
-    const seats: Seat[] = await apiWrapper.getCouncil();
+    await apiWrapper.sudoStartRevealingPerion(sudo, now.addn(3))
+    await Utils.wait(apiWrapper.getBlockDuration().muln(2.5).toNumber())
+    const seats: Seat[] = await apiWrapper.getCouncil()
 
     // Preparing collections to increase assertion readability
-    const m2addresses: string[] = m2KeyPairs.map(keyPair => keyPair.address);
-    const m1addresses: string[] = m1KeyPairs.map(keyPair => keyPair.address);
-    const members: string[] = seats.map(seat => seat.member.toString());
-    const bakers: string[] = seats.reduce(
-      (array, seat) => array.concat(seat.backers.map(baker => baker.member.toString())),
-      new Array()
-    );
+    const m2addresses: string[] = m2KeyPairs.map((keyPair) => keyPair.address)
+    const m1addresses: string[] = m1KeyPairs.map((keyPair) => keyPair.address)
+    const members: string[] = seats.map((seat) => seat.member.toString())
+    const bakers: string[] = seats.map((seat) => seat.backers.map((baker) => baker.member.toString())).flat()
 
     // Assertions
-    m2addresses.forEach(address => assert(members.includes(address), `Account ${address} is not in the council`));
-    m1addresses.forEach(address => assert(bakers.includes(address), `Account ${address} is not in the voters`));
-    seats.forEach(seat =>
+    m2addresses.forEach((address) => assert(members.includes(address), `Account ${address} is not in the council`))
+    m1addresses.forEach((address) => assert(bakers.includes(address), `Account ${address} is not in the voters`))
+    seats.forEach((seat) =>
       assert(
         Utils.getTotalStake(seat).eq(greaterStake.add(lesserStake)),
         `Member ${seat.member} has unexpected stake ${Utils.getTotalStake(seat)}`
       )
-    );
-  });
+    )
+  })
 
   tap.teardown(() => {
-    apiWrapper.close();
-  });
+    apiWrapper.close()
+  })
 }

+ 43 - 43
tests/network-tests/src/rome/tests/impl/membershipCreation.ts

@@ -1,12 +1,12 @@
-import { WsProvider } from '@polkadot/api';
-import { registerJoystreamTypes } from '@rome/types';
-import { Keyring } from '@polkadot/keyring';
-import { assert } from 'chai';
-import { KeyringPair } from '@polkadot/keyring/types';
-import BN from 'bn.js';
-import { ApiWrapper } from '../../utils/apiWrapper';
-import { v4 as uuid } from 'uuid';
-import tap from 'tap';
+import { WsProvider } from '@polkadot/api'
+import { registerJoystreamTypes } from '@rome/types'
+import { Keyring } from '@polkadot/keyring'
+import { assert } from 'chai'
+import { KeyringPair } from '@polkadot/keyring/types'
+import BN from 'bn.js'
+import { ApiWrapper } from '../../utils/apiWrapper'
+import { v4 as uuid } from 'uuid'
+import tap from 'tap'
 
 export function membershipTest(
   nKeyPairs: KeyringPair[],
@@ -16,73 +16,73 @@ export function membershipTest(
   nodeUrl: string,
   sudoUri: string
 ) {
-  let apiWrapper: ApiWrapper;
-  let sudo: KeyringPair;
-  let aKeyPair: KeyringPair;
-  let membershipFee: BN;
-  let membershipTransactionFee: BN;
+  let apiWrapper: ApiWrapper
+  let sudo: KeyringPair
+  let aKeyPair: KeyringPair
+  let membershipFee: BN
+  let membershipTransactionFee: BN
 
   tap.test('Membership creation test setup', async () => {
-    registerJoystreamTypes();
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-    sudo = keyring.addFromUri(sudoUri);
+    registerJoystreamTypes()
+    const provider = new WsProvider(nodeUrl)
+    apiWrapper = await ApiWrapper.create(provider)
+    sudo = keyring.addFromUri(sudoUri)
     for (let i = 0; i < N; i++) {
-      nKeyPairs.push(keyring.addFromUri(i + uuid().substring(0, 8)));
+      nKeyPairs.push(keyring.addFromUri(i + uuid().substring(0, 8)))
     }
-    aKeyPair = keyring.addFromUri(uuid().substring(0, 8));
-    membershipFee = await apiWrapper.getMembershipFee(paidTerms);
+    aKeyPair = keyring.addFromUri(uuid().substring(0, 8))
+    membershipFee = await apiWrapper.getMembershipFee(paidTerms)
     membershipTransactionFee = apiWrapper.estimateBuyMembershipFee(
       sudo,
       paidTerms,
       'member_name_which_is_longer_than_expected'
-    );
-    await apiWrapper.transferBalanceToAccounts(sudo, nKeyPairs, membershipTransactionFee.add(new BN(membershipFee)));
-    await apiWrapper.transferBalance(sudo, aKeyPair.address, membershipTransactionFee);
-  });
+    )
+    await apiWrapper.transferBalanceToAccounts(sudo, nKeyPairs, membershipTransactionFee.add(new BN(membershipFee)))
+    await apiWrapper.transferBalance(sudo, aKeyPair.address, membershipTransactionFee)
+  })
 
   tap.test('Buy membeship is accepted with sufficient funds', async () => {
     await Promise.all(
       nKeyPairs.map(async (keyPair, index) => {
-        await apiWrapper.buyMembership(keyPair, paidTerms, `new_member_${index}${keyPair.address.substring(0, 8)}`);
+        await apiWrapper.buyMembership(keyPair, paidTerms, `new_member_${index}${keyPair.address.substring(0, 8)}`)
       })
-    );
+    )
     nKeyPairs.forEach((keyPair, index) =>
       apiWrapper
         .getMemberIds(keyPair.address)
-        .then(membership => assert(membership.length > 0, `Account ${keyPair.address} is not a member`))
-    );
-  });
+        .then((membership) => assert(membership.length > 0, `Account ${keyPair.address} is not a member`))
+    )
+  })
 
   tap.test('Account A can not buy the membership with insufficient funds', async () => {
     await apiWrapper
       .getBalance(aKeyPair.address)
-      .then(balance =>
+      .then((balance) =>
         assert(
           balance.toBn() < membershipFee.add(membershipTransactionFee),
           'Account A already have sufficient balance to purchase membership'
         )
-      );
-    await apiWrapper.buyMembership(aKeyPair, paidTerms, `late_member_${aKeyPair.address.substring(0, 8)}`, true);
+      )
+    await apiWrapper.buyMembership(aKeyPair, paidTerms, `late_member_${aKeyPair.address.substring(0, 8)}`, true)
     apiWrapper
       .getMemberIds(aKeyPair.address)
-      .then(membership => assert(membership.length === 0, 'Account A is a member'));
-  });
+      .then((membership) => assert(membership.length === 0, 'Account A is a member'))
+  })
 
   tap.test('Account A was able to buy the membership with sufficient funds', async () => {
-    await apiWrapper.transferBalance(sudo, aKeyPair.address, membershipFee.add(membershipTransactionFee));
+    await apiWrapper.transferBalance(sudo, aKeyPair.address, membershipFee.add(membershipTransactionFee))
     apiWrapper
       .getBalance(aKeyPair.address)
-      .then(balance =>
+      .then((balance) =>
         assert(balance.toBn() >= membershipFee, 'The account balance is insufficient to purchase membership')
-      );
-    await apiWrapper.buyMembership(aKeyPair, paidTerms, `late_member_${aKeyPair.address.substring(0, 8)}`);
+      )
+    await apiWrapper.buyMembership(aKeyPair, paidTerms, `late_member_${aKeyPair.address.substring(0, 8)}`)
     apiWrapper
       .getMemberIds(aKeyPair.address)
-      .then(membership => assert(membership.length > 0, 'Account A is a not member'));
-  });
+      .then((membership) => assert(membership.length > 0, 'Account A is a not member'))
+  })
 
   tap.teardown(() => {
-    apiWrapper.close();
-  });
+    apiWrapper.close()
+  })
 }

+ 29 - 29
tests/network-tests/src/rome/tests/impl/romeRuntimeUpgrade.ts

@@ -1,10 +1,10 @@
-import { Keyring, WsProvider } from '@polkadot/api';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { registerJoystreamTypes } from '@rome/types';
-import { ApiWrapper } from '../../utils/apiWrapper';
-import BN from 'bn.js';
-import { Utils } from '../../utils/utils';
-import tap from 'tap';
+import { Keyring, WsProvider } from '@polkadot/api'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { registerJoystreamTypes } from '@rome/types'
+import { ApiWrapper } from '../../utils/apiWrapper'
+import BN from 'bn.js'
+import { Utils } from '../../utils/utils'
+import tap from 'tap'
 
 export function romeRuntimeUpgradeTest(
   m1KeyPairs: KeyringPair[],
@@ -15,50 +15,50 @@ export function romeRuntimeUpgradeTest(
   proposalStake: BN,
   runtimePath: string
 ) {
-  let apiWrapper: ApiWrapper;
-  let sudo: KeyringPair;
+  let apiWrapper: ApiWrapper
+  let sudo: KeyringPair
 
   tap.test('Rome runtime upgrade test setup', async () => {
-    registerJoystreamTypes();
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-  });
+    registerJoystreamTypes()
+    const provider = new WsProvider(nodeUrl)
+    apiWrapper = await ApiWrapper.create(provider)
+  })
 
   tap.test('Upgrading the runtime test', async () => {
     // Setup
-    sudo = keyring.addFromUri(sudoUri);
-    const runtime: string = Utils.readRuntimeFromFile(runtimePath);
-    const description: string = 'runtime upgrade proposal which is used for API integration testing';
+    sudo = keyring.addFromUri(sudoUri)
+    const runtime: string = Utils.readRuntimeFromFile(runtimePath)
+    const description = 'runtime upgrade proposal which is used for API integration testing'
     const runtimeProposalFee: BN = apiWrapper.estimateProposeRuntimeUpgradeFee(
       proposalStake,
       description,
       description,
       runtime
-    );
-    const runtimeVoteFee: BN = apiWrapper.estimateVoteForRuntimeProposalFee();
+    )
+    const runtimeVoteFee: BN = apiWrapper.estimateVoteForRuntimeProposalFee()
 
     // Topping the balances
-    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, runtimeProposalFee.add(proposalStake));
-    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee);
+    await apiWrapper.transferBalance(sudo, m1KeyPairs[0].address, runtimeProposalFee.add(proposalStake))
+    await apiWrapper.transferBalanceToAccounts(sudo, m2KeyPairs, runtimeVoteFee)
 
     // Proposal creation
-    const proposalPromise = apiWrapper.expectProposalCreated();
+    const proposalPromise = apiWrapper.expectProposalCreated()
     await apiWrapper.proposeRuntime(
       m1KeyPairs[0],
       proposalStake,
       'testing runtime',
       'runtime to test proposal functionality',
       runtime
-    );
-    const proposalNumber = await proposalPromise;
+    )
+    const proposalNumber = await proposalPromise
 
     // Approving runtime update proposal
-    const runtimePromise = apiWrapper.expectRuntimeUpgraded();
-    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
-    await runtimePromise;
-  });
+    const runtimePromise = apiWrapper.expectRuntimeUpgraded()
+    await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber)
+    await runtimePromise
+  })
 
   tap.teardown(() => {
-    apiWrapper.close();
-  });
+    apiWrapper.close()
+  })
 }

+ 13 - 13
tests/network-tests/src/rome/tests/impl/setTimeout.ts

@@ -1,20 +1,20 @@
-import tap from 'tap';
-import { ApiWrapper } from '../../utils/apiWrapper';
-import { WsProvider } from '@polkadot/api';
-import { registerJoystreamTypes } from '@rome/types';
+import tap from 'tap'
+import { ApiWrapper } from '../../utils/apiWrapper'
+import { WsProvider } from '@polkadot/api'
+import { registerJoystreamTypes } from '@rome/types'
 
 export function setTimeout(nodeUrl: string, durationInBlocks: number) {
-  let apiWrapper: ApiWrapper;
-  registerJoystreamTypes();
+  let apiWrapper: ApiWrapper
+  registerJoystreamTypes()
 
   tap.test('retrieving time necessary for the test', async () => {
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-    const durationInMillis = (await apiWrapper.getBlockDuration()).muln(durationInBlocks).toNumber();
-    tap.setTimeout(durationInMillis);
-  });
+    const provider = new WsProvider(nodeUrl)
+    apiWrapper = await ApiWrapper.create(provider)
+    const durationInMillis = (await apiWrapper.getBlockDuration()).muln(durationInBlocks).toNumber()
+    tap.setTimeout(durationInMillis)
+  })
 
   tap.teardown(() => {
-    apiWrapper.close();
-  });
+    apiWrapper.close()
+  })
 }

+ 15 - 15
tests/network-tests/src/rome/tests/membershipCreationTest.ts

@@ -1,19 +1,19 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from './impl/membershipCreation';
-import { Keyring } from '@polkadot/api';
-import { initConfig } from '../utils/config';
-import { setTimeout } from './impl/setTimeout';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from './impl/membershipCreation'
+import { Keyring } from '@polkadot/api'
+import { initConfig } from '../utils/config'
+import { setTimeout } from './impl/setTimeout'
 
-initConfig();
+initConfig()
 
-const nKeyPairs: KeyringPair[] = new Array();
+const nKeyPairs: KeyringPair[] = []
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const durationInBlocks: number = 7;
+const keyring = new Keyring({ type: 'sr25519' })
+const N: number = +process.env.MEMBERSHIP_CREATION_N!
+const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+const nodeUrl: string = process.env.NODE_URL!
+const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+const durationInBlocks = 7
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(nKeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
+setTimeout(nodeUrl, durationInBlocks)
+membershipTest(nKeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri)

+ 27 - 27
tests/network-tests/src/rome/tests/romeRuntimeUpgradeTest.ts

@@ -1,31 +1,31 @@
-import { KeyringPair } from '@polkadot/keyring/types';
-import { membershipTest } from './impl/membershipCreation';
-import { councilTest } from './impl/electingCouncil';
-import { romeRuntimeUpgradeTest } from './impl/romeRuntimeUpgrade';
-import { initConfig } from '../utils/config';
-import { Keyring } from '@polkadot/api';
-import BN from 'bn.js';
-import { setTimeout } from './impl/setTimeout';
+import { KeyringPair } from '@polkadot/keyring/types'
+import { membershipTest } from './impl/membershipCreation'
+import { councilTest } from './impl/electingCouncil'
+import { romeRuntimeUpgradeTest } from './impl/romeRuntimeUpgrade'
+import { initConfig } from '../utils/config'
+import { Keyring } from '@polkadot/api'
+import BN from 'bn.js'
+import { setTimeout } from './impl/setTimeout'
 
-initConfig();
+initConfig()
 
-const m1KeyPairs: KeyringPair[] = new Array();
-const m2KeyPairs: KeyringPair[] = new Array();
+const m1KeyPairs: KeyringPair[] = []
+const m2KeyPairs: KeyringPair[] = []
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const K: number = +process.env.COUNCIL_ELECTION_K!;
-const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-const proposalStake: BN = new BN(+process.env.RUNTIME_UPGRADE_PROPOSAL_STAKE!);
-const runtimePath: string = process.env.RUNTIME_WASM_PATH!;
-const durationInBlocks: number = 30;
+const keyring = new Keyring({ type: 'sr25519' })
+const N: number = +process.env.MEMBERSHIP_CREATION_N!
+const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
+const nodeUrl: string = process.env.NODE_URL!
+const sudoUri: string = process.env.SUDO_ACCOUNT_URI!
+const K: number = +process.env.COUNCIL_ELECTION_K!
+const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!)
+const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!)
+const proposalStake: BN = new BN(+process.env.RUNTIME_UPGRADE_PROPOSAL_STAKE!)
+const runtimePath: string = process.env.RUNTIME_WASM_PATH!
+const durationInBlocks = 30
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake);
-romeRuntimeUpgradeTest(m1KeyPairs, m2KeyPairs, keyring, nodeUrl, sudoUri, proposalStake, runtimePath);
+setTimeout(nodeUrl, durationInBlocks)
+membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri)
+membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri)
+councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake)
+romeRuntimeUpgradeTest(m1KeyPairs, m2KeyPairs, keyring, nodeUrl, sudoUri, proposalStake, runtimePath)

+ 105 - 105
tests/network-tests/src/rome/utils/apiWrapper.ts

@@ -1,31 +1,31 @@
-import { ApiPromise, WsProvider } from '@polkadot/api';
-import { Option, Vec, Bytes, u32 } from '@polkadot/types';
-import { Codec } from '@polkadot/types/types';
-import { KeyringPair } from '@polkadot/keyring/types';
-import { UserInfo, PaidMembershipTerms, MemberId } from '@rome/types/lib/members';
-import { Seat, VoteKind } from '@rome/types';
-import { Balance, EventRecord } from '@polkadot/types/interfaces';
-import BN from 'bn.js';
-import { SubmittableExtrinsic } from '@polkadot/api/types';
-import { Sender } from './sender';
-import { Utils } from './utils';
+import { ApiPromise, WsProvider } from '@polkadot/api'
+import { Option, Vec, Bytes, u32 } from '@polkadot/types'
+import { Codec } from '@polkadot/types/types'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { UserInfo, PaidMembershipTerms, MemberId } from '@rome/types/lib/members'
+import { Seat, VoteKind } from '@rome/types'
+import { Balance, EventRecord } from '@polkadot/types/interfaces'
+import BN from 'bn.js'
+import { SubmittableExtrinsic } from '@polkadot/api/types'
+import { Sender } from './sender'
+import { Utils } from './utils'
 
 export class ApiWrapper {
-  private readonly api: ApiPromise;
-  private readonly sender: Sender;
+  private readonly api: ApiPromise
+  private readonly sender: Sender
 
   public static async create(provider: WsProvider): Promise<ApiWrapper> {
-    const api = await ApiPromise.create({ provider });
-    return new ApiWrapper(api);
+    const api = await ApiPromise.create({ provider })
+    return new ApiWrapper(api)
   }
 
   constructor(api: ApiPromise) {
-    this.api = api;
-    this.sender = new Sender(api);
+    this.api = api
+    this.sender = new Sender(api)
   }
 
   public close() {
-    this.api.disconnect();
+    this.api.disconnect()
   }
 
   public async buyMembership(
@@ -38,73 +38,73 @@ export class ApiWrapper {
       this.api.tx.members.buyMembership(paidTermsId, new UserInfo({ handle: name, avatar_uri: '', about: '' })),
       account,
       expectFailure
-    );
+    )
   }
 
   public getMemberIds(address: string): Promise<MemberId[]> {
-    return this.api.query.members.memberIdsByControllerAccountId<Vec<MemberId>>(address);
+    return this.api.query.members.memberIdsByControllerAccountId<Vec<MemberId>>(address)
   }
 
   public getBalance(address: string): Promise<Balance> {
-    return this.api.query.balances.freeBalance<Balance>(address);
+    return this.api.query.balances.freeBalance<Balance>(address)
   }
 
   public async transferBalance(from: KeyringPair, to: string, amount: BN): Promise<void> {
-    return this.sender.signAndSend(this.api.tx.balances.transfer(to, amount), from);
+    return this.sender.signAndSend(this.api.tx.balances.transfer(to, amount), from)
   }
 
   public getPaidMembershipTerms(paidTermsId: number): Promise<Option<PaidMembershipTerms>> {
-    return this.api.query.members.paidMembershipTermsById<Option<PaidMembershipTerms>>(paidTermsId);
+    return this.api.query.members.paidMembershipTermsById<Option<PaidMembershipTerms>>(paidTermsId)
   }
 
   public getMembershipFee(paidTermsId: number): Promise<BN> {
-    return this.getPaidMembershipTerms(paidTermsId).then(terms => terms.unwrap().fee.toBn());
+    return this.getPaidMembershipTerms(paidTermsId).then((terms) => terms.unwrap().fee.toBn())
   }
 
   public async transferBalanceToAccounts(from: KeyringPair, to: KeyringPair[], amount: BN): Promise<void[]> {
     return Promise.all(
-      to.map(async keyPair => {
-        await this.transferBalance(from, keyPair.address, amount);
+      to.map(async (keyPair) => {
+        await this.transferBalance(from, keyPair.address, amount)
       })
-    );
+    )
   }
 
   private getBaseTxFee(): BN {
-    return this.api.createType('BalanceOf', this.api.consts.transactionPayment.transactionBaseFee).toBn();
+    return this.api.createType('BalanceOf', this.api.consts.transactionPayment.transactionBaseFee).toBn()
   }
 
   private estimateTxFee(tx: SubmittableExtrinsic<'promise'>): BN {
-    const baseFee: BN = this.getBaseTxFee();
-    const byteFee: BN = this.api.createType('BalanceOf', this.api.consts.transactionPayment.transactionByteFee).toBn();
-    return Utils.calcTxLength(tx).mul(byteFee).add(baseFee);
+    const baseFee: BN = this.getBaseTxFee()
+    const byteFee: BN = this.api.createType('BalanceOf', this.api.consts.transactionPayment.transactionByteFee).toBn()
+    return Utils.calcTxLength(tx).mul(byteFee).add(baseFee)
   }
 
   public estimateBuyMembershipFee(account: KeyringPair, paidTermsId: number, name: string): BN {
     return this.estimateTxFee(
       this.api.tx.members.buyMembership(paidTermsId, new UserInfo({ handle: name, avatar_uri: '', about: '' }))
-    );
+    )
   }
 
   public estimateApplyForCouncilFee(amount: BN): BN {
-    return this.estimateTxFee(this.api.tx.councilElection.apply(amount));
+    return this.estimateTxFee(this.api.tx.councilElection.apply(amount))
   }
 
   public estimateVoteForCouncilFee(nominee: string, salt: string, stake: BN): BN {
-    const hashedVote: string = Utils.hashVote(nominee, salt);
-    return this.estimateTxFee(this.api.tx.councilElection.vote(hashedVote, stake));
+    const hashedVote: string = Utils.hashVote(nominee, salt)
+    return this.estimateTxFee(this.api.tx.councilElection.vote(hashedVote, stake))
   }
 
   public estimateRevealVoteFee(nominee: string, salt: string): BN {
-    const hashedVote: string = Utils.hashVote(nominee, salt);
-    return this.estimateTxFee(this.api.tx.councilElection.reveal(hashedVote, nominee, salt));
+    const hashedVote: string = Utils.hashVote(nominee, salt)
+    return this.estimateTxFee(this.api.tx.councilElection.reveal(hashedVote, nominee, salt))
   }
 
   public estimateProposeRuntimeUpgradeFee(stake: BN, name: string, description: string, runtime: string): BN {
-    return this.estimateTxFee(this.api.tx.proposals.createProposal(stake, name, description, runtime));
+    return this.estimateTxFee(this.api.tx.proposals.createProposal(stake, name, description, runtime))
   }
 
   public estimateProposeTextFee(stake: BN, name: string, description: string, text: string): BN {
-    return this.estimateTxFee(this.api.tx.proposalsCodex.createTextProposal(stake, name, description, stake, text));
+    return this.estimateTxFee(this.api.tx.proposalsCodex.createTextProposal(stake, name, description, stake, text))
   }
 
   public estimateProposeSpendingFee(
@@ -116,7 +116,7 @@ export class ApiWrapper {
   ): BN {
     return this.estimateTxFee(
       this.api.tx.proposalsCodex.createSpendingProposal(stake, title, description, stake, balance, destination)
-    );
+    )
   }
 
   public estimateProposeWorkingGroupMintCapacityFee(title: string, description: string, stake: BN, balance: BN): BN {
@@ -128,40 +128,40 @@ export class ApiWrapper {
         stake,
         balance
       )
-    );
+    )
   }
 
   public estimateVoteForRuntimeProposalFee(): BN {
-    return this.estimateTxFee(this.api.tx.proposals.voteOnProposal(0, 'Approve'));
+    return this.estimateTxFee(this.api.tx.proposals.voteOnProposal(0, 'Approve'))
   }
 
   public newEstimate(): BN {
-    return new BN(100);
+    return new BN(100)
   }
 
   private applyForCouncilElection(account: KeyringPair, amount: BN): Promise<void> {
-    return this.sender.signAndSend(this.api.tx.councilElection.apply(amount), account, false);
+    return this.sender.signAndSend(this.api.tx.councilElection.apply(amount), account, false)
   }
 
   public batchApplyForCouncilElection(accounts: KeyringPair[], amount: BN): Promise<void[]> {
     return Promise.all(
-      accounts.map(async keyPair => {
-        await this.applyForCouncilElection(keyPair, amount);
+      accounts.map(async (keyPair) => {
+        await this.applyForCouncilElection(keyPair, amount)
       })
-    );
+    )
   }
 
   public async getCouncilElectionStake(address: string): Promise<BN> {
     // TODO alter then `applicantStake` type will be introduced
-    return this.api.query.councilElection.applicantStakes(address).then(stake => {
-      const parsed = JSON.parse(stake.toString());
-      return new BN(parsed.new);
-    });
+    return this.api.query.councilElection.applicantStakes(address).then((stake) => {
+      const parsed = JSON.parse(stake.toString())
+      return new BN(parsed.new)
+    })
   }
 
   private voteForCouncilMember(account: KeyringPair, nominee: string, salt: string, stake: BN): Promise<void> {
-    const hashedVote: string = Utils.hashVote(nominee, salt);
-    return this.sender.signAndSend(this.api.tx.councilElection.vote(hashedVote, stake), account, false);
+    const hashedVote: string = Utils.hashVote(nominee, salt)
+    return this.sender.signAndSend(this.api.tx.councilElection.vote(hashedVote, stake), account, false)
   }
 
   public batchVoteForCouncilMember(
@@ -172,22 +172,22 @@ export class ApiWrapper {
   ): Promise<void[]> {
     return Promise.all(
       accounts.map(async (keyPair, index) => {
-        await this.voteForCouncilMember(keyPair, nominees[index].address, salt[index], stake);
+        await this.voteForCouncilMember(keyPair, nominees[index].address, salt[index], stake)
       })
-    );
+    )
   }
 
   private revealVote(account: KeyringPair, commitment: string, nominee: string, salt: string): Promise<void> {
-    return this.sender.signAndSend(this.api.tx.councilElection.reveal(commitment, nominee, salt), account, false);
+    return this.sender.signAndSend(this.api.tx.councilElection.reveal(commitment, nominee, salt), account, false)
   }
 
   public batchRevealVote(accounts: KeyringPair[], nominees: KeyringPair[], salt: string[]): Promise<void[]> {
     return Promise.all(
       accounts.map(async (keyPair, index) => {
-        const commitment = Utils.hashVote(nominees[index].address, salt[index]);
-        await this.revealVote(keyPair, commitment, nominees[index].address, salt[index]);
+        const commitment = Utils.hashVote(nominees[index].address, salt[index])
+        await this.revealVote(keyPair, commitment, nominees[index].address, salt[index])
       })
-    );
+    )
   }
 
   // TODO consider using configurable genesis instead
@@ -196,7 +196,7 @@ export class ApiWrapper {
       this.api.tx.sudo.sudo(this.api.tx.councilElection.setStageAnnouncing(endsAtBlock)),
       sudo,
       false
-    );
+    )
   }
 
   public sudoStartVotingPerion(sudo: KeyringPair, endsAtBlock: BN): Promise<void> {
@@ -204,7 +204,7 @@ export class ApiWrapper {
       this.api.tx.sudo.sudo(this.api.tx.councilElection.setStageVoting(endsAtBlock)),
       sudo,
       false
-    );
+    )
   }
 
   public sudoStartRevealingPerion(sudo: KeyringPair, endsAtBlock: BN): Promise<void> {
@@ -212,21 +212,21 @@ export class ApiWrapper {
       this.api.tx.sudo.sudo(this.api.tx.councilElection.setStageRevealing(endsAtBlock)),
       sudo,
       false
-    );
+    )
   }
 
   public getBestBlock(): Promise<BN> {
-    return this.api.derive.chain.bestNumber();
+    return this.api.derive.chain.bestNumber()
   }
 
   public getCouncil(): Promise<Seat[]> {
-    return this.api.query.council.activeCouncil<Vec<Codec>>().then(seats => {
-      return JSON.parse(seats.toString());
-    });
+    return this.api.query.council.activeCouncil<Vec<Codec>>().then((seats) => {
+      return JSON.parse(seats.toString())
+    })
   }
 
   public getRuntime(): Promise<Bytes> {
-    return this.api.query.substrate.code<Bytes>();
+    return this.api.query.substrate.code<Bytes>()
   }
 
   public proposeRuntime(
@@ -240,7 +240,7 @@ export class ApiWrapper {
       this.api.tx.proposals.createProposal(stake, name, description, runtime),
       account,
       false
-    );
+    )
   }
 
   public async proposeText(
@@ -250,12 +250,12 @@ export class ApiWrapper {
     description: string,
     text: string
   ): Promise<void> {
-    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn();
+    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn()
     return this.sender.signAndSend(
       this.api.tx.proposalsCodex.createTextProposal(memberId, name, description, stake, text),
       account,
       false
-    );
+    )
   }
 
   public async proposeSpending(
@@ -266,12 +266,12 @@ export class ApiWrapper {
     balance: BN,
     destination: string
   ): Promise<void> {
-    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn();
+    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn()
     return this.sender.signAndSend(
       this.api.tx.proposalsCodex.createSpendingProposal(memberId, title, description, stake, balance, destination),
       account,
       false
-    );
+    )
   }
 
   public async proposeWorkingGroupMintCapacity(
@@ -281,7 +281,7 @@ export class ApiWrapper {
     stake: BN,
     balance: BN
   ): Promise<void> {
-    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn();
+    const memberId: BN = (await this.getMemberIds(account.address))[0].toBn()
     return this.sender.signAndSend(
       this.api.tx.proposalsCodex.createSetContentWorkingGroupMintCapacityProposal(
         memberId,
@@ -292,7 +292,7 @@ export class ApiWrapper {
       ),
       account,
       false
-    );
+    )
   }
 
   public approveProposal(account: KeyringPair, proposal: BN): Promise<void> {
@@ -300,71 +300,71 @@ export class ApiWrapper {
       this.api.tx.proposals.voteOnProposal(proposal, new VoteKind('Approve')),
       account,
       false
-    );
+    )
   }
 
   public batchApproveProposal(council: KeyringPair[], proposal: BN): Promise<void[]> {
     return Promise.all(
-      council.map(async keyPair => {
-        await this.approveProposal(keyPair, proposal);
+      council.map(async (keyPair) => {
+        await this.approveProposal(keyPair, proposal)
       })
-    );
+    )
   }
 
   public getBlockDuration(): BN {
-    return this.api.createType('Moment', this.api.consts.babe.expectedBlockTime).toBn();
+    return this.api.createType('Moment', this.api.consts.babe.expectedBlockTime).toBn()
   }
 
   public expectProposalCreated(): Promise<BN> {
-    return new Promise(async resolve => {
-      await this.api.query.system.events<Vec<EventRecord>>(events => {
-        events.forEach(record => {
+    return new Promise(async (resolve) => {
+      await this.api.query.system.events<Vec<EventRecord>>((events) => {
+        events.forEach((record) => {
           if (record.event.method.toString() === 'ProposalCreated') {
-            resolve(new BN(record.event.data[1].toString()));
+            resolve(new BN(record.event.data[1].toString()))
           }
-        });
-      });
-    });
+        })
+      })
+    })
   }
 
   public expectRuntimeUpgraded(): Promise<void> {
-    return new Promise(async resolve => {
-      await this.api.query.system.events<Vec<EventRecord>>(events => {
-        events.forEach(record => {
+    return new Promise(async (resolve) => {
+      await this.api.query.system.events<Vec<EventRecord>>((events) => {
+        events.forEach((record) => {
           if (record.event.method.toString() === 'RuntimeUpdated') {
-            resolve();
+            resolve()
           }
-        });
-      });
-    });
+        })
+      })
+    })
   }
 
   public expectProposalFinalized(): Promise<void> {
-    return new Promise(async resolve => {
-      await this.api.query.system.events<Vec<EventRecord>>(events => {
-        events.forEach(record => {
+    return new Promise(async (resolve) => {
+      await this.api.query.system.events<Vec<EventRecord>>((events) => {
+        events.forEach((record) => {
           if (
             record.event.method.toString() === 'ProposalStatusUpdated' &&
             record.event.data[1].toString().includes('Finalized')
           ) {
-            resolve();
+            resolve()
           }
-        });
-      });
-    });
+        })
+      })
+    })
   }
 
   public getTotalIssuance(): Promise<BN> {
-    return this.api.query.balances.totalIssuance<Balance>();
+    return this.api.query.balances.totalIssuance<Balance>()
   }
 
   public async getRequiredProposalStake(numerator: number, denominator: number): Promise<BN> {
-    const issuance: number = await (await this.getTotalIssuance()).toNumber();
-    const stake = (issuance * numerator) / denominator;
-    return new BN(stake.toFixed(0));
+    const issuance: number = await (await this.getTotalIssuance()).toNumber()
+    const stake = (issuance * numerator) / denominator
+    return new BN(stake.toFixed(0))
   }
 
   public getProposalCount(): Promise<BN> {
-    return this.api.query.proposalsEngine.proposalCount<u32>();
+    return this.api.query.proposalsEngine.proposalCount<u32>()
   }
 }

+ 2 - 2
tests/network-tests/src/rome/utils/config.ts

@@ -1,5 +1,5 @@
-import { config } from 'dotenv';
+import { config } from 'dotenv'
 
 export function initConfig() {
-  config();
+  config()
 }

+ 31 - 31
tests/network-tests/src/rome/utils/sender.ts

@@ -1,33 +1,33 @@
-import BN from 'bn.js';
-import { ApiPromise } from '@polkadot/api';
-import { Index } from '@polkadot/types/interfaces';
-import { SubmittableExtrinsic } from '@polkadot/api/types';
-import { KeyringPair } from '@polkadot/keyring/types';
+import BN from 'bn.js'
+import { ApiPromise } from '@polkadot/api'
+import { Index } from '@polkadot/types/interfaces'
+import { SubmittableExtrinsic } from '@polkadot/api/types'
+import { KeyringPair } from '@polkadot/keyring/types'
 
 export class Sender {
-  private readonly api: ApiPromise;
-  private static nonceMap: Map<string, BN> = new Map();
+  private readonly api: ApiPromise
+  private static nonceMap: Map<string, BN> = new Map()
 
   constructor(api: ApiPromise) {
-    this.api = api;
+    this.api = api
   }
 
   private async getNonce(address: string): Promise<BN> {
-    let oncahinNonce: BN = new BN(0);
+    let oncahinNonce: BN = new BN(0)
     if (!Sender.nonceMap.get(address)) {
-      oncahinNonce = await this.api.query.system.accountNonce<Index>(address);
+      oncahinNonce = await this.api.query.system.accountNonce<Index>(address)
     }
-    let nonce: BN | undefined = Sender.nonceMap.get(address);
+    let nonce: BN | undefined = Sender.nonceMap.get(address)
     if (!nonce) {
-      nonce = oncahinNonce;
+      nonce = oncahinNonce
     }
-    const nextNonce: BN = nonce.addn(1);
-    Sender.nonceMap.set(address, nextNonce);
-    return nonce;
+    const nextNonce: BN = nonce.addn(1)
+    Sender.nonceMap.set(address, nextNonce)
+    return nonce
   }
 
   private clearNonce(address: string): void {
-    Sender.nonceMap.delete(address);
+    Sender.nonceMap.delete(address)
   }
 
   public async signAndSend(
@@ -36,31 +36,31 @@ export class Sender {
     expectFailure = false
   ): Promise<void> {
     return new Promise(async (resolve, reject) => {
-      const nonce: BN = await this.getNonce(account.address);
-      const signedTx = tx.sign(account, { nonce });
+      const nonce: BN = await this.getNonce(account.address)
+      const signedTx = tx.sign(account, { nonce })
       await signedTx
-        .send(async result => {
+        .send(async (result) => {
           if (result.status.isFinalized === true && result.events !== undefined) {
-            result.events.forEach(event => {
+            result.events.forEach((event) => {
               if (event.event.method === 'ExtrinsicFailed') {
                 if (expectFailure) {
-                  resolve();
+                  resolve()
                 } else {
-                  reject(new Error('Extrinsic failed unexpectedly'));
+                  reject(new Error('Extrinsic failed unexpectedly'))
                 }
               }
-            });
-            resolve();
+            })
+            resolve()
           }
           if (result.status.isFuture) {
-            console.log('nonce ' + nonce + ' for account ' + account.address + ' is in future');
-            this.clearNonce(account.address);
-            reject(new Error('Extrinsic nonce is in future'));
+            console.log('nonce ' + nonce + ' for account ' + account.address + ' is in future')
+            this.clearNonce(account.address)
+            reject(new Error('Extrinsic nonce is in future'))
           }
         })
-        .catch(error => {
-          reject(error);
-        });
-    });
+        .catch((error) => {
+          reject(error)
+        })
+    })
   }
 }

+ 23 - 23
tests/network-tests/src/rome/utils/utils.ts

@@ -1,16 +1,16 @@
-import { IExtrinsic } from '@polkadot/types/types';
-import { compactToU8a, stringToU8a, u8aToHex } from '@polkadot/util';
-import { blake2AsHex } from '@polkadot/util-crypto';
-import BN from 'bn.js';
-import fs from 'fs';
-import { decodeAddress } from '@polkadot/keyring';
-import { Seat } from '@rome/types';
+import { IExtrinsic } from '@polkadot/types/types'
+import { compactToU8a, stringToU8a, u8aToHex } from '@polkadot/util'
+import { blake2AsHex } from '@polkadot/util-crypto'
+import BN from 'bn.js'
+import fs from 'fs'
+import { decodeAddress } from '@polkadot/keyring'
+import { Seat } from '@rome/types'
 
 export class Utils {
-  private static LENGTH_ADDRESS = 32 + 1; // publicKey + prefix
-  private static LENGTH_ERA = 2; // assuming mortals
-  private static LENGTH_SIGNATURE = 64; // assuming ed25519 or sr25519
-  private static LENGTH_VERSION = 1; // 0x80 & version
+  private static LENGTH_ADDRESS = 32 + 1 // publicKey + prefix
+  private static LENGTH_ERA = 2 // assuming mortals
+  private static LENGTH_SIGNATURE = 64 // assuming ed25519 or sr25519
+  private static LENGTH_VERSION = 1 // 0x80 & version
 
   public static calcTxLength = (extrinsic?: IExtrinsic | null, nonce?: BN): BN => {
     return new BN(
@@ -20,31 +20,31 @@ export class Utils {
         Utils.LENGTH_ERA +
         compactToU8a(nonce || 0).length +
         (extrinsic ? extrinsic.encodedLength : 0)
-    );
-  };
+    )
+  }
 
   /** hash(accountId + salt) */
   public static hashVote(accountId: string, salt: string): string {
-    const accountU8a = decodeAddress(accountId);
-    const saltU8a = stringToU8a(salt);
-    const voteU8a = new Uint8Array(accountU8a.length + saltU8a.length);
-    voteU8a.set(accountU8a);
-    voteU8a.set(saltU8a, accountU8a.length);
+    const accountU8a = decodeAddress(accountId)
+    const saltU8a = stringToU8a(salt)
+    const voteU8a = new Uint8Array(accountU8a.length + saltU8a.length)
+    voteU8a.set(accountU8a)
+    voteU8a.set(saltU8a, accountU8a.length)
 
-    const hash = blake2AsHex(voteU8a, 256);
+    const hash = blake2AsHex(voteU8a, 256)
     // console.log('Vote hash:', hash, 'for', { accountId, salt });
-    return hash;
+    return hash
   }
 
   public static wait(ms: number): Promise<void> {
-    return new Promise(resolve => setTimeout(resolve, ms));
+    return new Promise((resolve) => setTimeout(resolve, ms))
   }
 
   public static getTotalStake(seat: Seat): BN {
-    return new BN(+seat.stake.toString() + seat.backers.reduce((a, baker) => a + +baker.stake.toString(), 0));
+    return new BN(+seat.stake.toString() + seat.backers.reduce((a, baker) => a + +baker.stake.toString(), 0))
   }
 
   public static readRuntimeFromFile(path: string): string {
-    return u8aToHex(fs.readFileSync(path));
+    return u8aToHex(fs.readFileSync(path))
   }
 }

+ 3 - 10
yarn.lock

@@ -1828,7 +1828,7 @@
     "@types/istanbul-reports" "^1.1.1"
     "@types/yargs" "^13.0.0"
 
-"@joystream/types@./types", "@joystream/types@link:types", "@nicaea/types@link:types":
+"@joystream/types@./types":
   version "0.11.0"
   dependencies:
     "@polkadot/keyring" "^1.7.0-beta.5"
@@ -2585,15 +2585,8 @@
     glob-to-regexp "^0.3.0"
 
 "@nicaea/types@link:types":
-  version "0.11.0"
-  dependencies:
-    "@polkadot/keyring" "^1.7.0-beta.5"
-    "@polkadot/types" "^0.96.1"
-    "@types/lodash" "^4.14.157"
-    "@types/vfile" "^4.0.0"
-    ajv "^6.11.0"
-    lodash "^4.17.15"
-    moment "^2.24.0"
+  version "0.0.0"
+  uid ""
 
 "@nodelib/fs.scandir@2.1.3":
   version "2.1.3"

Some files were not shown because too many files changed in this diff