effective_test_bot 0.5.10 → 0.5.11
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 -0
- data/app/helpers/effective_test_bot_mailer_helper.rb +8 -0
- data/lib/effective_test_bot/engine.rb +16 -2
- data/lib/effective_test_bot/version.rb +1 -1
- data/lib/generators/effective_test_bot/install_generator.rb +0 -16
- data/lib/generators/templates/test_helper.rb +2 -1
- data/test/support/effective_test_bot_assertions.rb +33 -0
- data/test/support/effective_test_bot_form_filler.rb +25 -6
- data/test/support/effective_test_bot_login_helper.rb +3 -2
- data/test/support/effective_test_bot_screenshots_helper.rb +6 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e716315d415bfb20ba64a443552660e343a2de2e
|
4
|
+
data.tar.gz: 42ffbf4212b65bcd964affd294ca9fb5d8eb37ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15909967a589dbfde8b12a5e7f7075d8433bb4c92833e603438835f8961f96bd3b09889e565aa1eda32cc56fff65bdfe98ae708cbdd8f22306d03d22fb9a7a1d
|
7
|
+
data.tar.gz: f269d0c2095a982c2a4549dfa212b7669f010d61e0611aa6ab3c172b63ce6cc1ee85c427cc6e2238ca9de4af97700d8a78a87e5e08d846b6ee817e8474a42630
|
data/README.md
CHANGED
@@ -107,6 +107,7 @@ The following assertions are added for use in any integration test:
|
|
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
108
|
- `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.
|
109
109
|
- `assert_current_path(path)` asserts the current page path.
|
110
|
+
- `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.
|
110
111
|
- `assert_flash`, optionally with the desired `:success`, `:error` key and/or message, makes sure the flash is set.
|
111
112
|
- `assert_jquery_ujs_disable_with` makes sure all `input[type=submit]` elements on the page have the `data-disable-with` property set.
|
112
113
|
- `assert_no_exceptions` checks for any exceptions in the last page request and gives a stacktrace if there was.
|
@@ -0,0 +1,8 @@
|
|
1
|
+
module EffectiveTestBotMailerHelper
|
2
|
+
# This is included to ActionMailer::Base an after_filter
|
3
|
+
# And allows the assert_email assertion to work
|
4
|
+
def assign_test_bot_mailer_info
|
5
|
+
message.instance_variable_set(:@mailer_class, self.class)
|
6
|
+
message.instance_variable_set(:@mailer_action, action_name)
|
7
|
+
end
|
8
|
+
end
|
@@ -51,9 +51,23 @@ module EffectiveTestBot
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
+
initializer 'effective_test_bot.email_logger' do |app|
|
55
|
+
if Rails.env.test?
|
56
|
+
ActiveSupport.on_load :action_mailer do
|
57
|
+
ActionMailer::Base.send :include, ::EffectiveTestBotMailerHelper
|
58
|
+
|
59
|
+
if ActionMailer::Base.respond_to?(:after_action)
|
60
|
+
ActionMailer::Base.send :after_action, :assign_test_bot_mailer_info
|
61
|
+
else
|
62
|
+
ActionMailer::Base.send :after_filter, :assign_test_bot_mailer_info
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
54
68
|
initializer 'effective_test_bot.assign_assign_headers' do
|
55
|
-
|
56
|
-
|
69
|
+
if Rails.env.test?
|
70
|
+
ActiveSupport.on_load :action_controller do
|
57
71
|
ActionController::Base.send :include, ::EffectiveTestBotControllerHelper
|
58
72
|
|
59
73
|
if ActionController::Base.respond_to?(:before_action)
|
@@ -13,22 +13,6 @@ module EffectiveTestBot
|
|
13
13
|
run 'bundle exec rails generate minitest:install'
|
14
14
|
end
|
15
15
|
|
16
|
-
def explain_overwrite
|
17
|
-
puts '[effective_test_bot] Successfully installed/detected: minitest'
|
18
|
-
puts ""
|
19
|
-
puts 'Starting effective_test_bot specific installation tasks:'
|
20
|
-
puts ""
|
21
|
-
puts "You will be prompted to overwrite the default minitest configuration"
|
22
|
-
puts "files with those packaged inside the effective_test_bot gem."
|
23
|
-
puts ""
|
24
|
-
puts "If you have very specific existing minitest configuration,"
|
25
|
-
puts "you should ensure it's under version control so you can revert if needed"
|
26
|
-
puts ""
|
27
|
-
puts "Otherwise, press 'Y' to all the following prompts to automatically configure"
|
28
|
-
puts "minitest-rails and capybara-webkit based effective_test_bot test coverage"
|
29
|
-
puts ""
|
30
|
-
end
|
31
|
-
|
32
16
|
def copy_initializer
|
33
17
|
template "effective_test_bot.rb", "config/initializers/effective_test_bot.rb"
|
34
18
|
end
|
@@ -49,9 +49,10 @@ Capybara::Webkit.configure { |config| config.allow_unknown_urls }
|
|
49
49
|
|
50
50
|
Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
|
51
51
|
|
52
|
-
# These
|
52
|
+
# These three lines are needed as of minitest-reporters 1.1.2
|
53
53
|
Rails.backtrace_cleaner.remove_silencers!
|
54
54
|
Rails.backtrace_cleaner.add_silencer { |line| line =~ /minitest/ }
|
55
|
+
Rails.backtrace_cleaner.add_silencer { |line| line =~ /effective_test_bot/ }
|
55
56
|
|
56
57
|
###############################################
|
57
58
|
### Effective Test Bot specific stuff below ###
|
@@ -161,4 +161,37 @@ module EffectiveTestBotAssertions
|
|
161
161
|
assert errors.present?, message || "(assigns_errors) Expected @#{key}.errors to be present"
|
162
162
|
end
|
163
163
|
|
164
|
+
# assert_email :new_user_sign_up
|
165
|
+
# assert_email :new_user_sign_up, to: 'newuser@example.com'
|
166
|
+
# assert_email from: 'admin@example.com'
|
167
|
+
def assert_email(action = nil, to: nil, from: nil, subject: nil, body: nil, message: nil)
|
168
|
+
|
169
|
+
if (action || to || from || subject || body).nil?
|
170
|
+
assert ActionMailer::Base.deliveries.present?, message || "(assert_email) Expected email to have been delivered"
|
171
|
+
return
|
172
|
+
end
|
173
|
+
|
174
|
+
ActionMailer::Base.deliveries.each do |message|
|
175
|
+
matches = true
|
176
|
+
|
177
|
+
matches &&= (message.instance_variable_get(:@mailer_action) == action.to_s) if action
|
178
|
+
matches &&= (Array(message.to).include?(to)) if to
|
179
|
+
matches &&= (Array(message.from).include?(from)) if from
|
180
|
+
matches &&= (message.subject == subject) if subject
|
181
|
+
matches &&= (message.body == body) if body
|
182
|
+
|
183
|
+
return if matches
|
184
|
+
end
|
185
|
+
|
186
|
+
expected = [
|
187
|
+
("action: #{action}" if action),
|
188
|
+
("to: #{to}" if to),
|
189
|
+
("from: {from}" if from),
|
190
|
+
("subject: #{subject}" if subject),
|
191
|
+
("body: #{body}" if body),
|
192
|
+
].compact.to_sentence
|
193
|
+
|
194
|
+
assert false, message || "(assert_email) Expected email with #{expected} to have been delivered"
|
195
|
+
end
|
196
|
+
|
164
197
|
end
|
@@ -253,7 +253,7 @@ module EffectiveTestBotFormFiller
|
|
253
253
|
elsif fill_value.present?
|
254
254
|
fill_values = Array(fill_value) # Allow an array of fill values to be passed
|
255
255
|
(fill_values.include?(field['value']) || fill_values.include?(field.find(:xpath, '..').text))
|
256
|
-
elsif field['required'].
|
256
|
+
elsif field['required'].nil? == false
|
257
257
|
true
|
258
258
|
elsif field['value'] == 'true'
|
259
259
|
true
|
@@ -333,11 +333,30 @@ module EffectiveTestBotFormFiller
|
|
333
333
|
def upload_effective_asset(field, file)
|
334
334
|
uid = field['id']
|
335
335
|
|
336
|
-
|
337
|
-
|
338
|
-
rescue
|
339
|
-
|
340
|
-
|
336
|
+
# In some apps, capybara can field.set(file) and it will will just work
|
337
|
+
# Sometimes we need to fallback to javascript to get a file uploaded
|
338
|
+
unless ((field.set(file) || true) rescue false)
|
339
|
+
files = Array(file)
|
340
|
+
uid = field['id']
|
341
|
+
|
342
|
+
js = "fileList = Array();"
|
343
|
+
|
344
|
+
files.each_with_index do |file, i|
|
345
|
+
# Generate a fake input selector
|
346
|
+
page.execute_script("if($('#effectiveAssetsPlaceholder#{i}').length == 0) {effectiveAssetsPlaceholder#{i} = window.$('<input/>').attr({id: 'effectiveAssetsPlaceholder#{i}', type: 'file'}).appendTo('body'); }")
|
347
|
+
|
348
|
+
# Attach file to the fake input selector through Capybara
|
349
|
+
page.document.attach_file("effectiveAssetsPlaceholder#{i}", files[i])
|
350
|
+
|
351
|
+
# Build up the fake js event
|
352
|
+
js = "#{js} fileList.push(effectiveAssetsPlaceholder#{i}.get(0).files[0]);"
|
353
|
+
end
|
354
|
+
|
355
|
+
# Trigger the fake drop event
|
356
|
+
page.execute_script("#{js} e = $.Event('drop'); e.originalEvent = {dataTransfer : { files : fileList } }; $('#s3_#{uid}').trigger(e);")
|
357
|
+
|
358
|
+
# Remove the file inputs we created
|
359
|
+
page.execute_script("$('input[id^=effectiveAssetsPlaceholder]').remove();")
|
341
360
|
end
|
342
361
|
|
343
362
|
# Wait till the Uploader bar goes away
|
@@ -13,6 +13,7 @@ module EffectiveTestBotLoginHelper
|
|
13
13
|
login_as(User.find_by_email!(user))
|
14
14
|
elsif user.kind_of?(User)
|
15
15
|
raise 'user must be persisted' unless user.persisted?
|
16
|
+
user.reload
|
16
17
|
login_as(user)
|
17
18
|
elsif user == false
|
18
19
|
true # Do nothing
|
@@ -39,11 +40,11 @@ module EffectiveTestBotLoginHelper
|
|
39
40
|
end
|
40
41
|
end
|
41
42
|
|
42
|
-
def sign_up(email
|
43
|
+
def sign_up(email: Faker::Internet.email, password: Faker::Internet.password, **options)
|
43
44
|
visit new_user_registration_path
|
44
45
|
|
45
46
|
within('form#new_user') do
|
46
|
-
fill_form(email: email, password: password, password_confirmation: password)
|
47
|
+
fill_form({email: email, password: password, password_confirmation: password}.merge(options))
|
47
48
|
submit_novalidate_form
|
48
49
|
end
|
49
50
|
|
@@ -4,6 +4,12 @@ module EffectiveTestBotScreenshotsHelper
|
|
4
4
|
include Magick
|
5
5
|
|
6
6
|
# Creates a screenshot based on the current test and the order in this test.
|
7
|
+
def debug_test_bot_screenshot
|
8
|
+
filepath = "#{current_test_temp_path}/#{current_test_screenshot_id}.png"
|
9
|
+
page.save_screenshot(filepath)
|
10
|
+
puts filepath
|
11
|
+
end
|
12
|
+
|
7
13
|
def save_test_bot_screenshot
|
8
14
|
return unless EffectiveTestBot.screenshots?
|
9
15
|
page.save_screenshot("#{current_test_temp_path}/#{current_test_screenshot_id}.png")
|
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.5.
|
4
|
+
version: 0.5.11
|
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: 2016-09-
|
11
|
+
date: 2016-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -246,6 +246,7 @@ files:
|
|
246
246
|
- README.md
|
247
247
|
- Rakefile
|
248
248
|
- app/helpers/effective_test_bot_controller_helper.rb
|
249
|
+
- app/helpers/effective_test_bot_mailer_helper.rb
|
249
250
|
- lib/effective_test_bot.rb
|
250
251
|
- lib/effective_test_bot/engine.rb
|
251
252
|
- lib/effective_test_bot/middleware.rb
|
@@ -299,7 +300,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
299
300
|
version: '0'
|
300
301
|
requirements: []
|
301
302
|
rubyforge_project:
|
302
|
-
rubygems_version: 2.5.1
|
303
|
+
rubygems_version: 2.4.5.1
|
303
304
|
signing_key:
|
304
305
|
specification_version: 4
|
305
306
|
summary: A shared library of rails model & capybara-based feature tests that should
|