Browse Source

runtime: council: add membership check

conectado 4 years ago
parent
commit
af667561c0

+ 7 - 7
runtime/src/integration/proposals/council_origin_validator.rs

@@ -83,17 +83,17 @@ mod tests {
             let councilor2: [u8; 32] = [1; 32];
             let councilor3: [u8; 32] = [2; 32];
 
-            elect_council(vec![councilor1, councilor2.into(), councilor3.into()], 0);
+            elect_council(
+                vec![councilor1.clone(), councilor2.into(), councilor3.into()],
+                0,
+            );
 
-            let account_id = AccountId32::default();
-            let origin = RawOrigin::Signed(account_id.clone());
-            insert_member(account_id.clone());
-            let member_id = 0; // newly created member_id
+            let origin = RawOrigin::Signed(councilor1.clone());
 
             let validation_result =
-                CouncilManager::<Runtime>::ensure_actor_origin(origin.into(), member_id);
+                CouncilManager::<Runtime>::ensure_actor_origin(origin.into(), 0);
 
-            assert_eq!(validation_result, Ok(account_id));
+            assert_eq!(validation_result, Ok(councilor1));
         });
     }
 

+ 4 - 4
runtime/src/lib.rs

@@ -569,11 +569,11 @@ impl council::Trait for Runtime {
     type BudgetRefillPeriod = BudgetRefillPeriod;
 
     fn is_council_member_account(
-        _membership_id: &Self::MemberId,
-        _account_id: &<Self as frame_system::Trait>::AccountId,
+        membership_id: &Self::MemberId,
+        account_id: &<Self as frame_system::Trait>::AccountId,
     ) -> bool {
-        // TODO: implement when membership module is ready
-        true
+        membership::Module::<Runtime>::ensure_member_controller_account(account_id, membership_id)
+            .is_ok()
     }
 
     fn new_council_elected(_elected_members: &[council::CouncilMemberOf<Self>]) {

+ 20 - 9
runtime/src/tests/mod.rs

@@ -11,7 +11,6 @@ use frame_support::traits::{Currency, OnFinalize, OnInitialize};
 use frame_system::RawOrigin;
 use referendum::ReferendumManager;
 use sp_runtime::{AccountId32, BuildStorage};
-use sp_std::convert::TryInto;
 
 type Membership = membership::Module<Runtime>;
 type System = frame_system::Module<Runtime>;
@@ -34,34 +33,46 @@ pub(crate) fn initial_test_ext() -> sp_io::TestExternalities {
     t.into()
 }
 
+fn get_account_membership(account: AccountId32, i: usize) -> u64 {
+    if !Membership::is_member_account(&account) {
+        insert_member(account);
+    }
+
+    i as u64
+}
+
 pub(crate) fn elect_council(council: Vec<AccountId32>, cycle_id: u64) {
     let mut voters = Vec::<AccountId32>::new();
 
     let councilor_stake: u128 = <Runtime as council::Trait>::MinCandidateStake::get().into();
+    let extra_candidates = <Runtime as council::Trait>::MinNumberOfExtraCandidates::get() + 1;
+    let mut council_member_ids = Vec::new();
 
     for (i, councilor) in council.iter().enumerate() {
         increase_total_balance_issuance_using_account_id(
             councilor.clone().into(),
             councilor_stake + 1,
         );
+        let member_id = get_account_membership(councilor.clone(), i);
         Council::announce_candidacy(
             RawOrigin::Signed(councilor.clone()).into(),
-            i.try_into().unwrap(),
+            member_id,
             councilor.clone(),
             councilor.clone(),
             councilor_stake,
         )
         .unwrap();
-        voters.push([10u8.saturating_add(i.try_into().unwrap()); 32].into()); // TODO: change me
+        voters.push([council.len() as u8 + extra_candidates as u8 + i as u8; 32].into());
+        council_member_ids.push(member_id);
     }
 
-    let extra_candidates = <Runtime as council::Trait>::MinNumberOfExtraCandidates::get() + 1;
     for i in council.len()..(council.len() + extra_candidates as usize) {
         let extra_councilor: AccountId32 = [i as u8; 32].into();
 
+        let member_id = get_account_membership(extra_councilor.clone(), i);
         Council::release_candidacy_stake(
             RawOrigin::Signed(extra_councilor.clone()).into(),
-            i.try_into().unwrap(),
+            member_id,
         )
         .unwrap_or_else(|err| assert_eq!(err, council::Error::NoStake));
         increase_total_balance_issuance_using_account_id(
@@ -71,7 +82,7 @@ pub(crate) fn elect_council(council: Vec<AccountId32>, cycle_id: u64) {
 
         Council::announce_candidacy(
             RawOrigin::Signed(extra_councilor.clone()).into(),
-            i.try_into().unwrap(),
+            member_id,
             extra_councilor.clone(),
             extra_councilor.clone(),
             councilor_stake,
@@ -90,7 +101,7 @@ pub(crate) fn elect_council(council: Vec<AccountId32>, cycle_id: u64) {
             voter.into(),
             &[0u8],
             &cycle_id,
-            &i.try_into().unwrap(),
+            &council_member_ids[i],
         ); //TODO: fixme
         Referendum::vote(
             RawOrigin::Signed(voter.clone()).into(),
@@ -110,7 +121,7 @@ pub(crate) fn elect_council(council: Vec<AccountId32>, cycle_id: u64) {
         Referendum::reveal_vote(
             RawOrigin::Signed(voter.clone()).into(),
             vec![0u8],
-            i.try_into().unwrap(),
+            council_member_ids[i].clone(),
         )
         .unwrap();
     }
@@ -127,7 +138,7 @@ pub(crate) fn elect_council(council: Vec<AccountId32>, cycle_id: u64) {
             .iter()
             .map(|m| *m.member_id())
             .collect::<Vec<_>>(),
-        (0u64..council.len().try_into().unwrap()).collect::<Vec<u64>>()
+        council_member_ids
     );
 }