difftreelog
test governance init fellowship
in: master
2 files changed
tests/src/governance/init.test.tsdiffbeforeafterboth--- a/tests/src/governance/init.test.ts
+++ b/tests/src/governance/init.test.ts
@@ -1,13 +1,17 @@
import {IKeyringPair} from '@polkadot/types/types';
import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util';
import {Event} from '../util/playgrounds/unique.dev';
-import {ICounselors, democracyLaunchPeriod, democracyVotingPeriod, ITechComms, democracyEnactmentPeriod, clearCouncil, clearTechComm} from './util';
+import {ICounselors, democracyLaunchPeriod, democracyVotingPeriod, ITechComms, democracyEnactmentPeriod, clearCouncil, clearTechComm, clearFellowship} from './util';
describeGov('Governance: Initialization', () => {
let donor: IKeyringPair;
let sudoer: IKeyringPair;
let counselors: ICounselors;
let techcomms: ITechComms;
+ let coreDevs: any;
+
+ const expectedAlexFellowRank = 7;
+ const expectedFellowRank = 6;
before(async function() {
await usingPlaygrounds(async (helper, privateKey) => {
@@ -21,7 +25,24 @@
donor = await privateKey({url: import.meta.url});
sudoer = await privateKey('//Alice');
- const [alex, ildar, charu, filip, irina] = await helper.arrange.createAccounts([10_000n, 10_000n, 10_000n, 10_000n, 10_000n], donor);
+ const counselorsNum = 5;
+ const techCommsNum = 3;
+ const coreDevsNum = 2;
+ const [
+ alex,
+ ildar,
+ charu,
+ filip,
+ irina,
+
+ greg,
+ andy,
+ constantine,
+
+ yaroslav,
+ daniel,
+ ] = await helper.arrange.createAccounts(new Array(counselorsNum + techCommsNum + coreDevsNum).fill(10_000n), donor);
+
counselors = {
alex,
ildar,
@@ -30,26 +51,43 @@
irina,
};
- const [greg, andy, constantine] = await helper.arrange.createAccounts([10_000n, 10_000n, 10_000n], donor);
techcomms = {
greg,
andy,
constantine,
};
+
+ coreDevs = {
+ yaroslav: yaroslav,
+ daniel: daniel,
+ };
});
});
itSub('Initialize Governance', async ({helper}) => {
+ const promoteFellow = (fellow: string, promotionsNum: number) => {
+ return new Array(promotionsNum).fill(helper.fellowship.collective.promoteCall(fellow));
+ };
+
+ const expectFellowRank = async (fellow: string, expectedRank: number) => {
+ expect(await helper.fellowship.collective.getMemberRank(fellow)).to.be.equal(expectedRank);
+ };
+
console.log('\t- Setup the Prime of the Council via sudo');
await helper.getSudo().utility.batchAll(sudoer, [
helper.council.membership.addMemberCall(counselors.alex.address),
helper.council.membership.setPrimeCall(counselors.alex.address),
+
+ helper.fellowship.collective.addMemberCall(counselors.alex.address),
+ ...promoteFellow(counselors.alex.address, expectedAlexFellowRank),
]);
let councilMembers = await helper.council.membership.getMembers();
const councilPrime = await helper.council.collective.getPrimeMember();
+ const alexFellowRank = await helper.fellowship.collective.getMemberRank(counselors.alex.address);
expect(councilMembers).to.be.deep.equal([counselors.alex.address]);
expect(councilPrime).to.be.equal(counselors.alex.address);
+ expect(alexFellowRank).to.be.equal(expectedAlexFellowRank);
console.log('\t- The Council Prime initializes the Technical Commettee');
const councilProposalThreshold = 1;
@@ -80,6 +118,26 @@
helper.council.membership.addMemberCall(counselors.charu.address),
helper.council.membership.addMemberCall(counselors.filip.address),
helper.council.membership.addMemberCall(counselors.irina.address),
+
+ helper.fellowship.collective.addMemberCall(counselors.charu.address),
+ helper.fellowship.collective.addMemberCall(counselors.ildar.address),
+ helper.fellowship.collective.addMemberCall(counselors.irina.address),
+ helper.fellowship.collective.addMemberCall(counselors.filip.address),
+ helper.fellowship.collective.addMemberCall(techcomms.greg.address),
+ helper.fellowship.collective.addMemberCall(techcomms.andy.address),
+ helper.fellowship.collective.addMemberCall(techcomms.constantine.address),
+ helper.fellowship.collective.addMemberCall(coreDevs.yaroslav.address),
+ helper.fellowship.collective.addMemberCall(coreDevs.daniel.address),
+
+ ...promoteFellow(counselors.charu.address, expectedFellowRank),
+ ...promoteFellow(counselors.ildar.address, expectedFellowRank),
+ ...promoteFellow(counselors.irina.address, expectedFellowRank),
+ ...promoteFellow(counselors.filip.address, expectedFellowRank),
+ ...promoteFellow(techcomms.greg.address, expectedFellowRank),
+ ...promoteFellow(techcomms.andy.address, expectedFellowRank),
+ ...promoteFellow(techcomms.constantine.address, expectedFellowRank),
+ ...promoteFellow(coreDevs.yaroslav.address, expectedFellowRank),
+ ...promoteFellow(coreDevs.daniel.address, expectedFellowRank),
]), returnPreimageHash);
await helper.council.collective.propose(
@@ -116,9 +174,20 @@
];
expect(councilMembers.length).to.be.equal(expectedCounselors.length);
expect(councilMembers).to.containSubset(expectedCounselors);
+
+ await expectFellowRank(counselors.ildar.address, expectedFellowRank);
+ await expectFellowRank(counselors.charu.address, expectedFellowRank);
+ await expectFellowRank(counselors.filip.address, expectedFellowRank);
+ await expectFellowRank(counselors.irina.address, expectedFellowRank);
+ await expectFellowRank(techcomms.greg.address, expectedFellowRank);
+ await expectFellowRank(techcomms.andy.address, expectedFellowRank);
+ await expectFellowRank(techcomms.constantine.address, expectedFellowRank);
+ await expectFellowRank(coreDevs.yaroslav.address, expectedFellowRank);
+ await expectFellowRank(coreDevs.daniel.address, expectedFellowRank);
});
after(async function() {
+ await clearFellowship(sudoer);
await clearTechComm(sudoer);
await clearCouncil(sudoer);
});
tests/src/util/playgrounds/unique.tsdiffbeforeafterboth3255 return this.helper.executeExtrinsic(signer, `api.tx.${this.collective}.promoteMember`, [member]);3255 return this.helper.executeExtrinsic(signer, `api.tx.${this.collective}.promoteMember`, [member]);3256 }3256 }325732573258 promoteCall(newMember: string) {3258 promoteCall(member: string) {3259 return this.helper.constructApiCall(`api.tx.${this.collective}.promoteMember`, [newMember]);3259 return this.helper.constructApiCall(`api.tx.${this.collective}.promoteMember`, [member]);3260 }3260 }326132613262 demote(signer: TSigner, member: string) {3262 demote(signer: TSigner, member: string) {3276 .map((key) => key.args[0].toString());3276 .map((key) => key.args[0].toString());3277 }3277 }32783279 async getMemberRank(member: string) {3280 return (await this.helper.callRpc('api.query.fellowshipCollective.members', [member])).toJSON().rank;3281 }3278}3282}327932833280class ReferendaGroup extends HelperGroup<UniqueHelper> {3284class ReferendaGroup extends HelperGroup<UniqueHelper> {