spreewald 2.8.0 → 3.0.1
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/CHANGELOG.md +54 -3
- data/README.md +20 -63
- data/features/binary.feature +2 -2
- data/lib/spreewald/development_steps.rb +1 -8
- data/lib/spreewald/email_steps.rb +60 -72
- data/lib/spreewald/web_steps.rb +17 -54
- data/lib/spreewald_support/mail_finder.rb +69 -40
- data/lib/spreewald_support/version.rb +1 -1
- data/tests/rails-3_capybara-1/Gemfile.lock +1 -1
- data/tests/rails-3_capybara-2/Gemfile.lock +1 -1
- data/tests/rails-4_capybara-3/Gemfile.lock +1 -1
- data/tests/rails-6_capybara-3/Gemfile.lock +1 -1
- data/tests/rails-6_capybara-3/app/mailers/spreewald_mailer.rb +13 -1
- data/tests/shared/app/controllers/emails_controller.rb +15 -0
- data/tests/shared/app/models/mailer.rb +16 -0
- data/tests/shared/app/views/forms/checkbox_form.html.haml +3 -0
- data/tests/shared/app/views/forms/disabled_elements.html.haml +1 -0
- data/tests/shared/app/views/forms/form1.html.haml +4 -1
- data/tests/shared/app/views/forms/invalid_form.html.haml +3 -0
- data/tests/shared/app/views/mailer/email_crlf.text.erb +5 -0
- data/tests/shared/app/views/mailer/email_with_umlauts.text.erb +1 -0
- data/tests/shared/app/views/mailer/html_email_with_linebreaks.html +6 -0
- data/tests/shared/config/routes.rb +3 -0
- data/tests/shared/features/shared/email_steps.feature +107 -37
- data/tests/shared/features/shared/web_steps.feature +15 -10
- metadata +9 -5
- data/lib/spreewald/file_attachment_steps.rb +0 -22
- data/lib/spreewald/timecop_steps.rb +0 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e94fff73b1219c20c1140b38f45de5a44e57da77eed6ef8fd9107c157a075c37
|
|
4
|
+
data.tar.gz: 0b9dab763d05e9e248c25d3e8cecb1b6493116dfd96e5c6a5c12e9a52ee417ec
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8abca9273d361112be92fecbd993efe99664baf70cb30af7a8be91d006fa89cfa9492a89d3b066a9824adde47439dda412ead601e51cd5006bbf8fd3d7185fb0
|
|
7
|
+
data.tar.gz: ce43a7c95abf0bc13b21baa1b23b7c14fbe05e10a7ad705efc1debb03bd7c18251d2b8acfaae38e9882d2f34278d9b8fb96860c1ba2795baf16c6d3a38fa8c7e
|
data/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,58 @@ 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
|
+
## 3.0.1
|
|
7
|
+
|
|
8
|
+
- Fix deduplication of linebreaks for html mails in mail finder. (see issue [#153](https://github.com/makandra/spreewald/issues/153))
|
|
9
|
+
|
|
10
|
+
## 3.0.0
|
|
11
|
+
|
|
12
|
+
### Breaking changes
|
|
13
|
+
|
|
14
|
+
- The following steps have been removed:
|
|
15
|
+
- `/^the file "([^"]*)" was attached(?: as (?:([^"]*)\/)?([^"]*))? to the ([^"]*) above(?: at "([^"]*)")?$/` (see [#106](https://github.com/makandra/spreewald/issues/106), this functionality was moved to [CucumberFactory](https://github.com/makandra/cucumber_factory))
|
|
16
|
+
- `/^the "([^"]*)" field should have no error$/` (see [#134](https://github.com/makandra/spreewald/issues/134))
|
|
17
|
+
- `/^I should get a text response$/` (see [#135](https://github.com/makandra/spreewald/issues/135))
|
|
18
|
+
- `/^I wait for the page to load$/` (see [#136](https://github.com/makandra/spreewald/issues/136))
|
|
19
|
+
- `debugger` (was an alias for `console`)
|
|
20
|
+
- These email steps have been removed in favor of `(an?|no)( HTML| plain-text|) e?mail should have been sent with:` (see [#132](https://github.com/makandra/spreewald/issues/132#issuecomment-631457290)):
|
|
21
|
+
- `/^(an|no) e?mail should have been sent((?: |and|with|from "[^"]+"|bcc "[^"]+"|cc "[^"]+"|to "[^"]+"|the subject "[^"]+"|the body "[^"]+"|the attachments "[^"]+")+)$/`
|
|
22
|
+
- `/^that e?mail should( not)? have the following lines in the body$/`
|
|
23
|
+
- `/^that e?mail should have the following (?:|content in the )body:$/`
|
|
24
|
+
- The `and disabled` modifier of the step `the "..." checkbox should( not)? be checked` has been removed. Use the step without the modifier together with the step `the "..." checkbox should be disabled` to achieve the old behavior.
|
|
25
|
+
- The step `/^(the tag )?"([^\"]+)" should( not)? be visible$/` lost its `not` modifier (Use `Then (the tag )?"..." should be hidden` or `Then I should not see "..."`)
|
|
26
|
+
- The file `lib/spreewald/timecop_steps.rb` was removed (was an alias for `lib/spreewald/time_steps.rb`).
|
|
27
|
+
- The step `(an?|no)( HTML| plain-text|) e?mail should have been sent with:` does now require that the whole body is matched.
|
|
28
|
+
- All web steps interacting with forms will now find both enabled and disabled fields. We encourage you to assert the "disabled" state in a separate step when needed, Spreewald offers these steps as well.
|
|
29
|
+
|
|
30
|
+
The following steps have been adjusted:
|
|
31
|
+
- `I should( not)? see a field "..."`
|
|
32
|
+
- `the "..." field should( not)? contain "..."`
|
|
33
|
+
- `I should see a form with the following values:`
|
|
34
|
+
- `the "..." field should have the error "..."`
|
|
35
|
+
- `the "..." field should( not)? have an error`
|
|
36
|
+
- `the "..." checkbox should( not)? be checked`
|
|
37
|
+
- `"..." should be selected for "..."`
|
|
38
|
+
- `nothing should be selected for "..."`
|
|
39
|
+
- `"..." should( not)? be an option for "..."`
|
|
40
|
+
- `the "..." field should( not)? be visible`
|
|
41
|
+
- `the "..." select should( not)? be sorted`
|
|
42
|
+
|
|
43
|
+
### Compatible changes
|
|
44
|
+
- Reintroduced support for emails with CRLF line ending
|
|
45
|
+
|
|
46
|
+
## 2.99.0
|
|
47
|
+
- The following steps were deprecated and will be removed in the upcoming major version:
|
|
48
|
+
- `/^the "([^"]*)" field should have no error$/` (see [#134](https://github.com/makandra/spreewald/issues/134))
|
|
49
|
+
- `/^I should get a text response$/` (see [#135](https://github.com/makandra/spreewald/issues/135))
|
|
50
|
+
- `/^I wait for the page to load$/` (see [#136](https://github.com/makandra/spreewald/issues/136))
|
|
51
|
+
- The step `and disabled` modifier of the step `/^the "([^"]*)" checkbox should( not)? be checked( and disabled)?$/` has been deprecated.
|
|
52
|
+
|
|
53
|
+
## 2.9.0
|
|
54
|
+
- The step `an email should have been sent with:` does now support wildcards (`*` at the end of a line to ignore the rest of the line, `*` as single character in a line to ignore multiple lines). The step also has better error messages if an email could not be found.
|
|
55
|
+
- The step `show me the emails` got an option to display only the email headers. Additionally, a new step `show me the email( header)?s with:` has been created to only show a subset of all sent emails, with a syntax similar to `an email should have been sent with:`.
|
|
56
|
+
- The email steps `an email should have been sent (from ...) (to ...) (cc ...) ...`, `that email should( not)? have the following lines in the body` and `that email should have the following content in the body:` have been deprecated in favor of `an email should have been sent with:`.
|
|
57
|
+
|
|
6
58
|
## 2.8.0
|
|
7
59
|
- Add radio buttons to the `the "..." (field|button|checkbox|radio button) should( not)? be disabled` step.
|
|
8
60
|
|
|
@@ -64,7 +116,7 @@ This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html
|
|
|
64
116
|
* It can now be composed with the 'within' step
|
|
65
117
|
* It can now truly match negative numbers
|
|
66
118
|
* It dropped the hidden dependency on the HTMLEntities gem
|
|
67
|
-
* Fix URLs to the GitHub repository of Spreewald as part of the `_path_to` and `_selector_for` error handling. (see issue [#82](https://github.com/makandra/spreewald/issues/82))
|
|
119
|
+
* Fix URLs to the GitHub repository of Spreewald as part of the `_path_to` and `_selector_for` error handling. (see issue [#82](https://github.com/makandra/spreewald/issues/82))
|
|
68
120
|
|
|
69
121
|
## 2.2.0
|
|
70
122
|
- Add a new step `I should( not)? see a link labeled "STRING"`.
|
|
@@ -97,7 +149,7 @@ The "it should work" step now takes an optional reason.
|
|
|
97
149
|
The word "within" can now be used in arguments for other steps without causing errors ([Issue #53](https://github.com/makandra/spreewald/issues/80))
|
|
98
150
|
|
|
99
151
|
## 1.12.3
|
|
100
|
-
Prevent wall of warnings when `Then console` is used multiple times in on test run ([issue](https://github.com/makandra/spreewald/issues/80))
|
|
152
|
+
Prevent wall of warnings when `Then console` is used multiple times in on test run ([issue](https://github.com/makandra/spreewald/issues/80))
|
|
101
153
|
|
|
102
154
|
## 1.12.2
|
|
103
155
|
Always check the current driver by its class (see [issue](https://github.com/makandra/spreewald/issues/74))
|
|
@@ -111,4 +163,3 @@ Always check the current driver by its class (see [issue](https://github.com/mak
|
|
|
111
163
|
## 1.11.6 2018-08-28
|
|
112
164
|
- Added CHANGELOG
|
|
113
165
|
- Replaced `field_labeled` with `find_field` (https://github.com/teamcapybara/capybara/blob/master/History.md#removed)
|
|
114
|
-
|
data/README.md
CHANGED
|
@@ -197,8 +197,7 @@ the step definitions.
|
|
|
197
197
|
* **Then console**
|
|
198
198
|
|
|
199
199
|
Pauses test execution and opens an IRB shell with current context. Does not halt the application-
|
|
200
|
-
under-test.
|
|
201
|
-
for its job)
|
|
200
|
+
under-test.
|
|
202
201
|
|
|
203
202
|
|
|
204
203
|
* **AfterStep @slow-motion**
|
|
@@ -216,7 +215,7 @@ the step definitions.
|
|
|
216
215
|
* **When I clear my e?mails**
|
|
217
216
|
|
|
218
217
|
|
|
219
|
-
* **Then (an
|
|
218
|
+
* **Then (an?|no)( HTML| plain-text|) e?mail should have been sent with:**
|
|
220
219
|
|
|
221
220
|
Example:
|
|
222
221
|
|
|
@@ -225,24 +224,20 @@ the step definitions.
|
|
|
225
224
|
From: max.mustermann@example.com
|
|
226
225
|
Reply-To: mmuster@gmail.com
|
|
227
226
|
To: john.doe@example.com
|
|
227
|
+
CC: jane.doe@example.com
|
|
228
|
+
BCC: johnny.doe@example.com
|
|
228
229
|
Subject: The subject may contain "quotes"
|
|
229
|
-
Attachments:
|
|
230
|
+
Attachments: image.jpg, attachment.pdf
|
|
230
231
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
a prefix.
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
* **Then (an|no) e?mail should have been sent(( |and|with|from "..."|bcc "..."|cc "..."|to "..."|the subject "..."|the body "..."|the attachments "...")+)**
|
|
240
|
-
|
|
241
|
-
Example:
|
|
232
|
+
This is the message body. You can use * as a wildcard to omit the rest
|
|
233
|
+
of a line *
|
|
234
|
+
Or you can omit multiple lines if the asterisk is the only
|
|
235
|
+
character in a single line, like this:
|
|
236
|
+
*
|
|
242
237
|
|
|
243
|
-
|
|
238
|
+
"""
|
|
244
239
|
|
|
245
|
-
You may skip
|
|
240
|
+
You may skip lines in the header, of course.
|
|
246
241
|
|
|
247
242
|
|
|
248
243
|
* **When I follow the (first|second|third)? link in the e?mail**
|
|
@@ -254,39 +249,20 @@ the step definitions.
|
|
|
254
249
|
* **Then no e?mail should have been sent**
|
|
255
250
|
|
|
256
251
|
|
|
257
|
-
* **Then I should see "..." in the e?mail**
|
|
252
|
+
* **Then I should see "..." in the( HTML| plain-text|) e?mail**
|
|
258
253
|
|
|
259
254
|
Checks that the last sent email includes some text
|
|
260
255
|
|
|
261
256
|
|
|
262
|
-
* **Then show me the e?
|
|
263
|
-
|
|
264
|
-
Print all sent emails to STDOUT.
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
* **Then that e?mail should( not)? have the following lines in the body:**
|
|
268
|
-
|
|
269
|
-
Example:
|
|
270
|
-
|
|
271
|
-
And that mail should have the following lines in the body:
|
|
272
|
-
"""
|
|
273
|
-
All of these lines
|
|
274
|
-
need to be present
|
|
275
|
-
"""
|
|
276
|
-
|
|
277
|
-
You may skip lines, of course. Note that you may also omit text at the end of each line.
|
|
257
|
+
* **Then show me the e?mail( header)?s**
|
|
278
258
|
|
|
259
|
+
Print all sent emails to STDOUT (optionally only the headers).
|
|
279
260
|
|
|
280
|
-
* **Then that e?mail should have the following (|content in the )body:**
|
|
281
261
|
|
|
282
|
-
|
|
262
|
+
* **Then show me the e?mail( header)?s with:**
|
|
283
263
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
* **Given the file "..." was attached( as (.../)?...)? to the ... above( at "...")?**
|
|
288
|
-
|
|
289
|
-
This step is deprecated and will be removed from spreewald. If you still want to use it, copy the code to your project's own steps.
|
|
264
|
+
Print a subset of all sent emails to STDOUT
|
|
265
|
+
This uses the same syntax as `Then an email should have been sent with:`
|
|
290
266
|
|
|
291
267
|
|
|
292
268
|
### session_steps.rb
|
|
@@ -343,8 +319,6 @@ Please note that the two approaches branch. While ActiveSupport will freeze the
|
|
|
343
319
|
When it is a few hours earlier
|
|
344
320
|
|
|
345
321
|
|
|
346
|
-
|
|
347
|
-
|
|
348
322
|
### web_steps.rb
|
|
349
323
|
|
|
350
324
|
Most of cucumber-rails' original web steps plus a few of our own.
|
|
@@ -572,10 +546,7 @@ deprecation notice. Decide for yourself whether you want to use them:
|
|
|
572
546
|
* **Then the "..." field should( not)? have an error**
|
|
573
547
|
|
|
574
548
|
|
|
575
|
-
* **Then the "..."
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
* **Then the "..." checkbox should( not)? be checked( and disabled)?**
|
|
549
|
+
* **Then the "..." checkbox should( not)? be checked?**
|
|
579
550
|
|
|
580
551
|
|
|
581
552
|
* **Then the radio button "..." should( not)? be (checked|selected)**
|
|
@@ -628,14 +599,12 @@ deprecation notice. Decide for yourself whether you want to use them:
|
|
|
628
599
|
* **When I reload the page**
|
|
629
600
|
|
|
630
601
|
|
|
631
|
-
* **Then (the tag )?"..." should
|
|
602
|
+
* **Then (the tag )?"..." should be visible**
|
|
632
603
|
|
|
633
604
|
Checks that an element is actually present and visible, also considering styles.
|
|
634
605
|
Within a selenium test, the browser is asked whether the element is really visible
|
|
635
606
|
In a non-selenium test, we only check for `.hidden`, `.invisible` or `style: display:none`
|
|
636
607
|
|
|
637
|
-
The step 'Then (the tag )?"..." should **not** be visible' is ambiguous. Please use 'Then (the tag )?"..." should be hidden' or 'Then I should not see "..."' instead. Note that the **not** option will be removed in future versions of Spreewald.
|
|
638
|
-
|
|
639
608
|
More details [here](https://makandracards.com/makandra/1049-capybara-check-that-a-page-element-is-hidden-via-css)
|
|
640
609
|
|
|
641
610
|
|
|
@@ -688,11 +657,6 @@ deprecation notice. Decide for yourself whether you want to use them:
|
|
|
688
657
|
got: "http://makandra.com/" (using =~)
|
|
689
658
|
|
|
690
659
|
|
|
691
|
-
* **Then I should get a text response**
|
|
692
|
-
|
|
693
|
-
Checks that the result has content type `text/plain`
|
|
694
|
-
|
|
695
|
-
|
|
696
660
|
* **When I follow "..." inside any "..."**
|
|
697
661
|
|
|
698
662
|
Click a link within an element matching the given selector. Will try to be clever
|
|
@@ -728,13 +692,6 @@ deprecation notice. Decide for yourself whether you want to use them:
|
|
|
728
692
|
Tests that a field with the given label is visible.
|
|
729
693
|
|
|
730
694
|
|
|
731
|
-
* **When I wait for the page to load**
|
|
732
|
-
|
|
733
|
-
Waits for the page to finish loading and AJAX requests to finish.
|
|
734
|
-
|
|
735
|
-
More details [here](https://makandracards.com/makandra/12139-waiting-for-page-loads-and-ajax-requests-to-finish-with-capybara).
|
|
736
|
-
|
|
737
|
-
|
|
738
695
|
* **When I perform basic authentication as ".../..." and go to ...**
|
|
739
696
|
|
|
740
697
|
Performs HTTP basic authentication with the given credentials and visits the given path.
|
data/features/binary.feature
CHANGED
|
@@ -240,7 +240,7 @@ Feature: The `spreewald` binary
|
|
|
240
240
|
|
|
241
241
|
Scenario: Print version
|
|
242
242
|
When I run `spreewald --version`
|
|
243
|
-
Then the output should contain "Spreewald
|
|
243
|
+
Then the output should contain "Spreewald 3."
|
|
244
244
|
|
|
245
245
|
When I run `spreewald -v`
|
|
246
|
-
Then the output should contain "Spreewald
|
|
246
|
+
Then the output should contain "Spreewald 3."
|
|
@@ -5,15 +5,8 @@ Then /^it should work(.+?)?$/ do |message|
|
|
|
5
5
|
pending(message)
|
|
6
6
|
end.overridable
|
|
7
7
|
|
|
8
|
-
# nodoc
|
|
9
|
-
Then 'debugger' do
|
|
10
|
-
warn 'The step "Then debugger" will be removed in future versions of Spreewald. Please use "Then console" instead.'
|
|
11
|
-
step 'console' # Alias
|
|
12
|
-
end.overridable
|
|
13
|
-
|
|
14
8
|
# Pauses test execution and opens an IRB shell with current context. Does not halt the application-
|
|
15
|
-
# under-test.
|
|
16
|
-
# for its job)
|
|
9
|
+
# under-test.
|
|
17
10
|
Then 'console' do
|
|
18
11
|
require 'irb'
|
|
19
12
|
ARGV.clear # IRB takes ARGV as its own arguments
|
|
@@ -17,51 +17,53 @@ end.overridable
|
|
|
17
17
|
# From: max.mustermann@example.com
|
|
18
18
|
# Reply-To: mmuster@gmail.com
|
|
19
19
|
# To: john.doe@example.com
|
|
20
|
+
# CC: jane.doe@example.com
|
|
21
|
+
# BCC: johnny.doe@example.com
|
|
20
22
|
# Subject: The subject may contain "quotes"
|
|
21
|
-
# Attachments:
|
|
23
|
+
# Attachments: image.jpg, attachment.pdf
|
|
24
|
+
#
|
|
25
|
+
# This is the message body. You can use * as a wildcard to omit the rest
|
|
26
|
+
# of a line *
|
|
27
|
+
# Or you can omit multiple lines if the asterisk is the only
|
|
28
|
+
# character in a single line, like this:
|
|
29
|
+
# *
|
|
22
30
|
#
|
|
23
|
-
# Message body goes here.
|
|
24
31
|
# """
|
|
25
32
|
#
|
|
26
|
-
# You may skip lines in the header, of course.
|
|
27
|
-
|
|
28
|
-
# a prefix.
|
|
29
|
-
Then /^(an|no) e?mail should have been sent with:$/ do |mode, raw_data|
|
|
33
|
+
# You may skip lines in the header, of course.
|
|
34
|
+
Then /^(an?|no)( HTML| plain-text|) e?mail should have been sent with:$/ do |mode, type, raw_data|
|
|
30
35
|
patiently do
|
|
31
|
-
raw_data.strip
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
results = MailFinder.find(raw_data, type.strip)
|
|
37
|
+
|
|
38
|
+
if mode == 'no'
|
|
39
|
+
expect(results).to be_empty
|
|
40
|
+
else
|
|
41
|
+
if results.one?
|
|
42
|
+
@mail = results.mails[0]
|
|
43
|
+
elsif results.many?
|
|
44
|
+
warn <<-WARNING
|
|
45
|
+
#{results.size} emails were found with the following conditions.
|
|
46
|
+
You may want to make the description more precise or clear the emails in between.
|
|
47
|
+
#{raw_data}
|
|
48
|
+
WARNING
|
|
49
|
+
else
|
|
50
|
+
message = <<-ERROR
|
|
51
|
+
No matching mail was found. There were #{ActionMailer::Base.deliveries.size} mails in total.
|
|
52
|
+
#{results.matching_header.size} of those had matching headers.
|
|
53
|
+
ERROR
|
|
54
|
+
if results.matching_header.empty?
|
|
55
|
+
message << "Expected\n" + '-' * 80 + "\n"
|
|
56
|
+
message << raw_data.split(/\n\n/, 2)[0] # Show the expected header
|
|
57
|
+
message << "\n" + '-' * 80 + "\n\n"
|
|
58
|
+
message << MailFinder.show_mails(ActionMailer::Base.deliveries, true)
|
|
59
|
+
else
|
|
60
|
+
message << "\nTried to match #{results.body_regex.inspect} in the following mails:\n"
|
|
61
|
+
message << results.matching_header.map { |mail| MailFinder.email_text_body(mail, type.strip).strip.inspect }.join("\n")
|
|
62
|
+
message << "\n"
|
|
63
|
+
end
|
|
64
|
+
raise RSpec::Expectations::ExpectationNotMetError.new(message)
|
|
38
65
|
end
|
|
39
66
|
end
|
|
40
|
-
conditions[:body] = body if body
|
|
41
|
-
@mail = MailFinder.find(conditions)
|
|
42
|
-
expectation = mode == 'no' ? 'not_to' : 'to'
|
|
43
|
-
expect(@mail).send(expectation, be_present)
|
|
44
|
-
end
|
|
45
|
-
end.overridable
|
|
46
|
-
|
|
47
|
-
# Example:
|
|
48
|
-
#
|
|
49
|
-
# Then an email should have been sent from "max.mustermann@example.com" to "john.doe@example.com" with bcc "john.wane@example.com" and with cc "foo@bar.com" and the subject "The subject" and the body "The body" and the attachments "attachment.pdf"
|
|
50
|
-
#
|
|
51
|
-
# You may skip parts, of course.
|
|
52
|
-
Then /^(an|no) e?mail should have been sent((?: |and|with|from "[^"]+"|bcc "[^"]+"|cc "[^"]+"|to "[^"]+"|the subject "[^"]+"|the body "[^"]+"|the attachments "[^"]+")+)$/ do |mode, query|
|
|
53
|
-
patiently do
|
|
54
|
-
conditions = {}
|
|
55
|
-
conditions[:to] = $1 if query =~ /to "([^"]+)"/
|
|
56
|
-
conditions[:Cc] = $1 if query =~ /cc "([^"]+)"/
|
|
57
|
-
conditions[:bcc] = $1 if query =~ /bcc "([^"]+)"/
|
|
58
|
-
conditions[:from] = $1 if query =~ /from "([^"]+)"/
|
|
59
|
-
conditions[:subject] = $1 if query =~ /the subject "([^"]+)"/
|
|
60
|
-
conditions[:body] = $1 if query =~ /the body "([^"]+)"/
|
|
61
|
-
conditions[:attachments] = $1 if query =~ /the attachments "([^"]+)"/
|
|
62
|
-
@mail = MailFinder.find(conditions)
|
|
63
|
-
expectation = mode == 'no' ? 'not_to' : 'to'
|
|
64
|
-
expect(@mail).send(expectation, be_present)
|
|
65
67
|
end
|
|
66
68
|
end.overridable
|
|
67
69
|
|
|
@@ -88,45 +90,31 @@ Then /^no e?mail should have been sent$/ do
|
|
|
88
90
|
end.overridable
|
|
89
91
|
|
|
90
92
|
# Checks that the last sent email includes some text
|
|
91
|
-
Then /^I should see "([^\"]*)" in the e?mail$/ do |text|
|
|
92
|
-
expect(MailFinder.email_text_body(ActionMailer::Base.deliveries.last)).to include(text)
|
|
93
|
+
Then /^I should see "([^\"]*)" in the( HTML| plain-text|) e?mail$/ do |text, type|
|
|
94
|
+
expect(MailFinder.email_text_body(ActionMailer::Base.deliveries.last, type.strip)).to include(text)
|
|
93
95
|
end.overridable
|
|
94
96
|
|
|
95
|
-
# Print all sent emails to STDOUT.
|
|
96
|
-
Then /^show me the e?
|
|
97
|
-
ActionMailer::Base.deliveries.
|
|
98
|
-
puts
|
|
99
|
-
|
|
100
|
-
puts
|
|
101
|
-
"To: #{mail.to}",
|
|
102
|
-
"Subject: #{mail.subject}",
|
|
103
|
-
"\n" + MailFinder.email_text_body(mail)
|
|
104
|
-
].join("\n")
|
|
105
|
-
print "-" * 80
|
|
97
|
+
# Print all sent emails to STDOUT (optionally only the headers).
|
|
98
|
+
Then /^show me the e?mail( header)?s$/ do |only_header|
|
|
99
|
+
if ActionMailer::Base.deliveries.empty?
|
|
100
|
+
puts MailFinder.show_mails(ActionMailer::Base.deliveries, only_header)
|
|
101
|
+
else
|
|
102
|
+
puts "No emails found" if ActionMailer::Base.deliveries.empty?
|
|
106
103
|
end
|
|
107
|
-
end.overridable
|
|
108
104
|
|
|
109
|
-
|
|
110
|
-
#
|
|
111
|
-
# And that mail should have the following lines in the body:
|
|
112
|
-
# """
|
|
113
|
-
# All of these lines
|
|
114
|
-
# need to be present
|
|
115
|
-
# """
|
|
116
|
-
#
|
|
117
|
-
# You may skip lines, of course. Note that you may also omit text at the end of each line.
|
|
118
|
-
Then /^that e?mail should( not)? have the following lines in the body:$/ do |negate, body|
|
|
119
|
-
expectation = negate ? 'not_to' : 'to'
|
|
120
|
-
mail = @mail || ActionMailer::Base.deliveries.last
|
|
121
|
-
email_text_body = MailFinder.email_text_body(mail)
|
|
105
|
+
end.overridable
|
|
122
106
|
|
|
123
|
-
|
|
124
|
-
|
|
107
|
+
# Print a subset of all sent emails to STDOUT
|
|
108
|
+
# This uses the same syntax as `Then an email should have been sent with:`
|
|
109
|
+
Then /^show me the e?mail( header)?s with:$/ do |only_header, raw_data|
|
|
110
|
+
results = MailFinder.find(raw_data)
|
|
111
|
+
if results.empty?
|
|
112
|
+
if results.matching_header.empty?
|
|
113
|
+
puts "There are no emails matching the given header."
|
|
114
|
+
else
|
|
115
|
+
puts "There are no emails matching the given header and body, but #{results.matching_header.size} matching only the header."
|
|
116
|
+
end
|
|
125
117
|
end
|
|
126
|
-
end.overridable
|
|
127
118
|
|
|
128
|
-
|
|
129
|
-
Then /^that e?mail should have the following (?:|content in the )body:$/ do |body|
|
|
130
|
-
mail = @mail || ActionMailer::Base.deliveries.last
|
|
131
|
-
expect(MailFinder.email_text_body(mail)).to include(body.strip)
|
|
119
|
+
print MailFinder.show_mails(results.mails, only_header)
|
|
132
120
|
end.overridable
|
data/lib/spreewald/web_steps.rb
CHANGED
|
@@ -201,10 +201,10 @@ Then /^I should( not)? see a field "([^"]*)"$/ do |negate, name|
|
|
|
201
201
|
expectation = negate ? :not_to : :to
|
|
202
202
|
patiently do
|
|
203
203
|
begin
|
|
204
|
-
# In old Capybaras
|
|
205
|
-
field =
|
|
204
|
+
# In old Capybaras find returns nil, so we assign it to `field`
|
|
205
|
+
field = find_with_disabled(:field, name)
|
|
206
206
|
rescue Capybara::ElementNotFound
|
|
207
|
-
# In Capybara 0.4+ #
|
|
207
|
+
# In Capybara 0.4+ #find raises an error instead of returning nil
|
|
208
208
|
# We must explicitely reset the field variable from a previous patiently iteration
|
|
209
209
|
field = nil
|
|
210
210
|
end
|
|
@@ -327,7 +327,7 @@ end.overridable
|
|
|
327
327
|
# Checks that an input field contains some value (allowing * as wildcard character)
|
|
328
328
|
Then /^the "([^"]*)" field should (not )?contain "([^"]*)"$/ do |label, negate, expected_string|
|
|
329
329
|
patiently do
|
|
330
|
-
field =
|
|
330
|
+
field = find_with_disabled(:field, label)
|
|
331
331
|
field_value = case field.tag_name
|
|
332
332
|
when 'select'
|
|
333
333
|
options = field.all('option')
|
|
@@ -347,7 +347,7 @@ end.overridable
|
|
|
347
347
|
# Checks that a multiline textarea contains some value (allowing * as wildcard character)
|
|
348
348
|
Then(/^the "(.*?)" field should (not )?contain:$/) do |label, negate, expected_string|
|
|
349
349
|
patiently do
|
|
350
|
-
field =
|
|
350
|
+
field = find_with_disabled(:field, label)
|
|
351
351
|
expect(field.value.chomp).send(negate ? :not_to : :to, contain_with_wildcards(expected_string))
|
|
352
352
|
end
|
|
353
353
|
end.overridable
|
|
@@ -369,7 +369,7 @@ end.overridable
|
|
|
369
369
|
# Checks that an input field was wrapped with a validation error
|
|
370
370
|
Then /^the "([^"]*)" field should have the error "([^"]*)"$/ do |field, error_message|
|
|
371
371
|
patiently do
|
|
372
|
-
element =
|
|
372
|
+
element = find_with_disabled(:field, field)
|
|
373
373
|
classes = element.find(:xpath, '..')[:class].split(' ')
|
|
374
374
|
|
|
375
375
|
form_for_input = element.find(:xpath, 'ancestor::form[1]')
|
|
@@ -390,30 +390,17 @@ end.overridable
|
|
|
390
390
|
Then /^the "([^\"]*)" field should( not)? have an error$/ do |label, negate|
|
|
391
391
|
patiently do
|
|
392
392
|
expectation = negate ? :not_to : :to
|
|
393
|
-
field =
|
|
393
|
+
field = find_with_disabled(:field, label)
|
|
394
394
|
expect(field[:id]).to be_present # prevent bad CSS selector if field lacks id
|
|
395
395
|
expect(page).send(expectation, have_css(".field_with_errors ##{field[:id]}"))
|
|
396
396
|
end
|
|
397
397
|
end.overridable
|
|
398
398
|
|
|
399
|
-
Then /^the "([^"]*)"
|
|
400
|
-
patiently do
|
|
401
|
-
element = find_field(field)
|
|
402
|
-
classes = element.find(:xpath, '..')[:class].split(' ')
|
|
403
|
-
expect(classes).not_to include('field_with_errors')
|
|
404
|
-
expect(classes).not_to include('error')
|
|
405
|
-
end
|
|
406
|
-
end.overridable
|
|
407
|
-
|
|
408
|
-
Then /^the "([^"]*)" checkbox should( not)? be checked( and disabled)?$/ do |label, negate, disabled|
|
|
399
|
+
Then /^the "([^"]*)" checkbox should( not)? be checked?$/ do |label, negate|
|
|
409
400
|
expectation = negate ? :not_to : :to
|
|
410
401
|
|
|
411
402
|
patiently do
|
|
412
|
-
field =
|
|
413
|
-
find_field(label)
|
|
414
|
-
else
|
|
415
|
-
find_field(label, :disabled => !!disabled)
|
|
416
|
-
end
|
|
403
|
+
field = find_with_disabled(:field, label)
|
|
417
404
|
expect(field).send expectation, be_checked
|
|
418
405
|
end
|
|
419
406
|
end.overridable
|
|
@@ -484,7 +471,7 @@ end.overridable
|
|
|
484
471
|
|
|
485
472
|
Then /^nothing should be selected for "([^"]*)"$/ do |field|
|
|
486
473
|
patiently do
|
|
487
|
-
select =
|
|
474
|
+
select = find_with_disabled(:field, field)
|
|
488
475
|
begin
|
|
489
476
|
selected_option = select.find(:xpath, ".//option[@selected = 'selected']") || select.all(:css, 'option').first
|
|
490
477
|
value = selected_option ? selected_option.value : nil
|
|
@@ -504,11 +491,11 @@ Then /^"([^"]*)" should( not)? be an option for "([^"]*)"$/ do |value, negate, f
|
|
|
504
491
|
patiently do
|
|
505
492
|
if negate
|
|
506
493
|
begin
|
|
507
|
-
expect(
|
|
494
|
+
expect(find_with_disabled(:field, field)).to have_no_css(*finder_arguments)
|
|
508
495
|
rescue Capybara::ElementNotFound
|
|
509
496
|
end
|
|
510
497
|
else
|
|
511
|
-
expect(
|
|
498
|
+
expect(find_with_disabled(:field, field)).to have_css(*finder_arguments)
|
|
512
499
|
end
|
|
513
500
|
end
|
|
514
501
|
end.overridable
|
|
@@ -537,18 +524,12 @@ end.overridable
|
|
|
537
524
|
# Within a selenium test, the browser is asked whether the element is really visible
|
|
538
525
|
# In a non-selenium test, we only check for `.hidden`, `.invisible` or `style: display:none`
|
|
539
526
|
#
|
|
540
|
-
# The step 'Then (the tag )?"..." should **not** be visible' is ambiguous. Please use 'Then (the tag )?"..." should be hidden' or 'Then I should not see "..."' instead. Note that the **not** option will be removed in future versions of Spreewald.
|
|
541
|
-
#
|
|
542
527
|
# More details [here](https://makandracards.com/makandra/1049-capybara-check-that-a-page-element-is-hidden-via-css)
|
|
543
|
-
Then /^(the tag )?"([^\"]+)" should
|
|
544
|
-
if hidden
|
|
545
|
-
warn "The step 'Then ... should not be visible' is prone to misunderstandings. Please use 'Then ... should be hidden' or 'Then I should not see ...' instead."
|
|
546
|
-
end
|
|
547
|
-
|
|
528
|
+
Then /^(the tag )?"([^\"]+)" should be visible$/ do |tag, selector_or_text|
|
|
548
529
|
options = {}
|
|
549
530
|
tag ? options.store(:selector, selector_or_text) : options.store(:text, selector_or_text)
|
|
550
531
|
|
|
551
|
-
|
|
532
|
+
assert_visible(options)
|
|
552
533
|
end.overridable
|
|
553
534
|
|
|
554
535
|
# Checks that an element is actually present and hidden, also considering styles.
|
|
@@ -616,11 +597,6 @@ Then /^"([^"]*)" should link to "([^"]*)"$/ do |link_label, target|
|
|
|
616
597
|
end
|
|
617
598
|
end.overridable
|
|
618
599
|
|
|
619
|
-
# Checks that the result has content type `text/plain`
|
|
620
|
-
Then /^I should get a text response$/ do
|
|
621
|
-
step 'I should get a response with content-type "text/plain"'
|
|
622
|
-
end.overridable
|
|
623
|
-
|
|
624
600
|
# Click a link within an element matching the given selector. Will try to be clever
|
|
625
601
|
# and disregard elements that don't contain a matching link.
|
|
626
602
|
#
|
|
@@ -689,11 +665,11 @@ end.overridable
|
|
|
689
665
|
# Tests that a field with the given label is visible.
|
|
690
666
|
Then /^the "([^\"]*)" field should( not)? be visible$/ do |label, hidden|
|
|
691
667
|
if Spreewald::Comparison.compare_versions(Capybara::VERSION, :<, "2.1")
|
|
692
|
-
field =
|
|
668
|
+
field = find_with_disabled(:field, label)
|
|
693
669
|
else
|
|
694
670
|
# Capybara 2.1+ won't usually interact with hidden elements,
|
|
695
671
|
# but we can override this behavior by passing { visible: false }
|
|
696
|
-
field =
|
|
672
|
+
field = find_with_disabled(:field, label, :visible => false)
|
|
697
673
|
end
|
|
698
674
|
|
|
699
675
|
selector = "##{field['id']}"
|
|
@@ -705,19 +681,6 @@ Then /^the "([^\"]*)" field should( not)? be visible$/ do |label, hidden|
|
|
|
705
681
|
end
|
|
706
682
|
end.overridable
|
|
707
683
|
|
|
708
|
-
# Waits for the page to finish loading and AJAX requests to finish.
|
|
709
|
-
#
|
|
710
|
-
# More details [here](https://makandracards.com/makandra/12139-waiting-for-page-loads-and-ajax-requests-to-finish-with-capybara).
|
|
711
|
-
When /^I wait for the page to load$/ do
|
|
712
|
-
if javascript_capable?
|
|
713
|
-
patiently do
|
|
714
|
-
# when no jQuery is loaded, we assume there are no pending AJAX requests
|
|
715
|
-
page.execute_script("return typeof jQuery === 'undefined' || $.active == 0;").should == true
|
|
716
|
-
end
|
|
717
|
-
end
|
|
718
|
-
page.has_content? ''
|
|
719
|
-
end.overridable
|
|
720
|
-
|
|
721
684
|
# Performs HTTP basic authentication with the given credentials and visits the given path.
|
|
722
685
|
#
|
|
723
686
|
# More details [here](https://makandracards.com/makandra/971-perform-http-basic-authentication-in-cucumber).
|
|
@@ -754,7 +717,7 @@ end.overridable
|
|
|
754
717
|
# Tests whether a select field is sorted. Uses Array#natural_sort, if defined;
|
|
755
718
|
# Array#sort else.
|
|
756
719
|
Then /^the "(.*?)" select should( not)? be sorted$/ do |label, negate|
|
|
757
|
-
select =
|
|
720
|
+
select = find_with_disabled(:field, label)
|
|
758
721
|
options = select.all('option').reject { |o| o.value.blank? }
|
|
759
722
|
option_texts = options.collect(&:text)
|
|
760
723
|
|