Skip to content

Commit

Permalink
allow initiator to raise dispute
Browse files Browse the repository at this point in the history
  • Loading branch information
f-gate committed Dec 12, 2023
1 parent 646b179 commit 5eacbe5
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 6 deletions.
9 changes: 5 additions & 4 deletions pallets/proposals/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -350,8 +350,8 @@ pub mod pallet {
MilestonesAlreadyInDispute,
/// You cannot raise a dispute on an approved milestone.
CannotRaiseDisputeOnApprovedMilestone,
/// Only a contributor can initiate a refund.
OnlyContributorsCanInitiateRefund,
/// Only a contributor or initiator can initiate a refund.
NotPermittedToRaiseDispute,
/// Only the ForeignAssetSigner can mint tokens
RequireForeignAssetSigner,
/// A Jury is required to create a project.
Expand Down Expand Up @@ -456,9 +456,10 @@ pub mod pallet {
Error::<T>::MilestoneDoesNotExist
);
ensure!(
project.contributions.contains_key(&who),
Error::<T>::OnlyContributorsCanRaiseDispute
project.contributions.contains_key(&who) || &who == project.initiator,
Error::<T>::NotPermittedToRaiseDispute
);

ensure!(
!ProjectsInDispute::<T>::contains_key(project_key),
Error::<T>::MilestonesAlreadyInDispute
Expand Down
65 changes: 63 additions & 2 deletions pallets/proposals/src/tests/disputes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use pallet_disputes::DisputeResult;
use test_utils::*;

#[test]
fn raise_dispute_not_contributor() {
fn raise_dispute_not_contributor_or_initiator() {
build_test_externality().execute_with(|| {
let contributions = get_contributions::<Test>(vec![BOB, CHARLIE], 1_000_000u128);
let milestones = get_milestones(10);
Expand All @@ -27,7 +27,7 @@ fn raise_dispute_not_contributor() {

assert_noop!(
Proposals::raise_dispute(RuntimeOrigin::signed(JOHN), project_key, milestone_keys),
Error::<Test>::OnlyContributorsCanRaiseDispute
Error::<Test>::NotPermittedToRaiseDispute
);
})
}
Expand Down Expand Up @@ -627,3 +627,64 @@ fn raise_dispute_with_single_jury_auto_completes() {
});
})
}

#[test]
fn raise_dispute_as_initiator_success() {
build_test_externality().execute_with(|| {
let contributions = get_contributions::<Test>(vec![BOB, CHARLIE], 1_000_000u128);
let milestones = get_milestones(10);
let milestone_key = 0;
let jury = vec![JURY_1, JURY_2];

let project_key = create_and_fund_project::<Test>(
ALICE,
contributions,
milestones.clone(),
CurrencyId::Native,
jury,
)
.unwrap();

let dispute_milestone_keys: BoundedVec<u32, <Test as Config>::MaxMilestonesPerProject> =
(0u32..milestones.len() as u32)
.collect::<Vec<u32>>()
.try_into()
.unwrap();
assert_ok!(Proposals::raise_dispute(
RuntimeOrigin::signed(ALICE),
project_key,
dispute_milestone_keys
));
})
}

#[test]
fn raise_dispute_as_contributor_success() {
build_test_externality().execute_with(|| {
let contributions = get_contributions::<Test>(vec![BOB, CHARLIE], 1_000_000u128);
let milestones = get_milestones(10);
let milestone_key = 0;
let jury = vec![JURY_1, JURY_2];

let project_key = create_and_fund_project::<Test>(
ALICE,
contributions,
milestones.clone(),
CurrencyId::Native,
jury,
)
.unwrap();

let dispute_milestone_keys: BoundedVec<u32, <Test as Config>::MaxMilestonesPerProject> =
(0u32..milestones.len() as u32)
.collect::<Vec<u32>>()
.try_into()
.unwrap();
assert_ok!(Proposals::raise_dispute(
RuntimeOrigin::signed(BOB),
project_key,
dispute_milestone_keys
));
})
}

0 comments on commit 5eacbe5

Please sign in to comment.