From 011a975363c472c135f4180023068b66c5463ee7 Mon Sep 17 00:00:00 2001 From: Gav Date: Fri, 2 Mar 2018 14:19:44 +0100 Subject: [PATCH] test: second tally uses runners-up. --- substrate/demo/runtime/src/runtime/council.rs | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/substrate/demo/runtime/src/runtime/council.rs b/substrate/demo/runtime/src/runtime/council.rs index e7a11d4d41..4d3d1ce79f 100644 --- a/substrate/demo/runtime/src/runtime/council.rs +++ b/substrate/demo/runtime/src/runtime/council.rs @@ -377,6 +377,7 @@ pub mod public { }) .sum(); let dupe = leaderboard.iter().find(|&&(_, ref c)| c == candidate).is_some(); + println!("-> {}", actual_total); if total == actual_total && !dupe { // insert into leaderboard leaderboard[0] = (total, candidate.clone()); @@ -1007,9 +1008,72 @@ mod tests { assert!(is_a_candidate(&dave)); assert_eq!(vote_index(), 1); assert_eq!(voter_last_active(&bob), Some(0)); + assert_eq!(voter_last_active(&charlie), Some(0)); + assert_eq!(voter_last_active(&dave), Some(0)); assert_eq!(voter_last_active(&eve), Some(0)); + assert_eq!(voter_last_active(&ferdie), Some(0)); assert_eq!(candidate_reg_info(&charlie), Some((0, 2))); assert_eq!(candidate_reg_info(&dave), Some((0, 3))); }); } + + #[test] + fn second_tally_should_use_runners_up() { + let alice = Keyring::Alice.to_raw_public(); + let bob = Keyring::Bob.to_raw_public(); + let charlie = Keyring::Charlie.to_raw_public(); + let ferdie = Keyring::Ferdie.to_raw_public(); + let eve = Keyring::Eve.to_raw_public(); + let dave = Keyring::Dave.to_raw_public(); + let mut t = new_test_ext(); + + with_externalities(&mut t, || { + with_env(|e| e.block_number = 4); + public::submit_candidacy(&alice, 0); + public::set_approvals(&ferdie, &vec![true], 0); + public::submit_candidacy(&bob, 1); + public::set_approvals(&bob, &vec![false, true], 0); + public::submit_candidacy(&charlie, 2); + public::set_approvals(&charlie, &vec![false, false, true], 0); + public::submit_candidacy(&dave, 3); + public::set_approvals(&dave, &vec![false, false, false, true], 0); + public::submit_candidacy(&eve, 4); + public::set_approvals(&eve, &vec![false, false, false, false, true], 0); + internal::end_block(); + + with_env(|e| e.block_number = 6); + public::present(&dave, &alice, 57, 0); + public::present(&dave, &charlie, 18, 0); + public::present(&dave, &dave, 28, 0); + public::present(&dave, &eve, 38, 0); + internal::end_block(); + + with_env(|e| e.block_number = 8); + public::set_approvals(&ferdie, &vec![false, false, true, false], 1); + privileged::set_desired_seats(3); + internal::end_block(); + + with_env(|e| e.block_number = 10); + public::present(&dave, &charlie, 75, 1); + public::present(&dave, &dave, 28, 1); + internal::end_block(); + + assert!(!presentation_active()); + assert_eq!(active_council(), vec![(alice.clone(), 11), (eve.clone(), 11), (charlie.clone(), 15)]); + + assert!(!is_a_candidate(&alice)); + assert!(!is_a_candidate(&bob)); + assert!(!is_a_candidate(&charlie)); + assert!(!is_a_candidate(&eve)); + assert!(is_a_candidate(&dave)); + assert_eq!(vote_index(), 2); + assert_eq!(voter_last_active(&bob), Some(0)); + assert_eq!(voter_last_active(&charlie), Some(0)); + assert_eq!(voter_last_active(&dave), Some(0)); + assert_eq!(voter_last_active(&eve), Some(0)); + assert_eq!(voter_last_active(&ferdie), Some(1)); + + assert_eq!(candidate_reg_info(&dave), Some((0, 3))); + }); + } }