Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Voting copy changes #1774

Merged
merged 15 commits into from
Mar 21, 2024
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions classes/Divisions.php
Original file line number Diff line number Diff line change
Expand Up @@ -239,17 +239,21 @@ public function getMemberDivisionsForPolicy($policyID = null) {
return $this->divisionsByPolicy($q);
}

public function getMemberDivisionDetails() {
public function getMemberDivisionDetails($strong_only = false) {
$args = array(':person_id' => $this->member->person_id);

$policy_divisions = array();

if ($strong_only) {
$where_extra = "AND (policy_vote = 'no3' OR policy_vote = 'aye3')";
} else {
$where_extra = '';
}
$q = $this->db->query(
"SELECT policy_id, policy_vote, vote, count(division_id) as total,
max(year(division_date)) as latest, min(year(division_date)) as earliest
FROM policydivisions JOIN persondivisionvotes USING(division_id)
JOIN divisions USING(division_id)
WHERE person_id = :person_id AND direction <> 'abstention'
WHERE person_id = :person_id AND direction <> 'abstention' $where_extra
GROUP BY policy_id, policy_vote, vote",
$args
);
Expand Down
6 changes: 1 addition & 5 deletions classes/Member.php
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ private function left_house_line($house, $house_name) {
}
}

public function getPartyPolicyDiffs($partyCohort, $policiesList, $positions, $only_diffs = false) {
public function getPartyPolicyDiffs($partyCohort, $policiesList, $positions) {
$policy_diffs = array();
$party_positions = $partyCohort->getAllPolicyPositions($policiesList);

Expand All @@ -482,10 +482,6 @@ public function getPartyPolicyDiffs($partyCohort, $policiesList, $positions, $on

$score_diff = $this->calculatePolicyDiffScore($mp_score, $party_score);

// skip anything that isn't a yes vs no diff
if ( $only_diffs && $score_diff < 2 ) {
continue;
}
$policy_diffs[$policy_id] = [
'policy_text' => $details['policy'],
'score_difference' => $score_diff,
Expand Down
259 changes: 114 additions & 145 deletions markdown/voting-information.md

Large diffs are not rendered by default.

14 changes: 9 additions & 5 deletions tests/PartyTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -252,13 +252,18 @@ private function getMemberFromPersonId($person_id)
return new MySociety\TheyWorkForYou\Member([ "person_id" => $person_id ]);
}


public function testMPPartyPolicyTextWhenDiffers()
{
// Checks that an MP that differs from party gets the 'sometimes differs from their party' on the profile page
$page = $this->fetch_page(array('pid' => 15, 'url' => '/mp/15/test_mp_g_party_1/test_westminster_constituency'));
$this->assertStringContainsString('Test MP G Party 1', $page);
}

public function testMPPartyPolicyTextWhenDiffersVotes()
{
$page = $this->fetch_page(array('pagetype' => 'votes', 'pid' => 15, 'url' => '/mp/15/test_mp_g_party_1/test_westminster_constituency/votes'));
$this->assertStringContainsString('is a G Party MP', $page);
$this->assertStringContainsString('Test MP G Party 1', $page);
$this->assertStringContainsString('sometimes <b>differs</b> from their party', $page);
}

Expand All @@ -274,20 +279,19 @@ public function testMPPartyPolicyWherePartyMissingPositions()
{
// When an MP has votes, but there is no broader party policy to compare it to
// this goes down a funnel that shows the votes, but does not make the comparison to party.
$page = $this->fetch_page(array('pid' => 4, 'url' => '/mp/4/test_mp_d/test_westminster_constituency'));
$page = $this->fetch_page(array('pid' => 4, 'pagetype' => 'votes','url' => '/mp/4/test_mp_d/test_westminster_constituency/votes'));
$this->assertStringContainsString('Test MP D', $page);
$this->assertStringContainsString('This is a random selection of Mrs Test MP D&rsquo;s votes', $page);
$this->assertStringContainsString('<li class="vote-description"', $page);
$this->assertStringNotContainsString('comparable B Party MPs voted', $page);
}

public function testMPPartyPolicyTextWhenAgrees()
{
// Test when an MP mostly agrees with their party, as MP G Party 2 does with party G
$page = $this->fetch_page(array('pid' => 16, 'url' => '/mp/16/test_mp_g_party_2/test_westminster_constituency'));
$page = $this->fetch_page(array('pagetype' => 'votes', 'pid' => 16, 'url' => '/mp/16/test_mp_g_party_2/test_westminster_constituency/votes'));
$this->assertStringContainsString('Test MP G Party 2', $page);

$this->assertStringContainsString('This is a random selection of Mrs Test MP G Party 2&rsquo;s votes', $page);
$this->assertStringNotContainsString('sometimes <b>differs</b> from their party colleagues', $page);
}


Expand Down
2 changes: 1 addition & 1 deletion tests/VotesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ private function fetch_votes_page() {

public function testVoteSummary() {
$page = $this->fetch_votes_page();
$this->assertMatchesRegularExpression('#policy=363">\s*0 votes for, 4 votes against, 1 abstention, 1 absence, in 2013#', $page);
$this->assertMatchesRegularExpression('#policy=363">\s*0 votes for, 2 votes against, 1 abstention, in 2013#', $page);
}

public function testLastUpdate() {
Expand Down
32 changes: 32 additions & 0 deletions tests/_fixtures/divisions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -874,161 +874,193 @@
<field name="division_id">pw-2013-01-01-1-commons</field>
<field name="policy_id">363</field>
<field name="direction">Majority (strong)</field>
<field name="policy_vote">aye3</field>
</row>
<row>
<field name="division_id">pw-2013-01-01-2-commons</field>
<field name="policy_id">363</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-2013-01-01-3-commons</field>
<field name="policy_id">363</field>
<field name="direction">Minority</field>
<field name="policy_vote">no</field>
</row>
<row>
<field name="division_id">pw-2013-01-01-4-commons</field>
<field name="policy_id">363</field>
<field name="direction">Minority (strong)</field>
<field name="policy_vote">no3</field>
</row>
<row>
<field name="division_id">pw-2013-01-01-5-commons</field>
<field name="policy_id">363</field>
<field name="direction">Majority (strong)</field>
<field name="policy_vote">aye3</field>
</row>
<row>
<field name="division_id">pw-2013-01-01-6-commons</field>
<field name="policy_id">363</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-2013-01-01-7-commons</field>
<field name="policy_id">363</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-2013-01-01-8-commons</field>
<field name="policy_id">363</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-1-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-2-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-3-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-4-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-5-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-6-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-7-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-8-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-9-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-10-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-11-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-12-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-13-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-14-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-15-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-16-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-17-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-18-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-19-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-20-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-21-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-22-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-23-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
<row>
<field name="division_id">pw-3012-01-01-24-commons</field>
<field name="policy_id">810</field>
<field name="direction">Majority</field>
<field name="policy_vote">aye</field>
</row>
</table_data>
</database>
Expand Down
28 changes: 11 additions & 17 deletions www/docs/mp/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@

$policiesList = new MySociety\TheyWorkForYou\Policies;
$divisions = new MySociety\TheyWorkForYou\Divisions($MEMBER);
$policySummaries = $divisions->getMemberDivisionDetails();
$policySummaries = $divisions->getMemberDivisionDetails(true);

$policyOptions = array( 'summaries' => $policySummaries);

Expand Down Expand Up @@ -416,7 +416,12 @@
);
}

person_party_policy_diffs($MEMBER, $policiesList, false);
person_party_policy_diffs($MEMBER, $policiesList);

$data['sorted_diffs_only'] = array_filter(
$data['sorted_diffs'],
function($k) { return $k['score_difference'] >= 2; }
);

// Send the output for rendering
MySociety\TheyWorkForYou\Renderer::output('mp/votes', $data);
Expand Down Expand Up @@ -472,18 +477,7 @@

case '':
default:

$policiesList = new MySociety\TheyWorkForYou\Policies;
$policies = $policiesList->limitToSet('summary');
$divisions = new MySociety\TheyWorkForYou\Divisions($MEMBER);
$policySummaries = $divisions->getMemberDivisionDetails();

$policyOptions = array('limit' => 6, 'summaries' => $policySummaries);

// Generate limited voting record list
$data['policyPositions'] = new MySociety\TheyWorkForYou\PolicyPositions($policies, $MEMBER, $policyOptions);

person_party_policy_diffs($MEMBER, $policiesList, true);
// if extra detail needed for overview page in future

// Send the output for rendering
MySociety\TheyWorkForYou\Renderer::output('mp/profile', $data);
Expand Down Expand Up @@ -1162,11 +1156,11 @@ function policy_image($data, $MEMBER, $format) {
}

// generate party policy diffs
function person_party_policy_diffs($MEMBER, $policiesList, $only_diffs) {
function person_party_policy_diffs($MEMBER, $policiesList) {
global $data;

$divisions = new MySociety\TheyWorkForYou\Divisions($MEMBER);
$policySummaries = $divisions->getMemberDivisionDetails();
$policySummaries = $divisions->getMemberDivisionDetails(true);

$party = new MySociety\TheyWorkForYou\Party($MEMBER->party());
$partyCohort = new MySociety\TheyWorkForYou\PartyCohort($MEMBER->person_id(), $MEMBER->cohortParty());
Expand All @@ -1178,6 +1172,6 @@ function person_party_policy_diffs($MEMBER, $policiesList, $only_diffs) {
$positions = new MySociety\TheyWorkForYou\PolicyPositions( $policiesList, $MEMBER, [
'summaries' => $policySummaries,
]);
$policy_diffs = $MEMBER->getPartyPolicyDiffs($partyCohort, $policiesList, $positions, $only_diffs);
$policy_diffs = $MEMBER->getPartyPolicyDiffs($partyCohort, $policiesList, $positions);
$data['sorted_diffs'] = $policy_diffs;
}
Loading
Loading