Commit 681d8a6a8c23b28629c6bdf5d5ac307cc85f60c1

Authored by Dhruv Kapadia
1 parent 2093d6f2

Improving choices test coverage

app/controllers/choices_controller.rb
... ... @@ -38,7 +38,7 @@ class ChoicesController < InheritedResources::Base
38 38 show! do |format|
39 39 format.xml {
40 40 @choice.reload
41   - render :xml => @choice.to_xml(:methods => [:item_data, :wins_plus_losses, :question_name])}
  41 + render :xml => @choice.to_xml(:methods => [:wins_plus_losses])}
42 42 format.json { render :json => @choice.to_json(:methods => [:data])}
43 43 end
44 44 end
... ...
app/models/choice.rb
... ... @@ -22,14 +22,6 @@ class Choice < ActiveRecord::Base
22 22 end
23 23 #attr_accessor :data
24 24  
25   - def question_name
26   - question.name
27   - end
28   -
29   - def item_data
30   - item.data
31   - end
32   -
33 25 def lose!
34 26 self.loss_count += 1 rescue (self.loss_count = 1)
35 27 self.score = compute_score
... ... @@ -46,6 +38,7 @@ class Choice < ActiveRecord::Base
46 38 wins + losses
47 39 end
48 40  
  41 + # TODO delete these and refactor loss_count and votes_count into losses and wins
49 42 def losses
50 43 loss_count || 0
51 44 end
... ... @@ -110,11 +103,6 @@ class Choice < ActiveRecord::Base
110 103 self.save!
111 104 end
112 105  
113   - def suspend!
114   - (self.active = false)
115   - self.save!
116   - end
117   -
118 106 def deactivate!
119 107 (self.active = false)
120 108 self.save!
... ...
spec/models/choice_spec.rb
... ... @@ -4,13 +4,19 @@ describe Choice do
4 4  
5 5 it {should belong_to :question}
6 6 it {should belong_to :item}
  7 + #uncomment after adding creator to choice model
  8 + #it {should belong_to :creator}
7 9 it {should have_many :flags}
  10 + it {should have_many :votes}
  11 + it {should have_many :prompts_on_the_left}
  12 + it {should have_many :prompts_on_the_right}
8 13 it {should validate_presence_of :question}
  14 + it {should validate_presence_of :creator}
9 15  
10 16 before(:each) do
11 17 @aoi_clone = Factory.create(:email_confirmed_user)
12 18 @visitor= Factory.create(:visitor, :site => @aoi_clone)
13   - @question = Question.create(:name => 'which do you like better?',
  19 + @question = Factory.create(:aoi_question, :name => "Which do you like better?",
14 20 :site => @aoi_clone,
15 21 :creator => @visitor)
16 22  
... ... @@ -25,13 +31,6 @@ describe Choice do
25 31 Choice.create!(@valid_attributes)
26 32 end
27 33  
28   - #it "should generate prompts after two choices are created" do
29   - # proc {
30   -# choice1 = Choice.create!(@valid_attributes.merge(:data => '1234'))
31   -# choice2 = Choice.create!(@valid_attributes.merge(:data => '1234'))
32   -# }.should change(@question.prompts, :count).by(2)
33   -# end
34   -
35 34 it "should deactivate a choice" do
36 35 choice1 = Choice.create!(@valid_attributes.merge(:data => '1234'))
37 36 choice1.deactivate!
... ... @@ -39,12 +38,14 @@ describe Choice do
39 38 end
40 39  
41 40 it "should update a question's counter cache on creation" do
42   - @question.choices_count.should == 0
43   - @question.choices.size.should == 0
44   - Choice.create!(@valid_attributes.merge(:data => '1234'))
45   - @question.reload
46   - @question.choices_count.should == 1
47   - @question.choices.size.should == 1
  41 + # not an allour ideas question
  42 + question = Factory.create(:question, :site => @aoi_clone, :creator => @visitor)
  43 + question.choices_count.should == 0
  44 + question.choices.size.should == 0
  45 + Choice.create!(@valid_attributes.merge(:question => question))
  46 + question.reload
  47 + question.choices_count.should == 1
  48 + question.choices.size.should == 1
48 49  
49 50 end
50 51  
... ... @@ -67,4 +68,61 @@ describe Choice do
67 68 @question.reload
68 69 @question.inactive_choices_count.should == prev_inactive + 1
69 70 end
  71 + it "should have a default score of 50" do
  72 + choice1 = Choice.create!(@valid_attributes)
  73 + choice1.score.should == 50
  74 + end
  75 + it "correctly compute a score based on wins and losses" do
  76 + choice1 = Choice.create!(@valid_attributes)
  77 + choice1.votes_count = 30
  78 + choice1.loss_count = 70
  79 + choice1.compute_score.should be_close(30,1)
  80 + end
  81 + it "compute score and save" do
  82 + choice1 = Choice.create!(@valid_attributes)
  83 + choice1.score.should == 50
  84 + choice1.votes_count= 30
  85 + choice1.loss_count = 70
  86 + choice1.compute_score!
  87 + choice1.score.should be_close(30, 1)
  88 + end
  89 +
  90 + it "determines whether a choice is admin created" do
  91 + admin_choice = @question.choices.first
  92 + admin_choice.user_created.should be_false
  93 + end
  94 + it "determines whether a choice is user created" do
  95 + new_visitor = Factory.create(:visitor, :site => @aoi_clone)
  96 + user_choice = Factory.create(:choice, :question => @question, :creator => new_visitor)
  97 + user_choice.user_created.should be_true
  98 + end
  99 +
  100 + describe "voting updates things" do
  101 + before do
  102 + @prompt = @question.choose_prompt
  103 + @winning_choice = @prompt.left_choice
  104 + @losing_choice = @prompt.right_choice
  105 + @winning_choice.win!
  106 + @losing_choice.lose!
  107 + end
  108 +
  109 + it "should update score on a win" do
  110 + @winning_choice.score.should be_close(67, 1)
  111 + end
  112 + it "should update score on a loss" do
  113 + @losing_choice.score.should be_close(33,1)
  114 + end
  115 + it "should update win count on a win" do
  116 + @winning_choice.votes_count.should == 1
  117 + @winning_choice.wins.should == 1
  118 + @winning_choice.loss_count.should == 0
  119 + @winning_choice.losses.should == 0
  120 + end
  121 + it "should update loss count on a loss" do
  122 + @losing_choice.votes_count.should == 0
  123 + @losing_choice.wins.should == 0
  124 + @losing_choice.loss_count.should == 1
  125 + @losing_choice.losses.should == 1
  126 + end
  127 + end
70 128 end
... ...