diff --git a/features/step_definitions/webrat_steps.rb b/features/step_definitions/webrat_steps.rb new file mode 100644 index 0000000..a32841c --- /dev/null +++ b/features/step_definitions/webrat_steps.rb @@ -0,0 +1,93 @@ +# Commonly used webrat steps +# http://github.com/brynary/webrat + +When /^I press "(.*)"$/ do |button| + click_button(button) +end + +When /^I follow "(.*)"$/ do |link| + click_link(link) +end + +When /^I fill in "(.*)" with "(.*)"$/ do |field, value| + fill_in(field, :with => value) +end + +When /^I select "(.*)" from "(.*)"$/ do |value, field| + select(value, :from => field) +end + +# Use this step in conjunction with Rail's datetime_select helper. For example: +# When I select "December 25, 2008 10:00" as the date and time +When /^I select "(.*)" as the date and time$/ do |time| + select_datetime(time) +end + +# Use this step when using multiple datetime_select helpers on a page or +# you want to specify which datetime to select. Given the following view: +# <%= f.label :preferred %>
+# <%= f.datetime_select :preferred %> +# <%= f.label :alternative %>
+# <%= f.datetime_select :alternative %> +# The following steps would fill out the form: +# When I select "November 23, 2004 11:20" as the "Preferred" data and time +# And I select "November 25, 2004 10:30" as the "Alternative" data and time +When /^I select "(.*)" as the "(.*)" date and time$/ do |datetime, datetime_label| + select_datetime(datetime, :from => datetime_label) +end + +# Use this step in conjuction with Rail's time_select helper. For example: +# When I select "2:20PM" as the time +# Note: Rail's default time helper provides 24-hour time-- not 12 hour time. Webrat +# will convert the 2:20PM to 14:20 and then select it. +When /^I select "(.*)" as the time$/ do |time| + select_time(time) +end + +# Use this step when using multiple time_select helpers on a page or you want to +# specify the name of the time on the form. For example: +# When I select "7:30AM" as the "Gym" time +When /^I select "(.*)" as the "(.*)" time$/ do |time, time_label| + select_time(time, :from => time_label) +end + +# Use this step in conjuction with Rail's date_select helper. For example: +# When I select "February 20, 1981" as the date +When /^I select "(.*)" as the date$/ do |date| + select_date(date) +end + +# Use this step when using multiple date_select helpers on one page or +# you want to specify the name of the date on the form. For example: +# When I select "April 26, 1982" as the "Date of Birth" date +When /^I select "(.*)" as the "(.*)" date$/ do |date, date_label| + select_date(date, :from => date_label) +end + +When /^I check "(.*)"$/ do |field| + check(field) +end + +When /^I uncheck "(.*)"$/ do |field| + uncheck(field) +end + +When /^I choose "(.*)"$/ do |field| + choose(field) +end + +When /^I attach the file at "(.*)" to "(.*)" $/ do |path, field| + attach_file(field, path) +end + +Then /^I should see "(.*)"$/ do |text| + response.body.should =~ /#{text}/m +end + +Then /^I should not see "(.*)"$/ do |text| + response.body.should_not =~ /#{text}/m +end + +Then /^the "(.*)" checkbox should be checked$/ do |label| + field_labeled(label).should be_checked +end diff --git a/features/support/env.rb b/features/support/env.rb new file mode 100644 index 0000000..f698c55 --- /dev/null +++ b/features/support/env.rb @@ -0,0 +1,22 @@ +# Sets up the Rails environment for Cucumber +ENV["RAILS_ENV"] = "test" +require File.expand_path(File.dirname(__FILE__) + '/../../../../../config/environment') +require 'cucumber/rails/world' +Cucumber::Rails.use_transactional_fixtures + +require 'webrat/rails' + +# Comment out the next two lines if you're not using RSpec's matchers (should / should_not) in your steps. +require 'cucumber/rails/rspec' +require 'webrat/rspec-rails' + +require 'ruby-debug' + +# require the entire app if we're running under coverage testing, +# so we measure 0% covered files in the report +# +# http://www.pervasivecode.com/blog/2008/05/16/making-rcov-measure-your-whole-rails-app-even-if-tests-miss-entire-source-files/ +if defined?(Rcov) + all_app_files = Dir.glob('{app,lib}/**/*.rb') + all_app_files.each{|rb| require rb} +end diff --git a/spec/controllers/empty b/spec/controllers/empty new file mode 100644 index 0000000..e69de29 diff --git a/spec/rcov.opts b/spec/rcov.opts new file mode 100644 index 0000000..e69de29 diff --git a/spec/sanity_spec.rb b/spec/sanity_spec.rb new file mode 100644 index 0000000..6de6672 --- /dev/null +++ b/spec/sanity_spec.rb @@ -0,0 +1,7 @@ +require File.dirname(__FILE__) + '/spec_helper' + +describe Class do + it "should be a class of Class" do + Class.class.should eql(Class) + end +end diff --git a/spec/spec.opts b/spec/spec.opts new file mode 100644 index 0000000..2144705 --- /dev/null +++ b/spec/spec.opts @@ -0,0 +1,7 @@ +--colour +--format +progress +--loadby +mtime +--reverse +--backtrace \ No newline at end of file diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..5ff55df --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,81 @@ +# This file is copied to ~/spec when you run 'ruby script/generate rspec' +# from the project root directory. +ENV["RAILS_ENV"] = "test" +require File.expand_path(File.dirname(__FILE__) + "/../../../../config/environment") +require 'spec' +require 'spec/rails' +require 'ruby-debug' + +Spec::Runner.configure do |config| + # If you're not using ActiveRecord you should remove these + # lines, delete config/database.yml and disable :active_record + # in your config/boot.rb + config.use_transactional_fixtures = true + config.use_instantiated_fixtures = false + config.fixture_path = RAILS_ROOT + '/spec/fixtures/' + + # == Fixtures + # + # You can declare fixtures for each example_group like this: + # describe "...." do + # fixtures :table_a, :table_b + # + # Alternatively, if you prefer to declare them only once, you can + # do so right here. Just uncomment the next line and replace the fixture + # names with your fixtures. + # + # config.global_fixtures = :table_a, :table_b + # + # If you declare global fixtures, be aware that they will be declared + # for all of your examples, even those that don't use them. + # + # == Mock Framework + # + # RSpec uses it's own mocking framework by default. If you prefer to + # use mocha, flexmock or RR, uncomment the appropriate line: + # + # config.mock_with :mocha + # config.mock_with :flexmock + # config.mock_with :rr +end + +# require the entire app if we're running under coverage testing, +# so we measure 0% covered files in the report +# +# http://www.pervasivecode.com/blog/2008/05/16/making-rcov-measure-your-whole-rails-app-even-if-tests-miss-entire-source-files/ +if defined?(Rcov) + all_app_files = Dir.glob('{app,lib}/**/*.rb') + all_app_files.each{|rb| require rb} +end + + +module AssociationMatcher + class Association + def initialize(field, association_type) + @field = field + @association_type = association_type + end + + def matches?(model) + @model=model + association = @model.reflect_on_association(@field) + return false if association.nil? + + return association.name == @field && association.macro == @association_type + end + + def failure_message + "expected <#{@model.name}> to have a #{@association_type} association for #{@field}" + end + + def negative_failure_message + "expected <#{@model.name}> to not have a #{@association_type} association for #{@field} but one was found" + end + end + + def have_association(field, association_type) + Association.new(field, association_type) + end +end + +include AssociationMatcher diff --git a/spec/views/empty b/spec/views/empty new file mode 100644 index 0000000..e69de29