diff --git a/app/models/visitor.rb b/app/models/visitor.rb index 0650641..2ff8d64 100644 --- a/app/models/visitor.rb +++ b/app/models/visitor.rb @@ -33,6 +33,16 @@ class Visitor < ActiveRecord::Base options.merge!(:appearance => @appearance) end end + + if options.delete(:skip_fraud_protection) + last_answered_appearance = self.appearances.find(:first, + :conditions => ["appearances. question_id = ? AND appearances.answerable_id IS NOT NULL", prompt.question_id], + :order => 'id DESC') + if last_answered_appearance && last_answered_appearance.answerable_type == "Skip" + options.merge!(:valid_record => false) + options.merge!(:validity_information => "Fraud protection: last visitor action was a skip") + end + end choice = prompt.choices[ordinality] #we need to guarantee that the choices are in the right order (by position) other_choices = prompt.choices - [choice] diff --git a/spec/models/visitor_spec.rb b/spec/models/visitor_spec.rb index fc5db4d..8d226fe 100644 --- a/spec/models/visitor_spec.rb +++ b/spec/models/visitor_spec.rb @@ -198,6 +198,27 @@ describe Visitor do @rc.losses.should == prev_loser_losses + 1 @rc.wins.should == prev_winner_wins end + + it "should invalidate vote after skips when :skip_fraud_protection option passed" do + + # If a visitor skips a prompt, the vote after should be conisdered invalid + @appearance = @aoi_clone.record_appearance(@visitor, @prompt) + @visitor.skip!(@required_skip_params.merge({ :appearance_lookup => @appearance.lookup})) + + @appearance_2 = @aoi_clone.record_appearance(@visitor, @prompt) + @optional_vote_params = {:appearance_lookup => @appearance_2.lookup, :skip_fraud_protection => true } + + vote = @visitor.vote_for! @required_vote_params.merge(@optional_vote_params) + vote.valid_record.should be_false + + @appearance_3 = @aoi_clone.record_appearance(@visitor, @prompt) + @optional_vote_params = {:appearance_lookup => @appearance_3.lookup, :skip_fraud_protection => true } + + vote_2 = @visitor.vote_for! @required_vote_params.merge(@optional_vote_params) + + vote_2.valid_record.should be_true + + end end -- libgit2 0.21.2