effective_test_bot 0.6.4 → 0.6.5
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/README.md +1 -2
- data/app/helpers/effective_test_bot_controller_helper.rb +3 -0
- data/lib/effective_test_bot/version.rb +1 -1
- data/lib/tasks/effective_test_bot_tasks.rake +1 -0
- data/test/concerns/test_botable/crud_dsl.rb +3 -1
- data/test/support/effective_test_bot_assertions.rb +1 -1
- data/test/support/effective_test_bot_form_helper.rb +5 -5
- data/test/test_botable/wizard_test.rb +12 -5
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 53b1f6eb61535946c045b482f76d1ae3d63fec3e
|
|
4
|
+
data.tar.gz: 7555d00cfa5a082f9bd31d8a6df9ee8bb6fd1b39
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f9c7aa1fb3975a50c60575e507a3fb3d3c6050927d8a96e8290af145597af4804ba5ec12e5c02b5fc25a68f89b420055685852f2b53f746e7bd84fead8df6163
|
|
7
|
+
data.tar.gz: af84cd4901cdcfb05cc382019bd02270922d7003d2ee21a8de4bd3368db6580cecf1ce73610bf6bb575e4807e08ed481185007831fd0a8a66626d5fe683b3e74
|
data/README.md
CHANGED
|
@@ -105,7 +105,7 @@ The following assertions are added for use in any integration test:
|
|
|
105
105
|
|
|
106
106
|
- `assert_assigns` asserts a given rails view_assigns object is present.
|
|
107
107
|
- `assert_assigns_errors` use after an intentionally invalid form submit to make sure your assigned rails object has errors, or a specific error.
|
|
108
|
-
- `assert_authorization` checks for a 403 Access Denied error.
|
|
108
|
+
- `assert_authorization` checks for a 403 Access Denied error. For this to work, please add `assign_test_bot_access_denied_exception(exception) if defined?(EffectiveTestBot)` to your ApplicationController's `rescue_from` block to generate more information.
|
|
109
109
|
- `assert_no_assigns_errors` should be used after any form submit to make sure your assigned rails object has no errors. Prints out any errors if they exist.
|
|
110
110
|
- `assert_current_path(path)` asserts the current page path.
|
|
111
111
|
- `assert_email(action)` asserts an email with the given action name was sent. Also supports `assert_email(to: email)` type syntax with to, from, subject, body.
|
|
@@ -212,7 +212,6 @@ effective_test_bot fills in this knowledge gap by serializing any interesting va
|
|
|
212
212
|
The following representations of the rails internal state are made available:
|
|
213
213
|
|
|
214
214
|
- `assigns` a Hash representation of the current page's rails `view_assigns`. Serializes any `ActiveRecord` objects, as well as any `TrueClass`, `FalseClass`, `NilClass`, `String`, `Symbol`, and `Numeric` objects. Does not serialize anything else, but sets a symbol `assigns[key] == :present_but_not_serialized`.
|
|
215
|
-
- `exceptions` an Array with the exception message and a stacktrace.
|
|
216
215
|
- `flash` a Hash representation of the current page's flash.
|
|
217
216
|
- `unpermitted_params` an Array of any unpermitted parameters that were encountered by the last request.
|
|
218
217
|
|
|
@@ -13,6 +13,9 @@ module EffectiveTestBotControllerHelper
|
|
|
13
13
|
when ActiveRecord::Base
|
|
14
14
|
test_bot_assigns[key] = object.attributes
|
|
15
15
|
test_bot_assigns[key][:errors] = object.errors.messages.delete_if { |_, v| v.blank? } if object.errors.present?
|
|
16
|
+
when (ActiveModel::Model rescue nil)
|
|
17
|
+
test_bot_assigns[key] = object.respond_to?(:attributes) ? object.attributes : {present_but_not_serialized: true}
|
|
18
|
+
test_bot_assigns[key][:errors] = object.errors.messages.delete_if { |_, v| v.blank? } if object.errors.present?
|
|
16
19
|
when TrueClass, FalseClass, NilClass, String, Symbol, Numeric
|
|
17
20
|
test_bot_assigns[key] = object
|
|
18
21
|
else
|
|
@@ -18,6 +18,8 @@ module TestBotable
|
|
|
18
18
|
|
|
19
19
|
# All this does is define a 'test_bot' method for each required action on this class
|
|
20
20
|
# So that MiniTest will see the test functions and run them
|
|
21
|
+
# Expected usage: crud_test(resource: Post)
|
|
22
|
+
# Expected usage: crud_test(resource: (Post || Post.new), user: User.first, only: [:new, :create], skip: {create_invalid: [:path]})"
|
|
21
23
|
def crud_test(resource:, user: nil, label: nil, skip: {}, only: nil, except: nil, **options)
|
|
22
24
|
# This skips paramaters is different than the initializer skips, which affect just the rake task
|
|
23
25
|
|
|
@@ -30,7 +32,7 @@ module TestBotable
|
|
|
30
32
|
begin
|
|
31
33
|
normalize_test_bot_options!(options.merge!(resource: resource, current_crud_tests: current_crud_tests))
|
|
32
34
|
rescue => e
|
|
33
|
-
raise "
|
|
35
|
+
raise "\e[33mError\e[0m: #{e.message}"
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
current_crud_tests.each do |test|
|
|
@@ -62,7 +62,7 @@ module EffectiveTestBotAssertions
|
|
|
62
62
|
"Encountered a 403 Access Denied",
|
|
63
63
|
("(cannot :#{exception['action']}, #{exception['subject']})" if exception.present?),
|
|
64
64
|
"on #{page.current_path} as user #{user || 'no user'}.",
|
|
65
|
-
("\nAdd assign_test_bot_access_denied_exception(exception) to your ApplicationController's rescue_from block to gather more information." unless exception.present?),
|
|
65
|
+
("\nAdd assign_test_bot_access_denied_exception(exception) if defined?(EffectiveTestBot) to your ApplicationController's rescue_from block to gather more information." unless exception.present?),
|
|
66
66
|
].compact.join(' ')
|
|
67
67
|
|
|
68
68
|
assert false, "#{message}.\n#{info}"
|
|
@@ -17,14 +17,14 @@ module EffectiveTestBotFormHelper
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
# This submits the form, while checking for html5 form validation errors and unpermitted params
|
|
20
|
-
def submit_form(label = nil)
|
|
20
|
+
def submit_form(label = nil, last: false)
|
|
21
21
|
assert_no_html5_form_validation_errors unless test_bot_skip?(:no_html5_form_validation_errors)
|
|
22
22
|
assert_jquery_ujs_disable_with(label) unless test_bot_skip?(:jquery_ujs_disable_with)
|
|
23
23
|
|
|
24
24
|
if test_bot_skip?(:no_unpermitted_params)
|
|
25
|
-
click_submit(label)
|
|
25
|
+
click_submit(label, last: last)
|
|
26
26
|
else
|
|
27
|
-
with_raised_unpermitted_params_exceptions { click_submit(label) }
|
|
27
|
+
with_raised_unpermitted_params_exceptions { click_submit(label, last: last) }
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
assert_no_unpermitted_params unless test_bot_skip?(:no_unpermitted_params)
|
|
@@ -63,12 +63,12 @@ module EffectiveTestBotFormHelper
|
|
|
63
63
|
# This kind of sucks, as we want to simulate mouse movements with the tour
|
|
64
64
|
# Instead we manually trigger submit buttons and use the data-disable-with to
|
|
65
65
|
# make the 'submit form' step look nice
|
|
66
|
-
def click_submit(label)
|
|
66
|
+
def click_submit(label, last: false)
|
|
67
67
|
if label.present?
|
|
68
68
|
submit = find(:link_or_button, label)
|
|
69
69
|
assert submit.present?, "TestBotError: Unable to find a visible submit link or button on #{page.current_path} with the label #{label}"
|
|
70
70
|
else
|
|
71
|
-
submit =
|
|
71
|
+
submit = all("input[type='submit'],button[type='submit']").send(last ? :last : :first)
|
|
72
72
|
assert submit.present?, "TestBotError: Unable to find a visible input[type='submit'] or button[type='submit'] on #{page.current_path}"
|
|
73
73
|
end
|
|
74
74
|
|
|
@@ -13,16 +13,21 @@ module WizardTest
|
|
|
13
13
|
visit(from)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
+
paths = []
|
|
16
17
|
0.upto(50) do |index| # Can only test wizards 51 steps long
|
|
17
18
|
assert_page_normal
|
|
18
19
|
|
|
19
20
|
yield if block_given?
|
|
20
21
|
|
|
22
|
+
# If we are on the same page as last time, use submit_form(last: true)
|
|
23
|
+
# to click the last submit button on the page
|
|
24
|
+
last = (paths[index-1] == page.current_path)
|
|
25
|
+
|
|
21
26
|
if defined?(within_form)
|
|
22
|
-
within(within_form) { fill_form; submit_form; }
|
|
27
|
+
within(within_form) { fill_form; submit_form(last: last); }
|
|
23
28
|
else
|
|
24
29
|
fill_form
|
|
25
|
-
submit_form
|
|
30
|
+
submit_form(last: last)
|
|
26
31
|
end
|
|
27
32
|
|
|
28
33
|
assert_no_flash_errors unless test_bot_skip?(:no_flash_errors)
|
|
@@ -30,10 +35,12 @@ module WizardTest
|
|
|
30
35
|
if to.present?
|
|
31
36
|
# Keep going till we hit a certain to_path
|
|
32
37
|
break if page.current_path == to
|
|
33
|
-
else
|
|
34
|
-
# Keep going till there's no more submit buttons
|
|
35
|
-
break if all("input[type='submit']").blank?
|
|
36
38
|
end
|
|
39
|
+
|
|
40
|
+
# Keep going till there's no more submit buttons
|
|
41
|
+
break if all("input[type='submit']").blank?
|
|
42
|
+
|
|
43
|
+
paths << page.current_path.to_s
|
|
37
44
|
end
|
|
38
45
|
|
|
39
46
|
save_test_bot_screenshot
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: effective_test_bot
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.
|
|
4
|
+
version: 0.6.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Code and Effect
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-04-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|