user_spec.rb 3.04 KB
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe User do
  it {should have_many :visitors}

  before(:each) do
    @aoi_clone = Factory.create(:user)
    @question = Factory.create(:aoi_question)
    @prompt = @question.prompts.first

  end

  
  it "should be able to create a question as a site" do
    q = @aoi_clone.create_question("foobarbaz", {:name => 'foo'})
    q.should_not be_nil
    q.site.should_not be_nil
    q.site.should eql @aoi_clone
  end
  
  it "should be able to create a choice for a question " do
    q = @aoi_clone.create_question("foobarbaz", {:name => 'foo'}) #replace with a factory
    c = @aoi_clone.create_choice("foobarbaz", q, {:data => 'foobarbaz'})
    q.should_not be_nil
    q.choices.should_not be_empty
    q.choices.size.should eql 1
  end
  
  it "should be able to record a visitor's vote" do
    @visitor = @aoi_clone.visitors.find_or_create_by_identifier("test_visitor_identifier")
    @appearance = @aoi_clone.record_appearance(@visitor, @prompt)

    optional_vote_params = {:visitor_identifier => @visitor.identifier, 
                            :appearance_lookup => @appearance.lookup,
		            :time_viewed => 213}

    required_vote_params = {:prompt => @prompt, 
                            :direction => "left"}
    params = optional_vote_params.merge(required_vote_params)
    
    v = @aoi_clone.record_vote(params)

    v.should_not be_nil
    prompt_votes = @prompt.votes(true)
    prompt_votes.should_not be_empty
    prompt_votes.size.should == 1
    
    choices = @prompt.choices
    choices.should_not be_empty
    
    choice_votes = choices[0].votes(true)
    choice_votes.should_not be_empty
    choice_votes.size.should == 1

    v.appearance.should == @appearance
    v.voter.should == @visitor
  end
  it "should be able to record a visitor's vote with a default visitor" do

    optional_vote_params = {:time_viewed => 213}

    required_vote_params = {:prompt => @prompt, 
                            :direction => "left"}
    params = optional_vote_params.merge(required_vote_params)
    
    v = @aoi_clone.record_vote(params)

    v.should_not be_nil
    prompt_votes = @prompt.votes(true)
    prompt_votes.should_not be_empty
    prompt_votes.size.should == 1
    
    choices = @prompt.choices
    choices.should_not be_empty
    
    choice_votes = choices[0].votes(true)
    choice_votes.should_not be_empty
    choice_votes.size.should == 1

    v.voter.should == @aoi_clone.default_visitor
  end
  
  it "should be able to record a visitor's skip" do
    @visitor = @aoi_clone.visitors.find_or_create_by_identifier("test_visitor_identifier")
    @appearance = @aoi_clone.record_appearance(@visitor, @prompt)
    optional_skip_params = {
      :visitor_identifier => @visitor.identifier,
      :appearance_lookup => @appearance.lookup,
      :time_viewed => 340
    }
    required_skip_params = {:prompt => @prompt }
    params = optional_skip_params.merge(required_skip_params)
    s = @aoi_clone.record_skip(params)
    s.appearance.should == @appearance
    s.skipper.should == @visitor
  end

end