manageWorkerAsWorker.ts 3.7 KB

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