aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGareth Rees <gareth@mysociety.org>2015-06-29 13:09:32 +0100
committerGareth Rees <gareth@mysociety.org>2015-06-29 13:09:32 +0100
commit98ae1c241d360feb21e76876813578cd58332c53 (patch)
tree1067eb31fd43ca1be0cb962eefdaebd94ecfbd28
parent6b038291717c8afd8d1125bee644a92f81feb13c (diff)
Clear old WidgetVotes when converted to TrackThing
When a User signs in to confirm their WidgetVote, a TrackThing is created. This leads to the vote being double-counted as the WidgetVote is not cleared. Fixes https://github.com/mysociety/alaveteli/issues/2601
-rw-r--r--app/controllers/track_controller.rb9
-rw-r--r--spec/controllers/track_controller_spec.rb33
2 files changed, 42 insertions, 0 deletions
diff --git a/app/controllers/track_controller.rb b/app/controllers/track_controller.rb
index cbefb6291..021c26613 100644
--- a/app/controllers/track_controller.rb
+++ b/app/controllers/track_controller.rb
@@ -17,6 +17,15 @@ class TrackController < ApplicationController
return atom_feed_internal if params[:feed] == 'feed'
if self.track_set
+ if AlaveteliConfiguration.enable_widgets && cookies[:widget_vote]
+ @info_request.
+ widget_votes.
+ where(:cookie => cookies[:widget_vote]).
+ destroy_all
+
+ cookies[:widget_vote] = nil
+ end
+
redirect_to request_url(@info_request)
end
end
diff --git a/spec/controllers/track_controller_spec.rb b/spec/controllers/track_controller_spec.rb
index b453fde8c..2585e6e74 100644
--- a/spec/controllers/track_controller_spec.rb
+++ b/spec/controllers/track_controller_spec.rb
@@ -1,6 +1,39 @@
# -*- encoding : utf-8 -*-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+describe TrackController do
+
+ describe 'GET track_request' do
+
+ it 'clears the widget_vote cookie for the user' do
+ AlaveteliConfiguration.stub!(:enable_widgets).and_return(true)
+ @info_request = FactoryGirl.create(:info_request)
+
+ session[:user_id] = FactoryGirl.create(:user).id
+ request.cookies['widget_vote'] = '0300fd3e1177127cebff'
+
+ get :track_request, :url_title => @info_request.url_title, :feed => 'track'
+
+ expect(cookies[:widget_vote]).to be_nil
+ end
+
+ it 'clears widget votes for the request' do
+ AlaveteliConfiguration.stub!(:enable_widgets).and_return(true)
+ @info_request = FactoryGirl.create(:info_request)
+ @info_request.widget_votes.create(:cookie => '0300fd3e1177127cebff')
+
+ session[:user_id] = FactoryGirl.create(:user).id
+ request.cookies['widget_vote'] = '0300fd3e1177127cebff'
+
+ get :track_request, :url_title => @info_request.url_title, :feed => 'track'
+
+ expect(@info_request.widget_votes).to be_empty
+ end
+
+ end
+
+end
+
describe TrackController, "when making a new track on a request" do
before(:each) do
@ir = mock_model(InfoRequest, :url_title => 'myrequest',