spreewald 2.2.1 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +5 -0
- data/README.md +7 -7
- data/lib/spreewald/email_steps.rb +10 -8
- data/lib/spreewald/web_steps.rb +12 -7
- data/lib/spreewald_support/version.rb +1 -1
- data/tests/rails-3_capybara-1/Gemfile.lock +1 -1
- data/tests/rails-3_capybara-1/config/cucumber.yml +2 -0
- data/tests/rails-3_capybara-1/config/database.yml +7 -0
- data/tests/rails-3_capybara-1/features/support/paths.rb +16 -0
- data/tests/rails-3_capybara-1/features/support/selectors.rb +52 -0
- data/tests/rails-3_capybara-2/Gemfile.lock +1 -1
- data/tests/rails-3_capybara-2/Rakefile +18 -0
- data/tests/rails-3_capybara-2/config.ru +4 -0
- data/tests/rails-4_capybara-3/Gemfile.lock +1 -1
- data/tests/rails-4_capybara-3/features/development_steps.feature +8 -0
- data/tests/rails-4_capybara-3/features/email_steps.feature +216 -0
- data/tests/rails-4_capybara-3/features/overriding.feature +5 -0
- data/tests/rails-4_capybara-3/features/step_definitions/overriding_steps.rb +3 -0
- data/tests/rails-4_capybara-3/features/step_definitions/test_steps.rb +56 -0
- data/tests/rails-4_capybara-3/features/support/paths.rb +16 -0
- data/tests/rails-4_capybara-3/features/support/selectors.rb +52 -0
- data/tests/rails-4_capybara-3/features/table_steps.feature +293 -0
- data/tests/rails-4_capybara-3/features/web_steps.feature +295 -0
- data/tests/shared/app/views/forms/disabled_elements.html.haml +53 -0
- data/tests/shared/features/shared/email_steps.feature +3 -11
- data/tests/shared/features/shared/web_steps.feature +25 -0
- metadata +5 -31
- data/tests/rails-3_capybara-1/app +0 -1
- data/tests/rails-3_capybara-1/config/cucumber.yml +0 -1
- data/tests/rails-3_capybara-1/config/database.yml +0 -1
- data/tests/rails-3_capybara-1/db +0 -1
- data/tests/rails-3_capybara-1/features/shared +0 -1
- data/tests/rails-3_capybara-1/features/support/paths.rb +0 -1
- data/tests/rails-3_capybara-1/features/support/selectors.rb +0 -1
- data/tests/rails-3_capybara-1/public +0 -1
- data/tests/rails-3_capybara-2/Rakefile +0 -1
- data/tests/rails-3_capybara-2/app +0 -1
- data/tests/rails-3_capybara-2/config +0 -1
- data/tests/rails-3_capybara-2/config.ru +0 -1
- data/tests/rails-3_capybara-2/db +0 -1
- data/tests/rails-3_capybara-2/features +0 -1
- data/tests/rails-3_capybara-2/public +0 -1
- data/tests/rails-3_capybara-2/script +0 -1
- data/tests/rails-4_capybara-3/app +0 -1
- data/tests/rails-4_capybara-3/db +0 -1
- data/tests/rails-4_capybara-3/features/development_steps.feature +0 -1
- data/tests/rails-4_capybara-3/features/email_steps.feature +0 -1
- data/tests/rails-4_capybara-3/features/overriding.feature +0 -1
- data/tests/rails-4_capybara-3/features/step_definitions/overriding_steps.rb +0 -1
- data/tests/rails-4_capybara-3/features/step_definitions/test_steps.rb +0 -1
- data/tests/rails-4_capybara-3/features/support/paths.rb +0 -1
- data/tests/rails-4_capybara-3/features/support/selectors.rb +0 -1
- data/tests/rails-4_capybara-3/features/table_steps.feature +0 -1
- data/tests/rails-4_capybara-3/features/web_steps.feature +0 -1
- data/tests/rails-4_capybara-3/public/fixture_files +0 -1
- data/tests/shared/db/test.sqlite3 +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dbbb1aa373a4a39fef3fa0919d4d93e1b8e2410a
|
4
|
+
data.tar.gz: 324f16cba03ab1e80147a95da42a39a24421dd14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 755e1efa4859d6e3e749f005e69917719a95a9e45cdbc3358c90b0f12997b2e0501d944a243bc03467701f2fa5ea1a1bf80127af6791271e36f343a231ac1839
|
7
|
+
data.tar.gz: 1ac713920860234a6b39b2c3fc14de320ff09d4b5634fa757233f63107038a19d042b2004a1bf8e00e9ad06e7539b128bbd82cf50cb04f47569b302cc590dea9
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file.
|
|
3
3
|
|
4
4
|
This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
5
5
|
|
6
|
+
## 2.2.2
|
7
|
+
- Fix `Then the "something" button should be disabled` (see issue [#18](https://github.com/makandra/spreewald/issues/18))
|
8
|
+
- Improve documentation of emails steps
|
9
|
+
- Clarify step definition of `that e?mail should have the following (?:|content in the )body:`
|
10
|
+
|
6
11
|
## 2.2.1
|
7
12
|
- Refactor the `I should see the (number|amount)` step. (see issues [#43](https://github.com/makandra/spreewald/issues/43) and [#44](https://github.com/makandra/spreewald/issues/44))
|
8
13
|
* It can now be composed with the 'within' step
|
data/README.md
CHANGED
@@ -171,8 +171,9 @@ the step definitions.
|
|
171
171
|
Message body goes here.
|
172
172
|
"""
|
173
173
|
|
174
|
-
You can skip lines, of course. Note that the mail body is only checked for
|
175
|
-
_inclusion_.
|
174
|
+
You can skip lines in the header, of course. Note that the mail body is only checked for
|
175
|
+
_inclusion_. That means you can only test a prefix of the body. The subject can also be
|
176
|
+
a prefix.
|
176
177
|
|
177
178
|
|
178
179
|
* **When I follow the (first|second|third)? link in the e?mail**
|
@@ -195,8 +196,6 @@ the step definitions.
|
|
195
196
|
|
196
197
|
* **Then that e?mail should( not)? have the following lines in the body:**
|
197
198
|
|
198
|
-
Only works after you've retrieved the email using "Then an email should have been sent with:"
|
199
|
-
|
200
199
|
Example:
|
201
200
|
|
202
201
|
And that mail should have the following lines in the body:
|
@@ -204,11 +203,12 @@ the step definitions.
|
|
204
203
|
All of these lines
|
205
204
|
need to be present
|
206
205
|
"""
|
206
|
+
|
207
|
+
You can skip lines, of course. Note that the lines are only checked for _inclusion_.
|
207
208
|
|
208
209
|
|
209
|
-
* **Then that e?mail should have the following body:**
|
210
|
+
* **Then that e?mail should have the following (|content in the )body:**
|
210
211
|
|
211
|
-
Only works after you've retrieved the email using "Then an email should have been sent with:"
|
212
212
|
Checks that the text should be included in the retrieved email
|
213
213
|
|
214
214
|
|
@@ -656,7 +656,7 @@ deprecation notice. Decide for yourself whether you want to use them:
|
|
656
656
|
|
657
657
|
* **Then the "..." (field|button|checkbox) should( not)? be disabled**
|
658
658
|
|
659
|
-
Tests that an input or
|
659
|
+
Tests that an input, button or checkbox with the given label is disabled.
|
660
660
|
|
661
661
|
|
662
662
|
* **Then the "..." field should( not)? be visible**
|
@@ -23,8 +23,9 @@ end.overridable
|
|
23
23
|
# Message body goes here.
|
24
24
|
# """
|
25
25
|
#
|
26
|
-
# You can skip lines, of course. Note that the mail body is only checked for
|
27
|
-
# _inclusion_.
|
26
|
+
# You can skip lines in the header, of course. Note that the mail body is only checked for
|
27
|
+
# _inclusion_. That means you can only test a prefix of the body. The subject can also be
|
28
|
+
# a prefix.
|
28
29
|
Then /^(an|no) e?mail should have been sent with:$/ do |mode, raw_data|
|
29
30
|
patiently do
|
30
31
|
raw_data.strip!
|
@@ -93,8 +94,6 @@ Then /^show me the e?mails$/ do
|
|
93
94
|
end
|
94
95
|
end.overridable
|
95
96
|
|
96
|
-
# Only works after you've retrieved the email using "Then an email should have been sent with:"
|
97
|
-
#
|
98
97
|
# Example:
|
99
98
|
#
|
100
99
|
# And that mail should have the following lines in the body:
|
@@ -102,17 +101,20 @@ end.overridable
|
|
102
101
|
# All of these lines
|
103
102
|
# need to be present
|
104
103
|
# """
|
104
|
+
#
|
105
|
+
# You can skip lines, of course. Note that the lines are only checked for _inclusion_.
|
105
106
|
Then /^that e?mail should( not)? have the following lines in the body:$/ do |negate, body|
|
106
107
|
expectation = negate ? 'not_to' : 'to'
|
107
|
-
|
108
|
+
mail = @mail || ActionMailer::Base.deliveries.last
|
109
|
+
email_text_body = MailFinder.email_text_body(mail)
|
108
110
|
|
109
111
|
body.to_s.strip.split(/\n/).each do |line|
|
110
112
|
expect(email_text_body).send(expectation, include(line.strip))
|
111
113
|
end
|
112
114
|
end.overridable
|
113
115
|
|
114
|
-
# Only works after you've retrieved the email using "Then an email should have been sent with:"
|
115
116
|
# Checks that the text should be included in the retrieved email
|
116
|
-
Then /^that e?mail should have the following body:$/ do |body|
|
117
|
-
|
117
|
+
Then /^that e?mail should have the following (?:|content in the )body:$/ do |body|
|
118
|
+
mail = @mail || ActionMailer::Base.deliveries.last
|
119
|
+
expect(MailFinder.email_text_body(mail)).to include(body.strip)
|
118
120
|
end.overridable
|
data/lib/spreewald/web_steps.rb
CHANGED
@@ -662,18 +662,23 @@ When /^I switch to the new tab$/ do
|
|
662
662
|
end
|
663
663
|
end.overridable
|
664
664
|
|
665
|
-
# Tests that an input or
|
665
|
+
# Tests that an input, button or checkbox with the given label is disabled.
|
666
666
|
Then /^the "([^\"]*)" (field|button|checkbox) should( not)? be disabled$/ do |label, kind, negate|
|
667
|
-
if
|
668
|
-
if
|
669
|
-
element = find_field(label
|
667
|
+
if Gem::Version.new(Capybara::VERSION) < Gem::Version.new("2.1")
|
668
|
+
if kind == 'field' || kind == 'checkbox'
|
669
|
+
element = find_field(label)
|
670
670
|
else
|
671
|
-
element =
|
671
|
+
element = find_button(label)
|
672
672
|
end
|
673
|
+
expect(element[:disabled]).send(negate ? :to : :not_to, eq(nil))
|
673
674
|
else
|
674
|
-
|
675
|
+
if kind == 'field' || kind == 'checkbox'
|
676
|
+
element = find_field(label, disabled: !negate)
|
677
|
+
else
|
678
|
+
element = find_button(label, disabled: !negate)
|
679
|
+
end
|
680
|
+
expect(element).to be_present
|
675
681
|
end
|
676
|
-
expect(["false", "", nil]).send(negate ? :not_to : :to, include(element[:disabled]))
|
677
682
|
end.overridable
|
678
683
|
|
679
684
|
# Tests that a field with the given label is visible.
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module NavigationHelpers
|
2
|
+
|
3
|
+
def path_to(page_name)
|
4
|
+
case page_name
|
5
|
+
when /^"(.*)"$/
|
6
|
+
$1
|
7
|
+
|
8
|
+
else
|
9
|
+
raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
|
10
|
+
"Now, go and add a mapping in #{__FILE__}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
World(NavigationHelpers)
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module HtmlSelectorsHelpers
|
2
|
+
# Maps a name to a selector. Used primarily by the
|
3
|
+
#
|
4
|
+
# When /^(.+) within (.+)$/ do |step, scope|
|
5
|
+
#
|
6
|
+
# step definitions in web_steps.rb
|
7
|
+
#
|
8
|
+
def selector_for(locator)
|
9
|
+
case locator
|
10
|
+
|
11
|
+
when /^a panel?$/
|
12
|
+
'.panel'
|
13
|
+
|
14
|
+
when /^a panels nested contents?$/
|
15
|
+
'.panel--nested-contents'
|
16
|
+
|
17
|
+
when /^the timeline?$/
|
18
|
+
'.timeline'
|
19
|
+
|
20
|
+
when /^the table row containing "(.+?)"$/
|
21
|
+
all('tr').detect { |tr| tr.text.include? $1 } || raise("Could not find tr containing #{$1.inspect}")
|
22
|
+
|
23
|
+
when /^a table$/
|
24
|
+
'.table'
|
25
|
+
|
26
|
+
# Add more mappings here.
|
27
|
+
# Here is an example that pulls values out of the Regexp:
|
28
|
+
#
|
29
|
+
# when /^the (notice|error|info) flash$/
|
30
|
+
# ".flash.#{$1}"
|
31
|
+
|
32
|
+
# You can also return an array to use a different selector
|
33
|
+
# type, like:
|
34
|
+
#
|
35
|
+
# when /the header/
|
36
|
+
# [:xpath, "//header"]
|
37
|
+
|
38
|
+
# This allows you to provide a quoted selector as the scope
|
39
|
+
# for "within" steps as was previously the default for the
|
40
|
+
# web steps:
|
41
|
+
when /^"(.+)"$/
|
42
|
+
$1
|
43
|
+
|
44
|
+
else
|
45
|
+
raise "Can't find mapping from \"#{locator}\" to a selector.\n" +
|
46
|
+
"Now, go and add a mapping in #{__FILE__}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
World(HtmlSelectorsHelpers)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require 'cucumber/rake/task'
|
3
|
+
|
4
|
+
desc 'Default: Run all specs for a specific rails version.'
|
5
|
+
task :default => :features
|
6
|
+
|
7
|
+
desc 'Run all specs for rails 3.2'
|
8
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
9
|
+
feature = if ENV['SINGLE_FEATURE']
|
10
|
+
"../../shared/features/shared/#{ ENV['SINGLE_FEATURE'] }"
|
11
|
+
else
|
12
|
+
'features/shared'
|
13
|
+
end
|
14
|
+
|
15
|
+
# tell cucumber where it finds it files (subdirectories and symlinks are confusing it)
|
16
|
+
t.cucumber_opts = "--require features --require features/shared #{feature}"
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
Feature: Development steps
|
2
|
+
|
3
|
+
Scenario: /^it should work(.+?)?$/ (without a reason)
|
4
|
+
Then it should work
|
5
|
+
|
6
|
+
Scenario: /^it should work(.+?)?$/ (with a given reason)
|
7
|
+
Then it should work once the blocker described here was fulfilled. (Feature should be pending)
|
8
|
+
|
@@ -0,0 +1,216 @@
|
|
1
|
+
Feature: Test Spreewald's email steps
|
2
|
+
|
3
|
+
Scenario: /^no e?mail should have been sent$/
|
4
|
+
When I go to "/emails/do_nothing"
|
5
|
+
Then the following step should succeed:
|
6
|
+
| no email should have been sent |
|
7
|
+
|
8
|
+
When I go to "/emails/send_email"
|
9
|
+
Then the following step should fail:
|
10
|
+
| no email should have been sent |
|
11
|
+
|
12
|
+
|
13
|
+
Scenario: /^I should see "([^\"]*)" in the e?mail$/
|
14
|
+
When I go to "/emails/send_email"
|
15
|
+
Then the following step should succeed:
|
16
|
+
| I should see "Body" in the email |
|
17
|
+
But the following step should fail:
|
18
|
+
| I should see "XYZ" in the email |
|
19
|
+
|
20
|
+
|
21
|
+
Scenario: /^(an|no) e?mail should have been sent with:$/
|
22
|
+
When I go to "/emails/send_email"
|
23
|
+
|
24
|
+
# Test without body
|
25
|
+
Then the following multiline step should succeed:
|
26
|
+
"""
|
27
|
+
Then an email should have been sent with:
|
28
|
+
'''
|
29
|
+
From: from@example.com
|
30
|
+
Reply-To: reply-to@example.com
|
31
|
+
To: to@example.com
|
32
|
+
Subject: SUBJECT
|
33
|
+
'''
|
34
|
+
"""
|
35
|
+
|
36
|
+
# Test with body
|
37
|
+
Then the following multiline step should succeed:
|
38
|
+
"""
|
39
|
+
Then an email should have been sent with:
|
40
|
+
'''
|
41
|
+
From: from@example.com
|
42
|
+
Reply-To: reply-to@example.com
|
43
|
+
To: to@example.com
|
44
|
+
Subject: SUBJECT
|
45
|
+
|
46
|
+
Body
|
47
|
+
with
|
48
|
+
line
|
49
|
+
breaks
|
50
|
+
'''
|
51
|
+
"""
|
52
|
+
|
53
|
+
# Test with incorrect From header
|
54
|
+
Then the following multiline step should fail:
|
55
|
+
"""
|
56
|
+
Then an email should have been sent with:
|
57
|
+
'''
|
58
|
+
From: other-from@example.com
|
59
|
+
Reply-To: reply-to@example.com
|
60
|
+
To: to@example.com
|
61
|
+
Subject: SUBJECT
|
62
|
+
|
63
|
+
Body
|
64
|
+
with
|
65
|
+
line
|
66
|
+
breaks
|
67
|
+
'''
|
68
|
+
"""
|
69
|
+
|
70
|
+
# Test with incorrect Reply-To header
|
71
|
+
Then the following multiline step should fail:
|
72
|
+
"""
|
73
|
+
Then an email should have been sent with:
|
74
|
+
'''
|
75
|
+
From: from@example.com
|
76
|
+
Reply-To: other-reply-to@example.com
|
77
|
+
To: to@example.com
|
78
|
+
Subject: SUBJECT
|
79
|
+
|
80
|
+
Body
|
81
|
+
with
|
82
|
+
line
|
83
|
+
breaks
|
84
|
+
'''
|
85
|
+
"""
|
86
|
+
# Test with incorrect To header
|
87
|
+
Then the following multiline step should fail:
|
88
|
+
"""
|
89
|
+
Then an email should have been sent with:
|
90
|
+
'''
|
91
|
+
From: from@example.com
|
92
|
+
Reply-To: reply-to@example.com
|
93
|
+
To: other-to@example.com
|
94
|
+
Subject: SUBJECT
|
95
|
+
|
96
|
+
Body
|
97
|
+
with
|
98
|
+
line
|
99
|
+
breaks
|
100
|
+
'''
|
101
|
+
"""
|
102
|
+
|
103
|
+
# Test with incorrect Subject header
|
104
|
+
Then the following multiline step should fail:
|
105
|
+
"""
|
106
|
+
Then an email should have been sent with:
|
107
|
+
'''
|
108
|
+
From: from@example.com
|
109
|
+
Reply-To: reply-to@example.com
|
110
|
+
To: to@example.com
|
111
|
+
Subject: OTHER-SUBJECT
|
112
|
+
|
113
|
+
Body
|
114
|
+
with
|
115
|
+
line
|
116
|
+
breaks
|
117
|
+
'''
|
118
|
+
"""
|
119
|
+
|
120
|
+
# Test with incorrect body
|
121
|
+
Then the following multiline step should fail:
|
122
|
+
"""
|
123
|
+
Then an email should have been sent with:
|
124
|
+
'''
|
125
|
+
From: from@example.com
|
126
|
+
Reply-To: reply-to@example.com
|
127
|
+
To: to@example.com
|
128
|
+
Subject: SUBJECT
|
129
|
+
|
130
|
+
Other body
|
131
|
+
with
|
132
|
+
line
|
133
|
+
breaks
|
134
|
+
'''
|
135
|
+
"""
|
136
|
+
|
137
|
+
# Test body with multiple paragraphs
|
138
|
+
Then the following multiline step should fail:
|
139
|
+
"""
|
140
|
+
Then an email should have been sent with:
|
141
|
+
'''
|
142
|
+
From: from@example.com
|
143
|
+
Reply-To: reply-to@example.com
|
144
|
+
To: to@example.com
|
145
|
+
Subject: SUBJECT
|
146
|
+
|
147
|
+
Body
|
148
|
+
with
|
149
|
+
line
|
150
|
+
breaks
|
151
|
+
|
152
|
+
MORE-BODY
|
153
|
+
'''
|
154
|
+
"""
|
155
|
+
|
156
|
+
Scenario: /^(an|no) e?mail should have been sent((?: |and|with|from "[^"]+"|bcc "[^"]+"|cc "[^"]+"|to "[^"]+"|the subject "[^"]+"|the body "[^"]+"|the attachments "[^"]+")+)$/
|
157
|
+
When I go to "/emails/send_email"
|
158
|
+
|
159
|
+
# Test with correct conditions
|
160
|
+
Then the following multiline step should succeed:
|
161
|
+
"""
|
162
|
+
Then an email should have been sent from "from@example.com" to "to@example.com" cc "cc@example.com" bcc "bcc@example.com" and the subject "SUBJECT" and the attachments "attached_file.pdf"
|
163
|
+
"""
|
164
|
+
|
165
|
+
# Test with wrong conditions
|
166
|
+
Then the following multiline step should fail:
|
167
|
+
"""
|
168
|
+
Then an email should have been sent from "from@example.com" to "to@example.com" cc "cc@example.com" bcc "wrong_bcc@example.com" and the subject "SUBJECT" and the attachments "attached_file.pdf"
|
169
|
+
"""
|
170
|
+
|
171
|
+
Scenario: /^that e?mail should have the following lines in the body:$/
|
172
|
+
When I go to "/emails/send_email"
|
173
|
+
|
174
|
+
# Test with correct body lines
|
175
|
+
Then the following multiline step should succeed:
|
176
|
+
"""
|
177
|
+
Then that email should have the following lines in the body:
|
178
|
+
'''
|
179
|
+
with
|
180
|
+
line
|
181
|
+
'''
|
182
|
+
"""
|
183
|
+
|
184
|
+
# Test with wrong body lines
|
185
|
+
Then the following multiline step should fail:
|
186
|
+
"""
|
187
|
+
Then that email should have the following lines in the body:
|
188
|
+
'''
|
189
|
+
wrong
|
190
|
+
line
|
191
|
+
'''
|
192
|
+
"""
|
193
|
+
|
194
|
+
|
195
|
+
Scenario: /^that e?mail should have the following( content in the)? body$/
|
196
|
+
When I go to "/emails/send_email"
|
197
|
+
|
198
|
+
# Test with correct body lines
|
199
|
+
Then the following multiline step should succeed:
|
200
|
+
"""
|
201
|
+
Then that email should have the following content in the body:
|
202
|
+
'''
|
203
|
+
with
|
204
|
+
line
|
205
|
+
'''
|
206
|
+
"""
|
207
|
+
|
208
|
+
# Test with wrong body lines
|
209
|
+
Then the following multiline step should fail:
|
210
|
+
"""
|
211
|
+
Then that email should have the following body:
|
212
|
+
'''
|
213
|
+
wrong
|
214
|
+
line
|
215
|
+
'''
|
216
|
+
"""
|