From 578ad0c74e31c77add5ddc3c190a3f2cd2c99dcd Mon Sep 17 00:00:00 2001 From: Dhruv Kapadia Date: Thu, 3 Jun 2010 12:06:55 -0400 Subject: [PATCH] Created aoi_question factory to simplify spec setup code --- app/models/question.rb | 2 +- spec/controllers/questions_controller_spec.rb | 12 ++++++------ spec/factories.rb | 18 +++++++++++++++++- spec/models/question_spec.rb | 36 ++++++++++++------------------------ test/factories.rb | 0 5 files changed, 36 insertions(+), 32 deletions(-) delete mode 100644 test/factories.rb diff --git a/app/models/question.rb b/app/models/question.rb index f289792..417a77f 100644 --- a/app/models/question.rb +++ b/app/models/question.rb @@ -24,7 +24,7 @@ class Question < ActiveRecord::Base attr_accessor :ideas after_create :create_choices_from_ideas def create_choices_from_ideas - if ideas.any? + if ideas && ideas.any? ideas.each do |idea| item = Item.create!(:data => idea.squish.strip, :creator => self.creator) choices.create!(:item => item, :creator => self.creator, :active => true, :data => idea.squish.strip) diff --git a/spec/controllers/questions_controller_spec.rb b/spec/controllers/questions_controller_spec.rb index def0e6c..0c2b4be 100644 --- a/spec/controllers/questions_controller_spec.rb +++ b/spec/controllers/questions_controller_spec.rb @@ -2,23 +2,22 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') describe QuestionsController do - # integrate_views - # def sign_in_as(user) @controller.current_user = user return user end - # + before(:each) do - @user = Factory.create(:user, :email => "pius@alum.mit.edu", :password => "password", :password_confirmation => "password", :id => 8) - sign_in_as(@user = Factory(:email_confirmed_user)) - @question = @user.create_question("foobarbaz", {:name => 'foo'}) + @question = Factory.create(:aoi_question) + sign_in_as(@user = @question.site) + @creator = @question.creator end it "responds with basic question information" do get :show, :id => @question.id, :format => "xml" assigns[:question].should == @question @response.body.should have_tag("question") + @response.code.should == "200" end @@ -27,6 +26,7 @@ describe QuestionsController do assigns[:question].should == @question #@response.body.should be_nil + @response.code.should == "200" @response.body.should have_tag("question") @response.body.should have_tag("picked_prompt_id") @response.body.should have_tag("appearance_id") diff --git a/spec/factories.rb b/spec/factories.rb index 8471370..e8e76bb 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -2,17 +2,31 @@ Factory.define(:item) do |f| f.sequence(:data) { |i| "Item #{i}" } end + Factory.define(:question) do |f| f.sequence(:name) { |i| "Name #{i}" } + f.site {|s| s.association(:user)} + f.creator {|c| c.association(:visitor, :site => c.site)} end Factory.define(:aoi_question, :parent => :question) do |f| f.sequence(:name) { |i| "Name #{i}" } f.association :site, :factory => :user - f.association :creator, :factory => :visitor + f.creator {|c| c.association(:visitor, :site => c.site)} + f.choices do |question| + result = [] + 2.times do + result << Factory.build(:choice, + :question => question.result, + :creator => question.creator, + :active => true) + end + result + end end Factory.define(:visitor) do |f| f.sequence(:identifier) { |i| "Identifier #{i}" } + f.association :site, :factory => :user end Factory.define(:prompt) do |f| @@ -21,6 +35,8 @@ end Factory.define(:choice) do |f| f.sequence(:data) { |i| "Choice: #{i}" } + f.association :question + f.creator {|c| c.association(:visitor, :site => c.question.site)} end Factory.sequence :email do |n| diff --git a/spec/models/question_spec.rb b/spec/models/question_spec.rb index 0c70d3b..691ef6e 100644 --- a/spec/models/question_spec.rb +++ b/spec/models/question_spec.rb @@ -13,24 +13,10 @@ describe Question do it {should validate_presence_of :creator} before(:each) do - @aoi_clone = Factory.create(:user,:password => "password", :password_confirmation => "password", :id => 8) - @valid_attributes = { - :site => @aoi_clone, - :creator => @aoi_clone.default_visitor - - } + + @question = Factory.create(:aoi_question) + @aoi_clone = @question.site - @question = @aoi_clone.create_question("foobarbaz", {:name => 'foo'}) - @question.it_should_autoactivate_ideas = true - @question.save! - - 2.times.each do |num| - @aoi_clone.create_choice("visitor identifier", @question, {:data => num.to_s, :local_identifier => "example"}) - end - - @question.reload - - end it "should have 2 active choices" do @@ -38,7 +24,8 @@ describe Question do end it "should create a new instance given valid attributes" do - Question.create!(@valid_attributes) + # Factory.attributes_for does not return associations, this is a good enough substitute + Question.create!(Factory.build(:question).attributes.symbolize_keys) end it "should not create two default choices if none are provided" do @@ -116,15 +103,15 @@ describe Question do context "catchup algorithm" do before(:all) do - user = Factory.create(:user) - @catchup_q = Factory.create(:aoi_question, :site => user, :creator => user.default_visitor) + @catchup_q = Factory.create(:aoi_question) @catchup_q.it_should_autoactivate_ideas = true @catchup_q.uses_catchup = true @catchup_q.save! - 100.times.each do |num| - user.create_choice("visitor identifier", @catchup_q, {:data => num.to_s, :local_identifier => "exmaple"}) + # 2 ideas already exist, so this will make an even hundred + 98.times.each do |num| + @catchup_q.site.create_choice("visitor identifier", @catchup_q, {:data => num.to_s, :local_identifier => "exmaple"}) end @catchup_q.reload end @@ -202,8 +189,9 @@ describe Question do context "exporting data" do before(:all) do - user = Factory.create(:user) - @question = Factory.create(:aoi_question, :site => user, :creator => user.default_visitor) + @question = Factory.create(:aoi_question) + user = @question.site + @question.it_should_autoactivate_ideas = true @question.save! diff --git a/test/factories.rb b/test/factories.rb deleted file mode 100644 index e69de29..0000000 --- a/test/factories.rb +++ /dev/null -- libgit2 0.21.2