sandwich 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.6
1
+ 0.0.7
@@ -18,6 +18,10 @@ Then /^show me the source for ([^\"]+)$/ do |selector|
18
18
  puts locate(selector_for(selector)).html
19
19
  end
20
20
 
21
+ Then /^wait (\d+)$/ do |time|
22
+ sleep time.to_i
23
+ end
24
+
21
25
  Then /^show me the page text$/ do
22
26
  IO.popen("html2text", "w+") do |io|
23
27
  io.puts response.body
@@ -16,10 +16,10 @@ Transform /(an?|\d+) (.+) #{qc}$/ do |total, what, value|
16
16
  model = class_for(what)
17
17
  end
18
18
 
19
- raise \
20
- %q{No attribute passed and no default attribute defined. You can do that with:
19
+ raise \
20
+ %Q{No attribute passed and no default attribute defined. You can do that with:
21
21
 
22
- YourModel.default_attribute :your_default_attribute
22
+ #{model}.default_attribute :your_default_attribute
23
23
 
24
24
  } if attr.nil?
25
25
 
@@ -37,12 +37,9 @@ Transform /the (.+) #{qc}$/ do |what, value|
37
37
  klass.find(:first, :conditions => {klass.default_attribute => value})
38
38
  end
39
39
 
40
- Given /^(.+) belonging to (.+)$/ do |child, parent|
40
+ Given /^(.+) belong(?:ing|s) to (.+)$/ do |child, parent|
41
41
  child.send("#{parent.class.name.underscore}=", parent)
42
- end
43
-
44
- Given /^(a .+ with .+)$/ do |obj|
45
- # la la la la
42
+ child.save!
46
43
  end
47
44
 
48
45
  Given /^(.+) has (.+)$/ do |parent, child|
@@ -66,7 +63,7 @@ end
66
63
  Given /^the following (.+):$/ do |what, table|
67
64
  class_for(what.singularize).tap do |model|
68
65
  table.hashes.each do |h|
69
- model.make(Hash[*h.each_pair.map { |(k, v)| [k.underscore, v] }.flatten])
66
+ model.make(Hash[*h.each_pair.map { |(k, v)| [k.underscore, value_for(model, k, v)] }.flatten])
70
67
  end
71
68
  end
72
69
  end
@@ -1,12 +1,12 @@
1
1
  When /^I fill in the #{qc} row, #{qc} column in (.+?) with #{qc}$/ do |row, column, path, value|
2
2
  selector = xpath(selector_for(path))
3
- _, column_index = page.all(:xpath, "#{selector}//th").each_with_index.find { |e, i| e.text == column }
3
+ _, column_index = page.find(:xpath, "#{selector}//tr", :text => /#{column}/).
4
+ all(:xpath, "*").each_with_index.find { |e, i| e.text == column }
4
5
  _, row_index = page.all(:xpath, "#{selector}//tr").each_with_index.find { |e, i| e.text.include?(row) }
6
+
5
7
  page.locate(:xpath, "((#{selector}//tr)[#{row_index + 1}]/td)[#{column_index + 1}]/input").set(value)
6
8
  end
7
9
 
8
10
  Then /^I should see #{qc} in the (\w+) data row of (.+)$/ do |value, ordinal, path|
9
- within(selector_for(path)) do
10
- page.should have_xpath("//tr[#{ordinal.to_i}]/td", :text => value)
11
- end
11
+ page.should have_xpath("(#{xpath(selector_for(path))}//tr[td])[#{ordinal.to_i}]", :text => value)
12
12
  end
@@ -1,3 +1,31 @@
1
- Then /^I should see "([^\"]*)" within (.+)$/ do |text, selector|
1
+ Then /^I should see "([^\"]*)" (?:with)?in (.+)$/ do |text, selector|
2
2
  page.should have_xpath(xpath(selector_for(selector)), :text => text)
3
3
  end
4
+
5
+ Then /^I should see the header "([^\"]*)"$/ do |text|
6
+ page.should have_xpath("//h1 | //h2 | //h3 | //h4 | //h5 | //h6")
7
+ end
8
+
9
+ Then /^I should see the (notice|error) "([^\"]*)"$/ do |type, message|
10
+ locate(:xpath, xpath(selector_for(type)), :text => message)
11
+ end
12
+
13
+ Then /^I should see (.+)$/ do |selector|
14
+ locate(:xpath, xpath(selector_for(selector)))
15
+ end
16
+
17
+ When /^I fill in (.+) with the following:$/ do |selector, table|
18
+ within(:xpath, xpath(selector_for(selector))) do
19
+ table.raw.each do |(k, v)|
20
+ node = find(:xpath, Capybara::XPath.field(k))
21
+
22
+ raise Capybara::ElementNotFound, "Unable to locate '#{selector_for(selector)}'" unless node
23
+
24
+ if (node.tag_name == 'select')
25
+ node.select(v)
26
+ else
27
+ node.set(v)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -4,8 +4,23 @@ module Sandwich
4
4
  name.underscore.classify.constantize
5
5
  end
6
6
 
7
- def xpath(selector)
8
- if Capybara.default_selector.to_sym == :css
7
+ def value_for(model, attr, value)
8
+ if assoc = model.reflect_on_association(attr.to_sym)
9
+ assoc_class = assoc.class_name.constantize
10
+ assoc_class.make(assoc_class.default_attribute => value)
11
+ else
12
+ value
13
+ end
14
+ end
15
+
16
+ def xpath(unknown_selector)
17
+ kind, selector = if Array === unknown_selector
18
+ [unknown_selector[0].to_sym, unknown_selector[1]]
19
+ else
20
+ [Capybara.default_selector.to_sym, unknown_selector]
21
+ end
22
+
23
+ if kind == :css
9
24
  Capybara::XPath.from_css(selector)
10
25
  else
11
26
  selector
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 6
9
- version: 0.0.6
8
+ - 7
9
+ version: 0.0.7
10
10
  platform: ruby
11
11
  authors:
12
12
  - David Leal
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-21 00:00:00 +01:00
17
+ date: 2010-04-26 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency