Commit 47320adc1a67ceb4460ab99e98b889933f6bab3b

Authored by Dhruv Kapadia
1 parent 299dd86d

Adding necessary tests to question model

Showing 1 changed file with 53 additions and 2 deletions   Show diff stats
spec/models/question_spec.rb
... ... @@ -6,7 +6,11 @@ describe Question do
6 6 it {should belong_to :site}
7 7 it {should have_many :choices}
8 8 it {should have_many :prompts}
  9 + it {should have_many :votes}
  10 + it {should have_many :densities}
  11 + it {should have_many :appearances}
9 12 it {should validate_presence_of :site}
  13 + it {should validate_presence_of :creator}
10 14  
11 15 before(:each) do
12 16 @aoi_clone = Factory.create(:user, :email => "pius@alum.mit.edu", :password => "password", :password_confirmation => "password", :id => 8)
... ... @@ -16,8 +20,6 @@ describe Question do
16 20  
17 21 }
18 22  
19   - # @item1 = Factory.create(:item, :data => "foo", :id => 1, :creator_id => 8)
20   - # @item2 = Factory.create(:item, :data => "bar", :id => 2, :creator_id => 8)
21 23 end
22 24  
23 25 it "should create a new instance given valid attributes" do
... ... @@ -37,6 +39,55 @@ describe Question do
37 39 q = @aoi_clone.create_question("foobarbaz", {:name => 'foo'})
38 40 q.prompts(true).size.should == 2
39 41 end
  42 +
  43 + it "should choose an active prompt randomly" do
  44 + q = @aoi_clone.create_question("foobarbaz", {:name => 'foo'})
  45 + prompt = q.picked_prompt
  46 + prompt.active?.should == true
  47 + end
  48 +
  49 + it "should choose an active prompt using catchup algorithm" do
  50 + q = @aoi_clone.create_question("foobarbaz", {:name => 'foo'})
  51 + prompt = q.catchup_choose_prompt
  52 + prompt.active?.should == true
  53 + end
  54 +
  55 + context "catchup algorithm" do
  56 + before(:all) do
  57 + user = Factory.create(:user)
  58 + @catchup_q = Factory.create(:aoi_question, :site => user, :creator => user.default_visitor)
  59 +
  60 + @catchup_q.it_should_autoactivate_ideas = true
  61 + @catchup_q.save!
  62 +
  63 + 100.times.each do |num|
  64 + user.create_choice("visitor identifier", @catchup_q, {:data => num, :local_identifier => "exmaple"})
  65 + end
  66 + end
  67 + it "should choose an active prompt using catchup algorithm on a large number of choices" do
  68 + @catchup_q.reload
  69 + # Sanity check, 2 extra choices are autocreated when empty question created
  70 + @catchup_q.choices.size.should == 102
  71 +
  72 + #the catchup algorithm depends on all prompts being generated automatically
  73 + @catchup_q.prompts.size.should == 102 **2 - 102
  74 +
  75 + prompt = @catchup_q.catchup_choose_prompt
  76 + prompt.active?.should == true
  77 + end
  78 +
  79 + it "should have a normalized vector of weights to support the catchup algorithm" do
  80 + weights = @catchup_q.catchup_prompts_weights
  81 + sum = 0
  82 + weights.each{|k,v| sum+=v}
  83 +
  84 + (sum - 1.0).abs.should < 0.000001
  85 + end
  86 +
  87 +
  88 +
  89 + end
  90 +
40 91  
41 92 #q = @aoi_clone.create_question("foobarbaz", {:name => 'foo'})
42 93 end
... ...