manageWorkerAsWorker.ts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import { Api, WorkingGroups } from '../../Api'
  2. import { FlowProps } from '../../Flow'
  3. import {
  4. AddWorkerOpeningFixture,
  5. ApplyForOpeningFixture,
  6. BeginApplicationReviewFixture,
  7. FillOpeningFixture,
  8. IncreaseStakeFixture,
  9. UpdateRewardAccountFixture,
  10. } from '../../fixtures/workingGroupModule'
  11. import BN from 'bn.js'
  12. import { OpeningId } from '@joystream/types/hiring'
  13. import { BuyMembershipHappyCaseFixture } from '../../fixtures/membershipModule'
  14. import { assert } from 'chai'
  15. import { FixtureRunner } from '../../Fixture'
  16. import { extendDebug } from '../../Debugger'
  17. export default {
  18. storage: async function ({ api, env }: FlowProps): Promise<void> {
  19. return manageWorkerAsWorker(api, env, WorkingGroups.StorageWorkingGroup)
  20. },
  21. content: async function ({ api, env }: FlowProps): Promise<void> {
  22. return manageWorkerAsWorker(api, env, WorkingGroups.ContentWorkingGroup)
  23. },
  24. distribution: async function ({ api, env }: FlowProps): Promise<void> {
  25. return manageWorkerAsWorker(api, env, WorkingGroups.DistributionWorkingGroup)
  26. },
  27. }
  28. // Manage worker as worker
  29. async function manageWorkerAsWorker(api: Api, env: NodeJS.ProcessEnv, group: WorkingGroups) {
  30. const debug = extendDebug(`flow:manageWorkerAsWorker:${group}`)
  31. debug('Started')
  32. const applicationStake: BN = new BN(env.WORKING_GROUP_APPLICATION_STAKE!)
  33. const roleStake: BN = new BN(env.WORKING_GROUP_ROLE_STAKE!)
  34. const firstRewardInterval: BN = new BN(env.LONG_REWARD_INTERVAL!)
  35. const rewardInterval: BN = new BN(env.LONG_REWARD_INTERVAL!)
  36. const payoutAmount: BN = new BN(env.PAYOUT_AMOUNT!)
  37. const unstakingPeriod: BN = new BN(env.STORAGE_WORKING_GROUP_UNSTAKING_PERIOD!)
  38. const openingActivationDelay: BN = new BN(0)
  39. const paidTerms = api.createPaidTermId(new BN(+env.MEMBERSHIP_PAID_TERMS!))
  40. const lead = await api.getGroupLead(group)
  41. assert(lead)
  42. const newMembers = api.createKeyPairs(1).map((key) => key.address)
  43. const memberSetFixture = new BuyMembershipHappyCaseFixture(api, newMembers, paidTerms)
  44. // Recreating set of members
  45. await new FixtureRunner(memberSetFixture).run()
  46. const applicant = newMembers[0]
  47. const addWorkerOpeningFixture = new AddWorkerOpeningFixture(
  48. api,
  49. applicationStake,
  50. roleStake,
  51. openingActivationDelay,
  52. unstakingPeriod,
  53. group
  54. )
  55. // Add worker opening
  56. await new FixtureRunner(addWorkerOpeningFixture).run()
  57. // First apply for worker opening
  58. const applyForWorkerOpeningFixture = new ApplyForOpeningFixture(
  59. api,
  60. [applicant],
  61. applicationStake,
  62. roleStake,
  63. addWorkerOpeningFixture.getCreatedOpeningId() as OpeningId,
  64. group
  65. )
  66. await new FixtureRunner(applyForWorkerOpeningFixture).run()
  67. const applicationIdToHire = applyForWorkerOpeningFixture.getApplicationIds()[0]
  68. // Begin application review
  69. const beginApplicationReviewFixture = new BeginApplicationReviewFixture(
  70. api,
  71. addWorkerOpeningFixture.getCreatedOpeningId() as OpeningId,
  72. group
  73. )
  74. await new FixtureRunner(beginApplicationReviewFixture).run()
  75. // Fill worker opening
  76. const fillOpeningFixture = new FillOpeningFixture(
  77. api,
  78. [applicationIdToHire],
  79. addWorkerOpeningFixture.getCreatedOpeningId() as OpeningId,
  80. firstRewardInterval,
  81. rewardInterval,
  82. payoutAmount,
  83. group
  84. )
  85. await new FixtureRunner(fillOpeningFixture).run()
  86. const workerId = fillOpeningFixture.getWorkerIds()[0]
  87. const increaseStakeFixture: IncreaseStakeFixture = new IncreaseStakeFixture(api, workerId, group)
  88. // Increase worker stake
  89. await new FixtureRunner(increaseStakeFixture).run()
  90. const updateRewardAccountFixture: UpdateRewardAccountFixture = new UpdateRewardAccountFixture(api, workerId, group)
  91. // Update reward account
  92. await new FixtureRunner(updateRewardAccountFixture).run()
  93. const updateRoleAccountFixture: UpdateRewardAccountFixture = new UpdateRewardAccountFixture(api, workerId, group)
  94. // Update role account
  95. await new FixtureRunner(updateRoleAccountFixture).run()
  96. debug('Done')
  97. }