createMembers.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { QueryNodeApi } from '../../QueryNodeApi'
  2. import { MemberId } from '@joystream/types/common'
  3. import { BaseQueryNodeFixture, FixtureRunner } from '../../Fixture'
  4. import { Api } from '../../Api'
  5. import { KeyringPair } from '@polkadot/keyring/types'
  6. import BN from 'bn.js'
  7. import { BuyMembershipHappyCaseFixture } from '../membership'
  8. export interface IMember {
  9. keyringPair: KeyringPair
  10. account: string
  11. memberId: MemberId
  12. }
  13. export class CreateMembersFixture extends BaseQueryNodeFixture {
  14. private memberCount: number
  15. private topupAmount: BN
  16. private createdItems: IMember[] = []
  17. constructor(api: Api, query: QueryNodeApi, memberCount: number, topupAmount: BN) {
  18. super(api, query)
  19. this.memberCount = memberCount
  20. this.topupAmount = topupAmount
  21. }
  22. public getCreatedItems() {
  23. return this.createdItems
  24. }
  25. /*
  26. Execute this Fixture.
  27. */
  28. public async execute(): Promise<void> {
  29. this.debug('Creating member')
  30. this.createdItems = await this.createMembers(this.memberCount)
  31. this.debug('Top-uping accounts')
  32. await this.api.treasuryTransferBalanceToAccounts(
  33. this.createdItems.map((item) => item.keyringPair.address),
  34. this.topupAmount
  35. )
  36. }
  37. /**
  38. Creates new accounts and registers memberships for them.
  39. */
  40. private async createMembers(numberOfMembers: number): Promise<IMember[]> {
  41. const keyringPairs = (await this.api.createKeyPairs(numberOfMembers)).map((kp) => kp.key)
  42. const accounts = keyringPairs.map((item) => item.address)
  43. const buyMembershipsFixture = new BuyMembershipHappyCaseFixture(this.api, this.query, accounts)
  44. await new FixtureRunner(buyMembershipsFixture).run()
  45. const memberIds = buyMembershipsFixture.getCreatedMembers()
  46. return keyringPairs.map((item, index) => ({
  47. keyringPair: item,
  48. account: accounts[index],
  49. memberId: memberIds[index],
  50. }))
  51. }
  52. }