Skip to content

Commit

Permalink
Merge branch 'capybara'
Browse files Browse the repository at this point in the history
  • Loading branch information
rikeshdhokia committed Jun 26, 2011
2 parents 860cc77 + 8cb3e54 commit 0a9aa57
Show file tree
Hide file tree
Showing 12 changed files with 531 additions and 6 deletions.
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,6 @@ group :test do
gem 'rspec', '1.3.2'
gem 'rspec-rails', '1.3.4'
gem 'webrat', '0.7.1'
gem 'capybara', '1.0.0'
end

19 changes: 19 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,15 @@ GEM
activesupport (= 2.3.11)
activesupport (2.3.11)
builder (2.1.2)
capybara (1.0.0)
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
rack (>= 1.0.0)
rack-test (>= 0.5.4)
selenium-webdriver (~> 0.2.0)
xpath (~> 0.1.4)
childprocess (0.1.9)
ffi (~> 1.0.6)
configuration (1.2.0)
couchrest (0.34)
mime-types (>= 1.15)
Expand All @@ -29,6 +38,7 @@ GEM
diff-lcs (1.1.2)
escape (0.0.4)
fastercsv (1.5.3)
ffi (1.0.9)
gherkin (2.2.9)
json (~> 1.4.6)
term-ansicolor (~> 1.0.5)
Expand Down Expand Up @@ -73,6 +83,12 @@ GEM
rspec-rails (1.3.4)
rack (>= 1.0.0)
rspec (~> 1.3.1)
rubyzip (0.9.4)
selenium-webdriver (0.2.2)
childprocess (>= 0.1.9)
ffi (>= 1.0.7)
json_pure
rubyzip
subexec (0.0.4)
sunspot (1.1.0)
escape (= 0.0.4)
Expand All @@ -84,11 +100,14 @@ GEM
nokogiri (>= 1.2.0)
rack (>= 1.0)
rack-test (>= 0.5.3)
xpath (0.1.4)
nokogiri (~> 1.3)

PLATFORMS
ruby

DEPENDENCIES
capybara (= 1.0.0)
couchrest (= 0.34)
cucumber (= 0.9.4)
cucumber-rails (= 0.3.2)
Expand Down
24 changes: 24 additions & 0 deletions capybara_features/advanced_search.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
@wip
Feature: So that I can find a child that has been entered in to RapidFTR
As a user of the website
I want to use the advanced search criteria to find all relevant results

Background:
Given I am logged in
And I am on child advanced search page

@javascript
Scenario: Searching for children by the user who entered the details

Given the following children exist in the system:
| name | created_by |
| Willis | aid_worker_1 |
| Will | aid_worker_2 |

When I check "created_by"
And I fill in "aid_worker_1" for "created_by_value"
And I press "Search"

Then I should be on the child advanced search results page

# And I should see "Willis" in the search results
9 changes: 9 additions & 0 deletions capybara_features/capybara.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
@javascript
Feature: Test capybara is configured correctly

Scenario: Log into RapidFTR
Given a user "rapidftr" with a password "rapidftr"
Given I am on the login page
When I fill in "rapidftr" for "user_name"
And I fill in "rapidftr" for "password"
And I press "Log in"
52 changes: 52 additions & 0 deletions capybara_features/step_definitions/database_steps.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
Given /^an? (user|admin) "([^\"]*)" with(?: a)? password "([^\"]*)"$/ do |user_type, username, password|
user_type = user_type == 'user' ? 'User' : 'Administrator'
@user = User.new(
:user_name=>username,
:password=>password,
:password_confirmation=>password,
:user_type=> user_type,
:full_name=>username,
:email=>"#{username}@test.com")
@user.save!
end

Given /^an? (user|admin) "([^"]+)"$/ do |user_type, user_name|
Given %(a #{user_type} "#{user_name}" with password "123")
end

Given /^I am logged in as "(.+)"/ do |user_name|
@session = Session.for_user(User.find_by_user_name(user_name), nil)
@session.save!
@session.put_in_cookie cookies
end

Given /^I have an expired session/ do
@session.destroy
end

Given /^user "(.+)" is disabled$/ do |username|
user = User.find_by_user_name(username)
user.disabled = true
user.save!
end

Then /^user "(.+)" should be disabled$/ do |username|
User.find_by_user_name(username).should be_disabled
end

Then /^user "(.+)" should not be disabled$/ do |username|
User.find_by_user_name(username).should_not be_disabled
end

Given /^the following admin contact info:$/ do |table|
contact_info = table.hashes.inject({}) do |result, current|
result[current["key"]] = current["value"]
result
end
contact_info[:id] = "administrator"
ContactInformation.create contact_info
end




201 changes: 201 additions & 0 deletions capybara_features/step_definitions/web_steps.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
# It is recommended to regenerate this file in the future when you upgrade to a
# newer version of cucumber-rails. Consider adding your own code to a new file
# instead of editing this one. Cucumber will automatically load all features/**/*.rb
# files.

require 'uri'
require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))

module WithinHelpers
def with_scope(locator)
locator ? within(locator) { yield } : yield
end
end
World(WithinHelpers)

Given /^(?:|I )am on (.+)$/ do |page_name|
visit path_to(page_name)
end

When /^(?:|I )go to (.+)$/ do |page_name|
visit path_to(page_name)
end

When /^(?:|I )press "([^\"]*)"(?: within "([^\"]*)")?$/ do |button, selector|
with_scope(selector) do
click_button(button)
end
end

When /^(?:|I )follow "([^\"]*)"(?: within "([^\"]*)")?$/ do |link, selector|
with_scope(selector) do
click_link(link)
end
end

When /^(?:|I )fill in "([^\"]*)" with "([^\"]*)"(?: within "([^\"]*)")?$/ do |field, value, selector|
with_scope(selector) do
fill_in(field, :with => value)
end
end

When /^(?:|I )fill in "([^\"]*)" for "([^\"]*)"(?: within "([^\"]*)")?$/ do |value, field, selector|
with_scope(selector) do
fill_in(field, :with => value)
end
end

# Use this to fill in an entire form with data from a table. Example:
#
# When I fill in the following:
# | Account Number | 5002 |
# | Expiry date | 2009-11-01 |
# | Note | Nice guy |
# | Wants Email? | |
#
# TODO: Add support for checkbox, select og option
# based on naming conventions.
#
When /^(?:|I )fill in the following(?: within "([^\"]*)")?:$/ do |selector, fields|
with_scope(selector) do
fields.rows_hash.each do |name, value|
When %{I fill in "#{name}" with "#{value}"}
end
end
end

When /^(?:|I )select "([^\"]*)" from "([^\"]*)"(?: within "([^\"]*)")?$/ do |value, field, selector|
with_scope(selector) do
select(value, :from => field)
end
end

When /^(?:|I )check "([^\"]*)"(?: within "([^\"]*)")?$/ do |field, selector|
with_scope(selector) do
check(field)
end
end

When /^(?:|I )uncheck "([^\"]*)"(?: within "([^\"]*)")?$/ do |field, selector|
with_scope(selector) do
uncheck(field)
end
end

When /^(?:|I )choose "([^\"]*)"(?: within "([^\"]*)")?$/ do |field, selector|
with_scope(selector) do
choose(field)
end
end

When /^(?:|I )attach the file "([^\"]*)" to "([^\"]*)"(?: within "([^\"]*)")?$/ do |path, field, selector|
with_scope(selector) do
attach_file(field, path)
end
end

Then /^(?:|I )should see "([^\"]*)"(?: within "([^\"]*)")?$/ do |text, selector|
with_scope(selector) do
if defined?(Spec::Rails::Matchers)
page.should have_content(text)
else
assert page.has_content?(text)
end
end
end

Then /^(?:|I )should see \/([^\/]*)\/(?: within "([^\"]*)")?$/ do |regexp, selector|
regexp = Regexp.new(regexp)
with_scope(selector) do
if defined?(Spec::Rails::Matchers)
page.should have_xpath('//*', :text => regexp)
else
assert page.has_xpath?('//*', :text => regexp)
end
end
end

Then /^(?:|I )should not see "([^\"]*)"(?: within "([^\"]*)")?$/ do |text, selector|
with_scope(selector) do
if defined?(Spec::Rails::Matchers)
page.should have_no_content(text)
else
assert page.has_no_content?(text)
end
end
end

Then /^(?:|I )should not see \/([^\/]*)\/(?: within "([^\"]*)")?$/ do |regexp, selector|
regexp = Regexp.new(regexp)
with_scope(selector) do
if defined?(Spec::Rails::Matchers)
page.should have_no_xpath('//*', :text => regexp)
else
assert page.has_no_xpath?('//*', :text => regexp)
end
end
end

Then /^the "([^\"]*)" field(?: within "([^\"]*)")? should contain "([^\"]*)"$/ do |field, selector, value|
with_scope(selector) do
if defined?(Spec::Rails::Matchers)
find_field(field).value.should =~ /#{value}/
else
assert_match(/#{value}/, field_labeled(field).value)
end
end
end

Then /^the "([^\"]*)" field(?: within "([^\"]*)")? should not contain "([^\"]*)"$/ do |field, selector, value|
with_scope(selector) do
if defined?(Spec::Rails::Matchers)
find_field(field).value.should_not =~ /#{value}/
else
assert_no_match(/#{value}/, find_field(field).value)
end
end
end

Then /^the "([^\"]*)" checkbox(?: within "([^\"]*)")? should be checked$/ do |label, selector|
with_scope(selector) do
if defined?(Spec::Rails::Matchers)
find_field(label)['checked'].should == 'checked'
else
assert_equal 'checked', field_labeled(label)['checked']
end
end
end

Then /^the "([^\"]*)" checkbox(?: within "([^\"]*)")? should not be checked$/ do |label, selector|
with_scope(selector) do
if defined?(Spec::Rails::Matchers)
find_field(label)['checked'].should_not == 'checked'
else
assert_not_equal 'checked', field_labeled(label)['checked']
end
end
end

Then /^(?:|I )should be on (.+)$/ do |page_name|
if defined?(Spec::Rails::Matchers)
URI.parse(current_url).path.should == path_to(page_name)
else
assert_equal path_to(page_name), URI.parse(current_url).path
end
end

Then /^(?:|I )should have the following query string:$/ do |expected_pairs|
actual_params = CGI.parse(URI.parse(current_url).query)
expected_params = Hash[expected_pairs.rows_hash.map{|k,v| [k,[v]]}]

if defined?(Spec::Rails::Matchers)
actual_params.should == expected_params
else
assert_equal expected_params, actual_params
end
end

Then /^show me the page$/ do
save_and_open_page
end
Loading

0 comments on commit 0a9aa57

Please sign in to comment.