cucumber-sammies 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -6
- data/lib/cucumber/sammies/step_definitions/content_steps.rb +8 -0
- data/lib/cucumber/sammies/step_definitions/form_steps.rb +8 -0
- data/lib/cucumber/sammies/step_definitions/navigation_steps.rb +35 -0
- data/lib/cucumber/sammies/step_definitions/time_steps.rb +72 -0
- data/lib/cucumber/sammies/step_definitions/troubleshooting_steps.rb +4 -0
- data/lib/cucumber/sammies/support/resolvers.rb +25 -0
- data/lib/cucumber/sammies/version.rb +1 -1
- metadata +3 -2
- data/lib/cucumber/sammies/step_definitions/resolvers.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad1a61c559f37d8924f68d5b07ba90af4b4cf4de
|
4
|
+
data.tar.gz: 915dc6786ea5add4cd7e5fc037caf3b88fc1d81d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6d112211ab84bc13082e96888c6cbae533e4b8238aadc98e0760c4beae121f0c87c59af63f60ba0a731e856211ed6b0db962ac53d2c2d975ebc8b7933256067
|
7
|
+
data.tar.gz: 96aa6bda9fc40f7d081250e31cc042f24e806fc778fd6d342f7ff840dcc050a77b4eb229f1cc34ab8d7cd3c87af0a8a3b22bf87d1bb8cc0efb8f8f330f253473
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
![Cucumber Sandwhiches](./sammies.jpg)
|
8
8
|
|
9
|
-
Simple & tasty step definitions for your Rails application
|
9
|
+
Simple & tasty Cucumber step definitions for your Rails application(https://github.com/makandra/spreewald). Many of these steps were originally created by [Spreewald](https://github.com/makandra/spreewald).
|
10
10
|
|
11
11
|
## Installation
|
12
12
|
|
@@ -26,13 +26,13 @@ Or install it yourself as:
|
|
26
26
|
|
27
27
|
## Usage
|
28
28
|
|
29
|
-
To use `cucumber-sammies` in your cucumber tests, add
|
29
|
+
To use `cucumber-sammies` in your cucumber tests, add a line like this to your `features/support/env.rb` file.
|
30
30
|
|
31
31
|
```ruby
|
32
|
-
require 'cucumber/sammies/step_definitions
|
32
|
+
require 'cucumber/sammies/step_definitions/form_steps'
|
33
33
|
```
|
34
34
|
|
35
|
-
|
35
|
+
All the steps can be found in the [step_definitions directory](https://github.com/starfighterheavy/cucumber-sammies/tree/master/lib/cucumber/sammies/step_definitions)
|
36
36
|
|
37
37
|
## Development
|
38
38
|
|
@@ -42,7 +42,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
42
42
|
|
43
43
|
## Contributing
|
44
44
|
|
45
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
45
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/starfighterheavy/cucumber-sammies. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
46
46
|
|
47
47
|
## License
|
48
48
|
|
@@ -50,4 +50,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
50
50
|
|
51
51
|
## Code of Conduct
|
52
52
|
|
53
|
-
Everyone interacting in the Cucumber::Sammies project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/
|
53
|
+
Everyone interacting in the Cucumber::Sammies project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/starfighterheavy/cucumber-sammies/blob/master/CODE_OF_CONDUCT.md).
|
@@ -6,6 +6,14 @@ Then /^the page body should include "(.*)"$/ do |content|
|
|
6
6
|
expect(page.body).to include(content)
|
7
7
|
end
|
8
8
|
|
9
|
+
Then /^I should see "(.*)"$/ do |content|
|
10
|
+
expect(page).to have_content(content)
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^I should not see "(.*)"$/ do |content|
|
14
|
+
expect(page).not_to have_content(content)
|
15
|
+
end
|
16
|
+
|
9
17
|
Then(/^I see the (.*) flash message$/) do |message|
|
10
18
|
expect(page).to have_content(resolve_locale(message))
|
11
19
|
end
|
@@ -10,6 +10,10 @@ When(/^I click the "(.*)" submit button$/) do |link|
|
|
10
10
|
find(link).click
|
11
11
|
end
|
12
12
|
|
13
|
+
When /^(?:|I )select "([^"]*)" from "([^"]*)"$/ do |value, field|
|
14
|
+
select(value, :from => field)
|
15
|
+
end
|
16
|
+
|
13
17
|
When(/^I check the ([^"]+) box$/) do |label|
|
14
18
|
check resolve_locale(label)
|
15
19
|
end
|
@@ -42,3 +46,7 @@ def select_year_month(year:, month:, day: nil, field:)
|
|
42
46
|
select month, :from => "#{field}_2i"
|
43
47
|
select day, :from => "#{field}_3i" if day
|
44
48
|
end
|
49
|
+
|
50
|
+
When /^(?:|I )fill in "([^"]*)" (?:with|for) "([^"]*)"$/ do |field, value|
|
51
|
+
fill_in(field, :with => value)
|
52
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative '../support/resolvers'
|
2
|
+
|
1
3
|
Then(/^I am taken to (a|an|the) (.*) page$/) do |inclusive, path|
|
2
4
|
path.split(' ').each do |part|
|
3
5
|
expect(current_path.split('/')).to include(part)
|
@@ -15,6 +17,39 @@ When /^I visit "(.*)"$/ do |path|
|
|
15
17
|
visit path
|
16
18
|
end
|
17
19
|
|
20
|
+
When /^(?:|I )go to the (.+) page$/ do |page_name|
|
21
|
+
visit resolve_path(page_name)
|
22
|
+
end
|
23
|
+
|
24
|
+
When /^(?:|I )press "([^"]*)"$/ do |button|
|
25
|
+
click_button(button)
|
26
|
+
end
|
27
|
+
|
28
|
+
When /^(?:|I )follow "([^"]*)"$/ do |link|
|
29
|
+
click_link(link)
|
30
|
+
end
|
31
|
+
|
32
|
+
When /^I click on "([^\"]+)"$/ do |text|
|
33
|
+
contains_text = %{contains(., \"#{text}\")}
|
34
|
+
# find the innermost selector that matches
|
35
|
+
element = page.find(:xpath, ".//*[#{contains_text} and not (./*[#{contains_text}])]")
|
36
|
+
element.click
|
37
|
+
end
|
38
|
+
|
18
39
|
Then(/^I wait ([0-9]+) seconds$/) do |seconds|
|
19
40
|
sleep seconds.to_i
|
20
41
|
end
|
42
|
+
|
43
|
+
Then /^(?:|I )should be on the (.+) page$/ do |page_name|
|
44
|
+
fragment = URI.parse(current_url).fragment
|
45
|
+
fragment.sub!(/[#?].*/, '') if fragment # most js frameworks will usually use ? and # for params, we dont care about those
|
46
|
+
current_path = URI.parse(current_url).path
|
47
|
+
current_path << "##{fragment}" if fragment.present?
|
48
|
+
expected_path = resolve_path(page_name)
|
49
|
+
|
50
|
+
# Consider two pages equal if they only differ by a trailing slash.
|
51
|
+
current_path = expected_path if current_path.chomp("/") == expected_path.chomp("/")
|
52
|
+
current_path = expected_path if current_path.gsub("/#", "#") == expected_path.gsub("/#", "#")
|
53
|
+
|
54
|
+
current_path.should == expected_path
|
55
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# From: https://raw.githubusercontent.com/starfighterheavy/spreewald/master/lib/spreewald/timecop_steps.rb
|
2
|
+
|
3
|
+
if defined?(Timecop)
|
4
|
+
|
5
|
+
module TimecopHarness
|
6
|
+
|
7
|
+
# When you have to make your rails app time zone aware you have to go 100%
|
8
|
+
# otherwise you are better off ignoring time zones at all.
|
9
|
+
# https://makandracards.com/makandra/8723-guide-to-localizing-a-rails-application
|
10
|
+
|
11
|
+
def use_timezones?
|
12
|
+
active_record_loaded = defined?(ActiveRecord::Base)
|
13
|
+
(!active_record_loaded || ActiveRecord::Base.default_timezone != :local) && Time.zone
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse_time(str)
|
17
|
+
if use_timezones?
|
18
|
+
Time.zone.parse(str)
|
19
|
+
else
|
20
|
+
Time.parse(str)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def current_time
|
25
|
+
if use_timezones?
|
26
|
+
Time.current
|
27
|
+
else
|
28
|
+
Time.now
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
World(TimecopHarness)
|
35
|
+
|
36
|
+
# Example:
|
37
|
+
#
|
38
|
+
# Given the date is 2012-02-10
|
39
|
+
# Given the time is 2012-02-10 13:40
|
40
|
+
When /^the (?:date|time) is "?(\d{4}-\d{2}-\d{2}(?: \d{1,2}:\d{2})?)"?$/ do |time|
|
41
|
+
Timecop.travel(parse_time(time))
|
42
|
+
end
|
43
|
+
|
44
|
+
# Example:
|
45
|
+
#
|
46
|
+
# Given the time is 13:40
|
47
|
+
When /^the time is "?(\d{1,2}:\d{2})"?$/ do |time_without_date|
|
48
|
+
Timecop.travel(parse_time(time_without_date)) # date will be today
|
49
|
+
end
|
50
|
+
|
51
|
+
# Example:
|
52
|
+
#
|
53
|
+
# When it is 10 minutes later
|
54
|
+
# When it is a few hours earlier
|
55
|
+
When /^it is (\d+|a|some|a few) (seconds?|minutes?|hours?|days?|weeks?|months?|years?) (later|earlier)$/ do |amount, unit, direction|
|
56
|
+
amount = case amount
|
57
|
+
when 'a'
|
58
|
+
1
|
59
|
+
when 'some', 'a few'
|
60
|
+
10
|
61
|
+
else
|
62
|
+
amount.to_i
|
63
|
+
end
|
64
|
+
amount = -amount if direction == 'earlier'
|
65
|
+
Timecop.travel(current_time + amount.send(unit))
|
66
|
+
end
|
67
|
+
|
68
|
+
After do
|
69
|
+
Timecop.return
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Resolvers
|
2
|
+
def resolve_locale(str)
|
3
|
+
str = str.gsub(/\s/, '.')
|
4
|
+
I18n.t(str)
|
5
|
+
end
|
6
|
+
|
7
|
+
def resolve_path(str)
|
8
|
+
send(str.gsub(' ', '_') + '_path')
|
9
|
+
end
|
10
|
+
|
11
|
+
def resolve_ivar(str)
|
12
|
+
model = str.gsub(' ', '_')
|
13
|
+
instance_variable_get("@#{model}")
|
14
|
+
end
|
15
|
+
|
16
|
+
def set_ivar(str, value)
|
17
|
+
model = str.gsub(' ', '_')
|
18
|
+
instance_variable_set("@#{model}", value)
|
19
|
+
end
|
20
|
+
|
21
|
+
def resolve_class(str)
|
22
|
+
str.singularize.titleize.gsub(' ', '').constantize
|
23
|
+
end
|
24
|
+
end
|
25
|
+
World(Resolvers)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-sammies
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Kirst
|
@@ -62,9 +62,10 @@ files:
|
|
62
62
|
- lib/cucumber/sammies/step_definitions/environment_steps.rb
|
63
63
|
- lib/cucumber/sammies/step_definitions/form_steps.rb
|
64
64
|
- lib/cucumber/sammies/step_definitions/navigation_steps.rb
|
65
|
-
- lib/cucumber/sammies/step_definitions/resolvers.rb
|
66
65
|
- lib/cucumber/sammies/step_definitions/table_steps.rb
|
66
|
+
- lib/cucumber/sammies/step_definitions/time_steps.rb
|
67
67
|
- lib/cucumber/sammies/step_definitions/troubleshooting_steps.rb
|
68
|
+
- lib/cucumber/sammies/support/resolvers.rb
|
68
69
|
- lib/cucumber/sammies/version.rb
|
69
70
|
- sammies.jpg
|
70
71
|
homepage: https://github.com/starfighterheavy/cucumber-sammies
|
@@ -1,23 +0,0 @@
|
|
1
|
-
def resolve_locale(str)
|
2
|
-
str = str.gsub(/\s/, '.')
|
3
|
-
I18n.t(str)
|
4
|
-
end
|
5
|
-
|
6
|
-
def resolve_path(str)
|
7
|
-
str.gsub(' ', '_') + '_path'
|
8
|
-
end
|
9
|
-
|
10
|
-
def resolve_ivar(str)
|
11
|
-
model = str.gsub(' ', '_')
|
12
|
-
instance_variable_get("@#{model}")
|
13
|
-
end
|
14
|
-
|
15
|
-
def set_ivar(str, value)
|
16
|
-
model = str.gsub(' ', '_')
|
17
|
-
instance_variable_set("@#{model}", value)
|
18
|
-
end
|
19
|
-
|
20
|
-
|
21
|
-
def resolve_class(str)
|
22
|
-
str.singularize.titleize.gsub(' ', '').constantize
|
23
|
-
end
|