Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
brickpop committed May 27, 2024
1 parent 4c0b387 commit 6453ddb
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 311 deletions.
6 changes: 1 addition & 5 deletions packages/contracts/src/governance/MainVotingPlugin.sol
Original file line number Diff line number Diff line change
Expand Up @@ -388,16 +388,12 @@ contract MainVotingPlugin is Addresslist, MajorityVotingBase, IEditors, IMembers
/// @notice Creates a proposal to remove an existing member.
/// @param _metadata The metadata of the proposal.
/// @param _proposedMember The address of the member who may eveutnally be removed.
/// @param _spacePlugin The address of the space plugin where changes will be executed
function proposeRemoveMember(
bytes calldata _metadata,
address _proposedMember,
address _spacePlugin
address _proposedMember
) public onlyMembers {
if (!isEditor(msg.sender)) {
revert ProposalCreationForbidden(msg.sender);
} else if (_spacePlugin == address(0)) {
revert EmptyContent();
} else if (!isMember(_proposedMember)) {
revert AlreadyNotMember(_proposedMember);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import {
ROOT_PERMISSION_ID,
UPGRADE_PLUGIN_PERMISSION_ID,
ONE_BYTES32,
ADDRESS_ONE,
} from '../unit-testing/common';
import {
DAO,
Expand Down Expand Up @@ -193,40 +194,6 @@ describe('Member Access Condition E2E', () => {
expect(await mainVotingPlugin.isMember(bob.address)).to.eq(true);
});

it('Executing a proposal to remove membership works', async () => {
await expect(memberAccessPlugin.proposeNewMember('0x', alice.address)).to
.not.be.reverted;
await expect(memberAccessPlugin.proposeRemoveMember('0x', alice.address)).to
.not.be.reverted;
expect(await mainVotingPlugin.isMember(alice.address)).to.eq(false);

// Valid revoke
const grantAction = {
to: mainVotingPlugin.address,
value: 0,
data: mainVotingInterface.encodeFunctionData('addMember', [bob.address]),
};
const revokeAction = {
to: mainVotingPlugin.address,
value: 0,
data: mainVotingInterface.encodeFunctionData('removeMember', [
bob.address,
]),
};

// Via direct create proposal
await expect(
memberAccessPlugin.createArbitraryProposal('0x', [grantAction])
).to.not.be.reverted;
expect(await mainVotingPlugin.isMember(bob.address)).to.eq(true);

await expect(
memberAccessPlugin.createArbitraryProposal('0x', [revokeAction])
).to.not.be.reverted;

expect(await mainVotingPlugin.isMember(bob.address)).to.eq(false);
});

it('Executing a proposal to do something else reverts', async () => {
const validActions = [
{
Expand All @@ -239,12 +206,19 @@ describe('Member Access Condition E2E', () => {
{
to: mainVotingPlugin.address,
value: 0,
data: mainVotingInterface.encodeFunctionData('removeMember', [
bob.address,
data: mainVotingInterface.encodeFunctionData('addMember', [
ADDRESS_ONE,
]),
},
];
const invalidActions = [
{
to: mainVotingPlugin.address,
value: 0,
data: mainVotingInterface.encodeFunctionData('removeMember', [
bob.address,
]),
},
{
to: dao.address,
value: 0,
Expand Down
37 changes: 20 additions & 17 deletions packages/contracts/test/unit-testing/main-voting-plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -390,38 +390,41 @@ describe('Main Voting Plugin', function () {
});

it('isMember() returns true when appropriate', async () => {
expect(await memberAccessPlugin.isMember(ADDRESS_ZERO)).to.eq(false);
expect(await memberAccessPlugin.isMember(ADDRESS_ONE)).to.eq(false);
expect(await memberAccessPlugin.isMember(ADDRESS_TWO)).to.eq(false);
expect(await mainVotingPlugin.isMember(ADDRESS_ZERO)).to.eq(false);
expect(await mainVotingPlugin.isMember(ADDRESS_ONE)).to.eq(false);
expect(await mainVotingPlugin.isMember(ADDRESS_TWO)).to.eq(false);

expect(await memberAccessPlugin.isMember(alice.address)).to.eq(true);
expect(await memberAccessPlugin.isMember(bob.address)).to.eq(true);
expect(await mainVotingPlugin.isMember(alice.address)).to.eq(true);
expect(await mainVotingPlugin.isMember(bob.address)).to.eq(true);

expect(await memberAccessPlugin.isMember(carol.address)).to.eq(false);
expect(await mainVotingPlugin.isMember(carol.address)).to.eq(false);

await memberAccessPlugin.proposeNewMember('0x', carol.address);
expect(await memberAccessPlugin.isMember(carol.address)).to.eq(true);
expect(await mainVotingPlugin.isMember(carol.address)).to.eq(true);

await memberAccessPlugin.proposeRemoveMember('0x', carol.address);
expect(await memberAccessPlugin.isMember(carol.address)).to.eq(false);
await mainVotingPlugin
.connect(bob)
.proposeRemoveMember('0x', carol.address);
await mainVotingPlugin.vote(0, VoteOption.Yes, true);
expect(await mainVotingPlugin.isMember(carol.address)).to.eq(false);

await makeEditor(carol.address);

expect(await memberAccessPlugin.isMember(carol.address)).to.eq(true);
expect(await mainVotingPlugin.isMember(carol.address)).to.eq(true);
});

it('isEditor() returns true when appropriate', async () => {
expect(await memberAccessPlugin.isEditor(ADDRESS_ZERO)).to.eq(false);
expect(await memberAccessPlugin.isEditor(ADDRESS_ONE)).to.eq(false);
expect(await memberAccessPlugin.isEditor(ADDRESS_TWO)).to.eq(false);
expect(await mainVotingPlugin.isEditor(ADDRESS_ZERO)).to.eq(false);
expect(await mainVotingPlugin.isEditor(ADDRESS_ONE)).to.eq(false);
expect(await mainVotingPlugin.isEditor(ADDRESS_TWO)).to.eq(false);

expect(await memberAccessPlugin.isEditor(alice.address)).to.eq(true);
expect(await memberAccessPlugin.isEditor(bob.address)).to.eq(false);
expect(await memberAccessPlugin.isEditor(carol.address)).to.eq(false);
expect(await mainVotingPlugin.isEditor(alice.address)).to.eq(true);
expect(await mainVotingPlugin.isEditor(bob.address)).to.eq(false);
expect(await mainVotingPlugin.isEditor(carol.address)).to.eq(false);

await makeEditor(carol.address);

expect(await memberAccessPlugin.isEditor(carol.address)).to.eq(true);
expect(await mainVotingPlugin.isEditor(carol.address)).to.eq(true);
});
});

Expand Down
Loading

0 comments on commit 6453ddb

Please sign in to comment.