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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eccff959a9793ba3408242d0ce772d74ffec74b5e814052ee6ee27086d934491
4
- data.tar.gz: 631e4aca51755e878e549edc85547297bd630c199996b0a67ca34f36ed215e75
3
+ metadata.gz: 720882b4c8bc15be729ff26a90638d345786b523862ae226b86c15f2de18e8a8
4
+ data.tar.gz: c495c1463653e9c3ab5c0ff6eefc1b935dff9ce1808bb8bb15855a3eae5beb11
5
5
  SHA512:
6
- metadata.gz: db5b468dbb02f65c4e2050a77168c1559f30ec12e6d2f046a014e1a815b78450a93d3816956f3500b969fb8ec5cb6e0065f1040eef4649f4a7be780f4e1930cd
7
- data.tar.gz: 7c997a7afa4c1875a44e32c4f8de06713f589d6b5e3a51ffa3e3a04c8c37b999d3d24feadae466d1d2f170e93be3666c1f4448f1f9d7ab5d6167a3c53c4227d1
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
- if response.content_type.to_s.start_with?('text/html') && response.body[BODY_TAG].present?
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 response.content_type.to_s.start_with?('text/javascript') && response.body.present?
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}"
@@ -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
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveTestBot
2
- VERSION = '1.1.24'.freeze
2
+ VERSION = '1.1.29'.freeze
3
3
  end
@@ -123,6 +123,8 @@ module EffectiveTestBotAssertions
123
123
  error = page.driver.browser.manage.logs.get(:browser).first # headless_chrome
124
124
  rescue NotImplementedError
125
125
  return
126
+ rescue => e
127
+ return
126
128
  end
127
129
 
128
130
  if strict == false
@@ -126,6 +126,9 @@ module EffectiveTestBotFormFaker
126
126
  when 'textarea', 'textarea_textarea'
127
127
  Faker::Lorem.paragraph
128
128
 
129
+ when 'input_hidden'
130
+ Faker::Lorem.paragraph
131
+
129
132
  when 'input_submit', 'input_search', 'input_button'
130
133
  nil
131
134
 
@@ -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 { |field| seen[field_key(field)] }
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
- (field.disabled? rescue true) || # Selenium::WebDriver::Error::StaleElementReferenceError: stale element reference: element is not attached to the page document
302
- (!field.visible? && !ckeditor_text_area?(field) && !custom_control_input?(field) && !file_input?(field)) ||
303
- ['true', true, 1].include?(field['data-test-bot-skip']) ||
304
- (@test_bot_excluded_fields_xpath.present? && field.path.include?(@test_bot_excluded_fields_xpath))
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.24
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-09-10 00:00:00.000000000 Z
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