Browse Source

Add ‘create_set_lead_proposal()’ extrinsic

- add ‘create_set_lead_proposal()’ extrinsic in the codex module
- add tests
Shamil Gadelshin 5 years ago
parent
commit
a7f8fa66de

+ 28 - 0
runtime-modules/proposals/codex/src/lib.rs

@@ -319,6 +319,34 @@ decl_module! {
             )?;
         }
 
+
+        /// Create 'Set lead' proposal type.
+        /// This proposal uses replace_lead() extrinsic from the content_working_group  module.
+        pub fn create_set_lead_proposal(
+            origin,
+            member_id: MemberId<T>,
+            title: Vec<u8>,
+            description: Vec<u8>,
+            stake_balance: Option<BalanceOf<T>>,
+            new_lead: Option<(T::MemberId, T::AccountId)>
+        ) {
+            let proposal_code =
+                <content_working_group::Call<T>>::replace_lead(new_lead);
+
+            let proposal_parameters =
+                proposal_types::parameters::set_lead_proposal::<T>();
+
+            Self::create_proposal(
+                origin,
+                member_id,
+                title,
+                description,
+                stake_balance,
+                proposal_code.encode(),
+                proposal_parameters,
+            )?;
+        }
+
 // *************** Extrinsic to execute
 
         /// Text proposal extrinsic. Should be used as callable object to pass to the engine module.

+ 14 - 0
runtime-modules/proposals/codex/src/proposal_types/mod.rs

@@ -84,4 +84,18 @@ pub(crate) mod parameters {
             required_stake: Some(<BalanceOf<T>>::from(500u32)),
         }
     }
+
+    // Proposal parameters for the 'Set lead' proposal
+    pub(crate) fn set_lead_proposal<T: crate::Trait>(
+    ) -> ProposalParameters<T::BlockNumber, BalanceOf<T>> {
+        ProposalParameters {
+            voting_period: T::BlockNumber::from(50000u32),
+            grace_period: T::BlockNumber::from(10000u32),
+            approval_quorum_percentage: 40,
+            approval_threshold_percentage: 51,
+            slashing_quorum_percentage: 81,
+            slashing_threshold_percentage: 86,
+            required_stake: Some(<BalanceOf<T>>::from(500u32)),
+        }
+    }
 }

+ 50 - 0
runtime-modules/proposals/codex/src/tests/mod.rs

@@ -486,3 +486,53 @@ fn create_spending_proposal_call_fails_with_incorrect_balance() {
         );
     });
 }
+
+#[test]
+fn create_set_lead_proposal_common_checks_succeed() {
+    initial_test_ext().execute_with(|| {
+        let proposal_fixture = ProposalTestFixture {
+            insufficient_rights_call: || {
+                ProposalCodex::create_set_lead_proposal(
+                    RawOrigin::None.into(),
+                    1,
+                    b"title".to_vec(),
+                    b"body".to_vec(),
+                    None,
+                    Some((20, 10)),
+                )
+            },
+            empty_stake_call: || {
+                ProposalCodex::create_set_lead_proposal(
+                    RawOrigin::Signed(1).into(),
+                    1,
+                    b"title".to_vec(),
+                    b"body".to_vec(),
+                    None,
+                    Some((20, 10)),
+                )
+            },
+            invalid_stake_call: || {
+                ProposalCodex::create_set_lead_proposal(
+                    RawOrigin::Signed(1).into(),
+                    1,
+                    b"title".to_vec(),
+                    b"body".to_vec(),
+                    Some(<BalanceOf<Test>>::from(5000u32)),
+                    Some((20, 10)),
+                )
+            },
+            successful_call: || {
+                ProposalCodex::create_set_lead_proposal(
+                    RawOrigin::Signed(1).into(),
+                    1,
+                    b"title".to_vec(),
+                    b"body".to_vec(),
+                    Some(<BalanceOf<Test>>::from(500u32)),
+                    Some((20, 10)),
+                )
+            },
+            proposal_parameters: crate::proposal_types::parameters::set_lead_proposal::<Test>(),
+        };
+        proposal_fixture.check_all();
+    });
+}