Browse Source

started refactoring membership tests

Gleb Urvanov 4 years ago
parent
commit
f0807e9d6e

+ 93 - 0
tests/network-tests/src/iznik/tests/impl/membershipModule.ts

@@ -0,0 +1,93 @@
+import { ApiWrapper } from '../../utils/apiWrapper'
+import { KeyringPair } from '@polkadot/keyring/types'
+import { Keyring } from '@polkadot/api'
+import { v4 as uuid } from 'uuid'
+import BN from 'bn.js'
+import { assert } from 'chai'
+
+export class BuyMembershipHappyCaseFixture {
+  private keyPairs: KeyringPair[] = []
+
+  public getKeyPairs(): KeyringPair[] {
+    return this.keyPairs
+  }
+
+  public async runner(
+    apiWrapper: ApiWrapper,
+    sudo: KeyringPair,
+    keyPairs: KeyringPair[],
+    keyring: Keyring,
+    n: number,
+    paidTerms: number
+  ): Promise<void> {
+    // Account creation
+    for (let i = 0; i < n; i++) {
+      keyPairs.push(keyring.addFromUri(i + uuid().substring(0, 8)))
+    }
+
+    // Fee estimation and transfer
+    const membershipFee: BN = await apiWrapper.getMembershipFee(paidTerms)
+    const membershipTransactionFee: BN = apiWrapper.estimateBuyMembershipFee(
+      sudo,
+      paidTerms,
+      'member_name_which_is_longer_than_expected'
+    )
+    await apiWrapper.transferBalanceToAccounts(sudo, keyPairs, membershipTransactionFee.add(new BN(membershipFee)))
+
+    // Buying membership
+    await Promise.all(
+      keyPairs.map(async (keyPair, index) => {
+        await apiWrapper.buyMembership(keyPair, paidTerms, `new_member_${index}${keyPair.address.substring(0, 8)}`)
+      })
+    )
+
+    // Assertions
+    keyPairs.forEach((keyPair, index) =>
+      apiWrapper
+        .getMemberIds(keyPair.address)
+        .then((membership) => assert(membership.length > 0, `Account ${keyPair.address} is not a member`))
+    )
+
+    this.keyPairs = keyPairs
+  }
+}
+
+export class BuyMembershipWithInsufficienFunds {
+  public async runner(
+    apiWrapper: ApiWrapper,
+    sudo: KeyringPair,
+    aKeyPair: KeyringPair,
+    keyring: Keyring,
+    paidTerms: number
+  ) {
+    // Account creation
+    aKeyPair = keyring.addFromUri(uuid().substring(0, 8))
+
+    // Fee estimation and transfer
+    const membershipFee: BN = await apiWrapper.getMembershipFee(paidTerms)
+    const membershipTransactionFee: BN = apiWrapper.estimateBuyMembershipFee(
+      sudo,
+      paidTerms,
+      'member_name_which_is_longer_than_expected'
+    )
+    await apiWrapper.transferBalance(sudo, aKeyPair.address, membershipTransactionFee)
+
+    // Balance assertion
+    await apiWrapper
+      .getBalance(aKeyPair.address)
+      .then((balance) =>
+        assert(
+          balance.toBn() < membershipFee.add(membershipTransactionFee),
+          'Account A already have sufficient balance to purchase membership'
+        )
+      )
+
+    // Buying memebership
+    await apiWrapper.buyMembership(aKeyPair, paidTerms, `late_member_${aKeyPair.address.substring(0, 8)}`, true)
+
+    // Assertions
+    apiWrapper
+      .getMemberIds(aKeyPair.address)
+      .then((membership) => assert(membership.length === 0, 'Account A is a member'))
+  }
+}

+ 2 - 0
tests/network-tests/src/iznik/tests/membershipCreationTest.ts

@@ -13,6 +13,7 @@ tap.mocha.describe('Membership creation scenario', async () => {
   registerJoystreamTypes()
 
   const nKeyPairs: KeyringPair[] = []
+  let aKeyPair: KeyringPair
   const keyring = new Keyring({ type: 'sr25519' })
   const N: number = +process.env.MEMBERSHIP_CREATION_N!
   const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!
@@ -22,6 +23,7 @@ tap.mocha.describe('Membership creation scenario', async () => {
 
   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)