Commit fe8ccbdf58f19af1bbf9c53f341387fd67229b94

Authored by Dhruv Kapadia
1 parent b18e4649

When we invalidate votes, we also need to update the score

Showing 2 changed files with 26 additions and 2 deletions   Show diff stats
app/models/vote.rb
@@ -23,7 +23,7 @@ class Vote < ActiveRecord::Base @@ -23,7 +23,7 @@ class Vote < ActiveRecord::Base
23 serialize :tracking 23 serialize :tracking
24 24
25 after_create :update_winner_choice, :update_loser_choice 25 after_create :update_winner_choice, :update_loser_choice
26 - after_save :update_counter_caches_based_on_flags 26 + after_save :update_cached_values_based_on_flags
27 27
28 def update_winner_choice 28 def update_winner_choice
29 choice.reload # make sure we're using updated counter values 29 choice.reload # make sure we're using updated counter values
@@ -37,7 +37,7 @@ class Vote < ActiveRecord::Base @@ -37,7 +37,7 @@ class Vote < ActiveRecord::Base
37 37
38 # this is necessary to handle counter cache, at least until the following patch is accepted: 38 # this is necessary to handle counter cache, at least until the following patch is accepted:
39 # https://rails.lighthouseapp.com/projects/8994/tickets/3521-patch-add-conditional-counter-cache 39 # https://rails.lighthouseapp.com/projects/8994/tickets/3521-patch-add-conditional-counter-cache
40 - def update_counter_caches_based_on_flags 40 + def update_cached_values_based_on_flags
41 if valid_record_changed? 41 if valid_record_changed?
42 if valid_record 42 if valid_record
43 Question.increment_counter(:votes_count, self.question_id) 43 Question.increment_counter(:votes_count, self.question_id)
@@ -50,6 +50,11 @@ class Vote < ActiveRecord::Base @@ -50,6 +50,11 @@ class Vote < ActiveRecord::Base
50 Choice.decrement_counter(:wins, self.choice_id) 50 Choice.decrement_counter(:wins, self.choice_id)
51 Choice.decrement_counter(:losses, self.loser_choice_id) 51 Choice.decrement_counter(:losses, self.loser_choice_id)
52 end 52 end
  53 +
  54 + choice.reload
  55 + choice.compute_score!
  56 + loser_choice.reload
  57 + loser_choice.compute_score!
53 end 58 end
54 end 59 end
55 end 60 end
spec/models/vote_spec.rb
@@ -183,5 +183,24 @@ describe Vote do @@ -183,5 +183,24 @@ describe Vote do
183 @prompt.right_choice.losses.should == 0 183 @prompt.right_choice.losses.should == 0
184 184
185 end 185 end
  186 +
  187 + it "should update score choice and loser_choice after invalid is changed" do
  188 + vote = Factory.create(:vote, :question => @question, :prompt => @prompt,
  189 + :choice => @prompt.left_choice,
  190 + :loser_choice => @prompt.right_choice)
  191 +
  192 + @prompt.left_choice.reload
  193 + @prompt.left_choice.score.should be_close(67, 1)
  194 + @prompt.right_choice.reload
  195 + @prompt.right_choice.score.should be_close(33, 1)
  196 +
  197 + vote.valid_record = false
  198 + vote.save
  199 +
  200 + @prompt.left_choice.reload
  201 + @prompt.left_choice.score.should == 50
  202 + @prompt.right_choice.reload
  203 + @prompt.right_choice.score.should == 50
  204 + end
186 205
187 end 206 end