effective_test_bot 1.1.24 → 1.1.29
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/app/helpers/effective_test_bot_controller_helper.rb +4 -2
- data/config/test_helper.rb +3 -0
- data/lib/effective_test_bot/dsl.rb +3 -0
- data/lib/effective_test_bot/engine.rb +4 -4
- data/lib/effective_test_bot/version.rb +1 -1
- data/test/support/effective_test_bot_assertions.rb +2 -0
- data/test/support/effective_test_bot_form_faker.rb +3 -0
- data/test/support/effective_test_bot_form_filler.rb +35 -9
- data/test/support/effective_test_bot_mocks.rb +31 -0
- data/test/support/effective_test_bot_screenshots_helper.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 720882b4c8bc15be729ff26a90638d345786b523862ae226b86c15f2de18e8a8
|
4
|
+
data.tar.gz: c495c1463653e9c3ab5c0ff6eefc1b935dff9ce1808bb8bb15855a3eae5beb11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f435286f63ddbe6990fa6bf09aef992b982df7542b7c2ea7cbfc60086fe8403d9b85003c22ebb0a3b77e6f856f991583895783f60c6a319dc1871debfb77eff3
|
7
|
+
data.tar.gz: 369ec84101fb1e56135d4b92939a6b296adbc9199bc7d1970ac7ceae7bd4f86cca4c068ff707df2a3c30c38bfe1b938d0d9e4553ccade05b536c22b3bd04e4d8
|
@@ -5,12 +5,14 @@ module EffectiveTestBotControllerHelper
|
|
5
5
|
def assign_test_bot_payload(payload = {})
|
6
6
|
payload.merge!({ response_code: response.code, assigns: test_bot_view_assigns, flash: flash.to_hash })
|
7
7
|
|
8
|
-
|
8
|
+
media_type = (response.respond_to?(:media_type) ? response.media_type : response.content_type).to_s
|
9
|
+
|
10
|
+
if media_type.start_with?('text/html') && response.body[BODY_TAG].present?
|
9
11
|
payload = view_context.content_tag(:script, build_payload_javascript(payload), id: 'test_bot_payload')
|
10
12
|
|
11
13
|
split = response.body.split(BODY_TAG)
|
12
14
|
response.body = "#{split.first}#{payload}#{BODY_TAG}#{split.last if split.size > 1}"
|
13
|
-
elsif
|
15
|
+
elsif media_type.start_with?('text/javascript') && response.body.present?
|
14
16
|
payload = build_payload_javascript(payload)
|
15
17
|
|
16
18
|
response.body = "#{response.body};#{payload}"
|
data/config/test_helper.rb
CHANGED
@@ -2,6 +2,7 @@ ENV['RAILS_ENV'] ||= 'test'
|
|
2
2
|
require_relative '../config/environment'
|
3
3
|
|
4
4
|
require 'rails/test_help'
|
5
|
+
require 'minitest/mock'
|
5
6
|
require 'minitest/spec'
|
6
7
|
require 'minitest/reporters'
|
7
8
|
require 'minitest/fail_fast' if EffectiveTestBot.fail_fast?
|
@@ -10,6 +11,8 @@ class ActiveSupport::TestCase
|
|
10
11
|
# Run tests in parallel with specified workers
|
11
12
|
# parallelize(workers: :number_of_processors) if respond_to?(:parallelize)
|
12
13
|
|
14
|
+
include EffectiveTestBot::DSL
|
15
|
+
|
13
16
|
fixtures :all # Loads all fixtures in test/fixtures/*.yml
|
14
17
|
extend Minitest::Spec::DSL # For the let syntax
|
15
18
|
end
|
@@ -3,6 +3,7 @@ module EffectiveTestBot
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
+
# test/support/
|
6
7
|
include EffectiveTestBotAssertions
|
7
8
|
include EffectiveTestBotFormFaker
|
8
9
|
include EffectiveTestBotFormFiller
|
@@ -12,6 +13,8 @@ module EffectiveTestBot
|
|
12
13
|
include EffectiveTestBotScreenshotsHelper
|
13
14
|
include EffectiveTestBotTestHelper
|
14
15
|
|
16
|
+
BasicObject.send :include, EffectiveTestBotMocks
|
17
|
+
|
15
18
|
# test/test_botable/
|
16
19
|
include BaseTest
|
17
20
|
include CrudTest
|
@@ -3,14 +3,14 @@ module EffectiveTestBot
|
|
3
3
|
engine_name 'effective_test_bot'
|
4
4
|
|
5
5
|
config.autoload_paths += Dir[
|
6
|
-
"#{config.root}/test/test_botable/",
|
7
|
-
"#{config.root}/test/concerns/",
|
6
|
+
"#{config.root}/test/test_botable/",
|
7
|
+
"#{config.root}/test/concerns/",
|
8
8
|
"#{config.root}/test/support/"
|
9
9
|
]
|
10
10
|
|
11
11
|
config.eager_load_paths += Dir[
|
12
|
-
"#{config.root}/test/test_botable/",
|
13
|
-
"#{config.root}/test/concerns/",
|
12
|
+
"#{config.root}/test/test_botable/",
|
13
|
+
"#{config.root}/test/concerns/",
|
14
14
|
"#{config.root}/test/support/"
|
15
15
|
]
|
16
16
|
|
@@ -71,7 +71,9 @@ module EffectiveTestBotFormFiller
|
|
71
71
|
end
|
72
72
|
|
73
73
|
# Fill all fields now
|
74
|
-
fields = all('input,select,textarea', visible: false).reject
|
74
|
+
fields = all('input,select,textarea', visible: false).reject do |field|
|
75
|
+
(seen[field_key(field)] rescue true)
|
76
|
+
end
|
75
77
|
|
76
78
|
break unless fields.present?
|
77
79
|
|
@@ -113,6 +115,8 @@ module EffectiveTestBotFormFiller
|
|
113
115
|
fill_input_file(field, value)
|
114
116
|
when 'input_submit', 'input_search', 'input_button'
|
115
117
|
skip_field_screenshot = true # Do nothing
|
118
|
+
when 'input_hidden'
|
119
|
+
fill_action_text_input(field, value)
|
116
120
|
else
|
117
121
|
raise "unsupported field type #{field_name}"
|
118
122
|
end
|
@@ -174,6 +178,15 @@ module EffectiveTestBotFormFiller
|
|
174
178
|
end
|
175
179
|
end
|
176
180
|
|
181
|
+
def fill_action_text_input(field, value)
|
182
|
+
return unless action_text_input?(field)
|
183
|
+
|
184
|
+
trix_id = field['id'].to_s.split('_trix_input_form').first
|
185
|
+
return unless trix_id.present?
|
186
|
+
|
187
|
+
try_script "document.querySelector(\"##{trix_id}\").editor.insertString(\"#{value}\")"
|
188
|
+
end
|
189
|
+
|
177
190
|
def fill_input_select(field, value)
|
178
191
|
if EffectiveTestBot.tour_mode_extreme? && select2_input?(field)
|
179
192
|
try_script "$('select##{field['id']}').select2('open')"
|
@@ -274,6 +287,10 @@ module EffectiveTestBotFormFiller
|
|
274
287
|
(field['class'].to_s.include?('ckeditor') || all("span[id='cke_#{field['id']}']", wait: false).present?)
|
275
288
|
end
|
276
289
|
|
290
|
+
def action_text_input?(field)
|
291
|
+
field.tag_name == 'input' && field['type'] == 'hidden' && field['id'].to_s.include?('trix_input_form')
|
292
|
+
end
|
293
|
+
|
277
294
|
def custom_control_input?(field) # Bootstrap 4 radios and checks
|
278
295
|
field['class'].to_s.include?('custom-control-input')
|
279
296
|
end
|
@@ -292,16 +309,25 @@ module EffectiveTestBotFormFiller
|
|
292
309
|
|
293
310
|
def skip_form_field?(field)
|
294
311
|
field.reload # Handle a field changing visibility/disabled state from previous form field manipulations
|
295
|
-
|
296
312
|
field_id = field['id'].to_s
|
297
313
|
|
298
|
-
field_id.start_with?('datatable_')
|
299
|
-
field_id.start_with?('filters_scope_')
|
300
|
-
field_id.start_with?('filters_') && field['name'].blank?
|
301
|
-
|
302
|
-
(
|
303
|
-
['true', true, 1].include?(field['data-test-bot-skip'])
|
304
|
-
|
314
|
+
return true if field_id.start_with?('datatable_')
|
315
|
+
return true if field_id.start_with?('filters_scope_')
|
316
|
+
return true if field_id.start_with?('filters_') && field['name'].blank?
|
317
|
+
return true if field['type'] == 'button'
|
318
|
+
return true if (field.disabled? rescue true) # Selenium::WebDriver::Error::StaleElementReferenceError: stale element reference: element is not attached to the page document
|
319
|
+
return true if ['true', true, 1].include?(field['data-test-bot-skip'])
|
320
|
+
return true if @test_bot_excluded_fields_xpath.present? && field.path.include?(@test_bot_excluded_fields_xpath)
|
321
|
+
|
322
|
+
if !field.visible?
|
323
|
+
return false if ckeditor_text_area?(field)
|
324
|
+
return false if custom_control_input?(field)
|
325
|
+
return false if file_input?(field)
|
326
|
+
return false if action_text_input?(field)
|
327
|
+
return true
|
328
|
+
end
|
329
|
+
|
330
|
+
false
|
305
331
|
end
|
306
332
|
|
307
333
|
def field_key(field)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# https://github.com/codeodor/minitest-stub_any_instance
|
2
|
+
|
3
|
+
# included on BasicObject when test_helper calls include EffectiveTestBot::DSL
|
4
|
+
module EffectiveTestBotMocks
|
5
|
+
def stub_any_instance(name, val_or_callable = nil, &block)
|
6
|
+
new_name = "__minitest_any_instance_stub__#{name}"
|
7
|
+
owns_method = instance_method(name).owner == self
|
8
|
+
|
9
|
+
class_eval do
|
10
|
+
alias_method new_name, name if owns_method
|
11
|
+
|
12
|
+
define_method(name) do |*args|
|
13
|
+
if val_or_callable.respond_to? :call then
|
14
|
+
instance_exec(*args, &val_or_callable)
|
15
|
+
else
|
16
|
+
val_or_callable
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
yield
|
22
|
+
ensure
|
23
|
+
class_eval do
|
24
|
+
remove_method name
|
25
|
+
if owns_method
|
26
|
+
alias_method name, new_name
|
27
|
+
remove_method new_name
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -8,7 +8,7 @@ module EffectiveTestBotScreenshotsHelper
|
|
8
8
|
|
9
9
|
def save_test_bot_screenshot
|
10
10
|
return unless EffectiveTestBot.gifs?
|
11
|
-
return unless page.current_path.present?
|
11
|
+
return unless (page.current_path rescue false).present?
|
12
12
|
|
13
13
|
page.save_screenshot("#{current_test_temp_path}/#{current_test_screenshot_id}.png")
|
14
14
|
true
|
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: 1.1.
|
4
|
+
version: 1.1.29
|
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: 2020-
|
11
|
+
date: 2020-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -160,6 +160,7 @@ files:
|
|
160
160
|
- test/support/effective_test_bot_form_helper.rb
|
161
161
|
- test/support/effective_test_bot_login_helper.rb
|
162
162
|
- test/support/effective_test_bot_minitest_helper.rb
|
163
|
+
- test/support/effective_test_bot_mocks.rb
|
163
164
|
- test/support/effective_test_bot_screenshots_helper.rb
|
164
165
|
- test/support/effective_test_bot_test_helper.rb
|
165
166
|
- test/test_bot/system/application_test.rb
|