SetBudgetFixture.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import BN from 'bn.js'
  2. import { assert } from 'chai'
  3. import { Api } from '../../Api'
  4. import { QueryNodeApi } from '../../QueryNodeApi'
  5. import { EventDetails, WorkingGroupModuleName } from '../../types'
  6. import { BaseWorkingGroupFixture } from './BaseWorkingGroupFixture'
  7. import { SubmittableExtrinsic } from '@polkadot/api/types'
  8. import { ISubmittableResult } from '@polkadot/types/types/'
  9. import { Utils } from '../../utils'
  10. import { BudgetSetEventFieldsFragment, WorkingGroupFieldsFragment } from '../../graphql/generated/queries'
  11. export class SetBudgetFixture extends BaseWorkingGroupFixture {
  12. protected budgets: BN[]
  13. public constructor(api: Api, query: QueryNodeApi, group: WorkingGroupModuleName, budgets: BN[]) {
  14. super(api, query, group)
  15. this.budgets = budgets
  16. }
  17. protected async getSignerAccountOrAccounts(): Promise<string> {
  18. return (await this.api.query.sudo.key()).toString()
  19. }
  20. protected async getExtrinsics(): Promise<SubmittableExtrinsic<'promise'>[]> {
  21. const extrinsics = this.budgets.map((budget) => this.api.tx[this.group].setBudget(budget))
  22. return extrinsics.map((tx) => this.api.tx.sudo.sudo(tx))
  23. }
  24. protected getEventFromResult(result: ISubmittableResult): Promise<EventDetails> {
  25. return this.api.retrieveWorkingGroupsEventDetails(result, this.group, 'BudgetSet')
  26. }
  27. protected assertQueryNodeEventIsValid(qEvent: BudgetSetEventFieldsFragment, i: number): void {
  28. assert.equal(qEvent.group.name, this.group)
  29. assert.equal(qEvent.newBudget, this.budgets[i].toString())
  30. }
  31. protected assertQueriedGroupIsValid(qGroup: WorkingGroupFieldsFragment | null): void {
  32. Utils.assert(qGroup, 'Query node: Working group not found!')
  33. assert.equal(qGroup.budget, this.budgets[this.budgets.length - 1].toString())
  34. }
  35. async runQueryNodeChecks(): Promise<void> {
  36. await super.runQueryNodeChecks()
  37. // Query and check the events
  38. await this.query.tryQueryWithTimeout(
  39. () => this.query.getBudgetSetEvents(this.events),
  40. (qEvents) => this.assertQueryNodeEventsAreValid(qEvents)
  41. )
  42. // Check the group
  43. const qGroup = await this.query.getWorkingGroup(this.group)
  44. this.assertQueriedGroupIsValid(qGroup)
  45. }
  46. }