git.delta.rocks / unique-network / refs/commits / 900be63a359f

difftreelog

source

tests/src/governance/init.test.ts8.1 KiBsourcehistory
1import {IKeyringPair} from '@polkadot/types/types';2import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util';3import {Event} from '../util/playgrounds/unique.dev';4import {ICounselors, democracyLaunchPeriod, democracyVotingPeriod, ITechComms, democracyEnactmentPeriod, clearCouncil, clearTechComm, clearFellowship} from './util';56describeGov('Governance: Initialization', () => {7  let donor: IKeyringPair;8  let sudoer: IKeyringPair;9  let counselors: ICounselors;10  let techcomms: ITechComms;11  let coreDevs: any;1213  const expectedAlexFellowRank = 7;14  const expectedFellowRank = 6;1516  before(async function() {17    await usingPlaygrounds(async (helper, privateKey) => {18      requirePalletsOrSkip(this, helper, [Pallets.Democracy, Pallets.Council, Pallets.TechnicalCommittee]);1920      const councilMembers = await helper.council.membership.getMembers();21      const techcommMembers = await helper.technicalCommittee.membership.getMembers();22      expect(councilMembers.length == 0, 'The Council must be empty before the Gov Init');23      expect(techcommMembers.length == 0, 'The Technical Commettee must be empty before the Gov Init');2425      donor = await privateKey({url: import.meta.url});26      sudoer = await privateKey('//Alice');2728      const counselorsNum = 5;29      const techCommsNum = 3;30      const coreDevsNum = 2;31      const [32        alex,33        ildar,34        charu,35        filip,36        irina,3738        greg,39        andy,40        constantine,4142        yaroslav,43        daniel,44      ] = await helper.arrange.createAccounts(new Array(counselorsNum + techCommsNum + coreDevsNum).fill(10_000n), donor);4546      counselors = {47        alex,48        ildar,49        charu,50        filip,51        irina,52      };5354      techcomms = {55        greg,56        andy,57        constantine,58      };5960      coreDevs = {61        yaroslav: yaroslav,62        daniel: daniel,63      };64    });65  });6667  itSub('Initialize Governance', async ({helper}) => {68    const promoteFellow = (fellow: string, promotionsNum: number) => new Array(promotionsNum).fill(helper.fellowship.collective.promoteCall(fellow));6970    const expectFellowRank = async (fellow: string, expectedRank: number) => {71      expect(await helper.fellowship.collective.getMemberRank(fellow)).to.be.equal(expectedRank);72    };7374    console.log('\t- Setup the Prime of the Council via sudo');75    await helper.getSudo().utility.batchAll(sudoer, [76      helper.council.membership.addMemberCall(counselors.alex.address),77      helper.council.membership.setPrimeCall(counselors.alex.address),7879      helper.fellowship.collective.addMemberCall(counselors.alex.address),80      ...promoteFellow(counselors.alex.address, expectedAlexFellowRank),81    ]);8283    let councilMembers = await helper.council.membership.getMembers();84    const councilPrime = await helper.council.collective.getPrimeMember();85    const alexFellowRank = await helper.fellowship.collective.getMemberRank(counselors.alex.address);86    expect(councilMembers).to.be.deep.equal([counselors.alex.address]);87    expect(councilPrime).to.be.equal(counselors.alex.address);88    expect(alexFellowRank).to.be.equal(expectedAlexFellowRank);8990    console.log('\t- The Council Prime initializes the Technical Commettee');91    const councilProposalThreshold = 1;9293    await helper.council.collective.propose(94      counselors.alex,95      helper.utility.batchAllCall([96        helper.technicalCommittee.membership.addMemberCall(techcomms.greg.address),97        helper.technicalCommittee.membership.addMemberCall(techcomms.andy.address),98        helper.technicalCommittee.membership.addMemberCall(techcomms.constantine.address),99100        helper.technicalCommittee.membership.setPrimeCall(techcomms.greg.address),101      ]),102      councilProposalThreshold,103    );104105    const techCommMembers = await helper.technicalCommittee.membership.getMembers();106    const techCommPrime = await helper.technicalCommittee.membership.getPrimeMember();107    const expectedTechComms = [techcomms.greg.address, techcomms.andy.address, techcomms.constantine.address];108    expect(techCommMembers.length).to.be.equal(expectedTechComms.length);109    expect(techCommMembers).to.containSubset(expectedTechComms);110    expect(techCommPrime).to.be.equal(techcomms.greg.address);111112    console.log('\t- The Council Prime initiates a referendum to add counselors');113    const returnPreimageHash = true;114    const preimageHash = await helper.preimage.notePreimageFromCall(counselors.alex, helper.utility.batchAllCall([115      helper.council.membership.addMemberCall(counselors.ildar.address),116      helper.council.membership.addMemberCall(counselors.charu.address),117      helper.council.membership.addMemberCall(counselors.filip.address),118      helper.council.membership.addMemberCall(counselors.irina.address),119120      helper.fellowship.collective.addMemberCall(counselors.charu.address),121      helper.fellowship.collective.addMemberCall(counselors.ildar.address),122      helper.fellowship.collective.addMemberCall(counselors.irina.address),123      helper.fellowship.collective.addMemberCall(counselors.filip.address),124      helper.fellowship.collective.addMemberCall(techcomms.greg.address),125      helper.fellowship.collective.addMemberCall(techcomms.andy.address),126      helper.fellowship.collective.addMemberCall(techcomms.constantine.address),127      helper.fellowship.collective.addMemberCall(coreDevs.yaroslav.address),128      helper.fellowship.collective.addMemberCall(coreDevs.daniel.address),129130      ...promoteFellow(counselors.charu.address, expectedFellowRank),131      ...promoteFellow(counselors.ildar.address, expectedFellowRank),132      ...promoteFellow(counselors.irina.address, expectedFellowRank),133      ...promoteFellow(counselors.filip.address, expectedFellowRank),134      ...promoteFellow(techcomms.greg.address, expectedFellowRank),135      ...promoteFellow(techcomms.andy.address, expectedFellowRank),136      ...promoteFellow(techcomms.constantine.address, expectedFellowRank),137      ...promoteFellow(coreDevs.yaroslav.address, expectedFellowRank),138      ...promoteFellow(coreDevs.daniel.address, expectedFellowRank),139    ]), returnPreimageHash);140141    await helper.council.collective.propose(142      counselors.alex,143      helper.democracy.externalProposeDefaultWithPreimageCall(preimageHash),144      councilProposalThreshold,145    );146147    console.log('\t- The referendum is being decided');148    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);149150    await helper.democracy.vote(counselors.filip, startedEvent.referendumIndex, {151      Standard: {152        vote: {153          aye: true,154          conviction: 1,155        },156        balance: 10_000n,157      },158    });159160    const passedReferendumEvent = await helper.wait.expectEvent(democracyVotingPeriod, Event.Democracy.Passed);161    expect(passedReferendumEvent.referendumIndex).to.be.equal(startedEvent.referendumIndex);162163    await helper.wait.expectEvent(democracyEnactmentPeriod, Event.Scheduler.Dispatched);164165    councilMembers = await helper.council.membership.getMembers();166    const expectedCounselors = [167      counselors.alex.address,168      counselors.ildar.address,169      counselors.charu.address,170      counselors.filip.address,171      counselors.irina.address,172    ];173    expect(councilMembers.length).to.be.equal(expectedCounselors.length);174    expect(councilMembers).to.containSubset(expectedCounselors);175176    await expectFellowRank(counselors.ildar.address, expectedFellowRank);177    await expectFellowRank(counselors.charu.address, expectedFellowRank);178    await expectFellowRank(counselors.filip.address, expectedFellowRank);179    await expectFellowRank(counselors.irina.address, expectedFellowRank);180    await expectFellowRank(techcomms.greg.address, expectedFellowRank);181    await expectFellowRank(techcomms.andy.address, expectedFellowRank);182    await expectFellowRank(techcomms.constantine.address, expectedFellowRank);183    await expectFellowRank(coreDevs.yaroslav.address, expectedFellowRank);184    await expectFellowRank(coreDevs.daniel.address, expectedFellowRank);185  });186187  after(async function() {188    await clearFellowship(sudoer);189    await clearTechComm(sudoer);190    await clearCouncil(sudoer);191  });192});