marano/bgirlz

View on GitHub
spec_helper.rb

Summary

Maintainability
B
4 hrs
Test Coverage
ENV['RACK_ENV'] = 'test'

require 'tempfile'

require_relative 'bgirlz'

require 'capybara/rspec'
require 'capybara/dsl'

RSpec.configure do |c|
  c.include Capybara::DSL
  c.before do
    PageLink.destroy_all
    Page.destroy_all
    Event.destroy_all
    Capybara.reset_sessions!
  end
end

Capybara.app = Controller

if ENV['headless'] =~ /false/
  Capybara.current_driver = :selenium
  Capybara.javascript_driver = :selenium
else
  Headless.new.start unless RbConfig::CONFIG['host_os'].include?('darwin')
  Capybara.current_driver = :webkit
  Capybara.javascript_driver = :webkit
end

include LinkOpener

def upload_page_and_assert_data_was_saved(params, success = true)
  visit '/'
  fill_in 'name', :with => params[:name] if params[:name]
  fill_in 'middle_initial', :with => params[:middle_initial] if params[:middle_initial]
  fill_in 'last_name', :with => params[:last_name] if params[:last_name]
  select params[:event], :from => 'event' unless params[:event].blank?

  if params.has_key?(:enable_comments)
    if params[:enable_comments]
      check('enable_comments')
    else
      uncheck('enable_comments')
    end
  end

  if params[:html]
    click_link 'HTML'
    fill_in 'html', :with => params[:html]
  end
  if params[:link]
    click_link 'Link'
    fill_in 'link', :with => params[:link]
  end
  if params[:page]
    click_link 'File'
    attach_file('page', params[:page])
  end

  click_button 'Publish my website'

  if (success)
    page.should have_css('#info_panel')
    uploadedPage = Page.where(:name => params[:name]).first
    uploadedPage.name.should == params[:name].to_s
    uploadedPage.middle_initial.should == params[:middle_initial].to_s
    uploadedPage.last_name.should == params[:last_name].to_s
    if params[:html]
      uploadedPage.content.should == params[:html]
    end
    if params[:link]
      uploadedPage.content.should == content_from_link(params[:link])
    end
    if params[:page]
      uploadedPage.content.should == File.read(params[:page])
    end
    if params.has_key?(:enable_comments)
      uploadedPage.enable_comments.should == params[:enable_comments]
    else
      uploadedPage.should_not be_enable_comments
    end
    return uploadedPage
  end
end

def url
  "http://#{Capybara.current_session.server.host}:#{Capybara.current_session.server.port}"
end

def assert_page_is_displayed(uploaded_page)
  page.should have_content uploaded_page.content
  if uploaded_page.enable_comments
    page.should have_css '#comments'
    page.find('#comments').find('.fb-comments')['data-href'].should == uploaded_page.original_link_to_self(Request.new)
  else
    page.should_not have_css '#comments'
  end
end

def assert_upload_is_ok(uploaded_page)
  assert_page_is_displayed(uploaded_page)

  link = "#{url}#{uploaded_page.relative_link_to_self}"
  pretty_link = "#{url}#{uploaded_page.relative_pretty_link_to_self}"
  page.should have_content pretty_link
  page.find('a#link-to-self')['href'].should == link

  find('#info_panel').should be_visible
  click_link 'close'
  find('#info_panel').should_not be_visible

  visit uploaded_page.relative_link_to_self

  page.should_not have_css('#info_panel')
  assert_page_is_displayed(uploaded_page)
end

class Request
  def host_with_port
    "#{Capybara.current_session.server.host}:#{Capybara.current_session.server.port}"
  end
end

def assert_uploaded_page_is_displayed_within_event(uploaded_page)
  within_event uploaded_page.event do
    if uploaded_page.event.blank?
      page.should have_css('h4', :text => '<event missing>')
    else
      page.should have_css('h4', :text => uploaded_page.event)
    end
    if find('.event-expand').visible?
      find('.event-expand').click
    end
    page.should have_css('td.name', :text => uploaded_page.full_name)
    page.should have_css('td.date', :text => uploaded_page.formatted_created_at)
    page.should have_css('td.link', :text => uploaded_page.relative_pretty_link_to_self)
    page.should have_link uploaded_page.relative_link_to_self
  end
end

def expand_event(event)
  within_event(event) { find('.event-expand').click }
end

def collapse_event(event)
  within_event(event) { find('.event-collapse').click }
end

def hover_event_header(event)
  page.execute_script("$(\"#{event_div_locator(event)}\").find('thead').find('tr').trigger('mouseenter');")
end

def hover_out_event_header(event)
  page.execute_script("$(\"#{event_div_locator(event)}\").find('thead').find('tr').trigger('mouseout');")
end

def hover_page_row(student_page)
  page.execute_script("$(\"#{page_row_locator(student_page)}\").trigger('mouseenter')")
end

def hover_out_page_row(student_page)
  page.execute_script("$(\"#{page_row_locator(student_page)}\").trigger('mouseout')")
end

def drag_page_to_event(student_page, target_event)
  target_event_div = page.find(".event[data-event=#{target_event}]")
  page.find(page_row_locator(student_page)).find('.move-page').drag_to(target_event_div)
end

def collapse_event(event)
  within_event(event) { find('.event-collapse').click }
end

def within_event(event)
  within ".event[data-event='#{event}']" do
    yield
  end
end

private

def event_div_locator(event)
  ".event[data-event='#{event}']"
end

def page_row_locator(student_page)
  attributes = []
  attributes << "[data-page-name='#{student_page.name}']"
  attributes << "[data-page-middle-initial='#{student_page.middle_initial}']" unless student_page.middle_initial.blank?
  attributes << "[data-page-last-name='#{student_page.last_name}']" unless student_page.last_name.blank?
  ".page#{attributes.join('')}"
end