effective_test_bot 1.1.35 → 1.2.3

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: fc72acbdf713f34184e3b5ad7f5667632d0f6328a106de14042c74cf5f4905f6
4
- data.tar.gz: 436bf4dee3250bb087ba2cb9119d48e7a4853078f0509cd9558feedb37114083
3
+ metadata.gz: 80ce8222bd314d35d85d3c6fd58620dbd5d8957cd4ece629467968ee3cbb7e5e
4
+ data.tar.gz: 322fcb891096428196ce8ce3c51a7692bfae9255c72db164b77aa137d39f31cc
5
5
  SHA512:
6
- metadata.gz: 4fb77d02cfa0da8f3b940fa697d7dcfa935f7a3c08003108a850a83d4073290e242bba9f448962f31bf27193879350a0f3e35c69e61c26b50193f4e751b68c96
7
- data.tar.gz: 3778d54b3764389c71b9438b327218b56e55d9220b431062b8d1816d7c470e0d16a9215e92e7549c05cb45f76824c249329fa8d6d4434d2184d74652fe527ff3
6
+ metadata.gz: 486cf835958bdaae57dcb381ee604d05daecddde263189b090db4986c3a12fbe388c0f3d94a204fa8a211d8ff488694c816482e056ef1680657d56034f63b9c7
7
+ data.tar.gz: d66b36d8ede631896e0228970175bfc67f0b6e911f51613b39fb2dbfde56eafab957cc103b54086003f828a9364e7bd9d718b0c1fc3bc7fd3c22e0fd12080ceb
@@ -5,26 +5,23 @@ require 'effective_test_bot/middleware'
5
5
  require 'effective_test_bot/version'
6
6
 
7
7
  module EffectiveTestBot
8
- mattr_accessor :user
9
- mattr_accessor :except
10
- mattr_accessor :only
11
- mattr_accessor :fail_fast
12
- mattr_accessor :form_fills
13
- mattr_accessor :screenshots
14
- mattr_accessor :autosave_animated_gif_on_failure
15
- mattr_accessor :tour_mode
16
- mattr_accessor :tour_mode_extreme
17
- mattr_accessor :animated_gif_delay
18
- mattr_accessor :animated_gif_background_color
19
- mattr_accessor :image_processing_class_name
20
- mattr_accessor :backtrace_lines
21
- mattr_accessor :silence_skipped_routes
22
-
23
- mattr_accessor :passed_tests # This isn't a config variable.
24
-
25
- def self.setup
26
- yield self
27
- end
8
+ mattr_accessor :passed_tests
9
+
10
+ def self.config_keys
11
+ [
12
+ :user,
13
+ :except, :only,
14
+ :fail_fast,
15
+ :form_fills,
16
+ :screenshots, :autosave_animated_gif_on_failure,
17
+ :tour_mode, :tour_mode_extreme,
18
+ :animated_gif_delay, :animated_gif_background_color,
19
+ :image_processing_class_name,
20
+ :backtrace_lines, :silence_skipped_routes
21
+ ]
22
+ end
23
+
24
+ include EffectiveGem
28
25
 
29
26
  # Test could be something like "crud_test", "crud_test (documents#new)", "documents", documents#new"
30
27
  # Assertion will be page_title, or flash
@@ -1,3 +1,3 @@
1
1
  module EffectiveTestBot
2
- VERSION = '1.1.35'.freeze
2
+ VERSION = '1.2.3'.freeze
3
3
  end
@@ -1,4 +1,6 @@
1
1
  module EffectiveTestBotAssertions
2
+ include ActiveJob::TestHelper if defined?(ActiveJob::TestHelper)
3
+
2
4
  def assert_page_content(content, message: "(page_content) Expected page content :content: to be present")
3
5
  assert page.has_text?(/#{Regexp.escape(content)}/i, wait: 0), message.sub(':content:', content)
4
6
  end
@@ -10,13 +12,14 @@ module EffectiveTestBotAssertions
10
12
  def assert_signed_in(message: 'Expected @current_user to be present when signed in')
11
13
  visit(root_path)
12
14
  assert_page_normal
13
- assert assigns['current_user'].present?, message
15
+
16
+ assert assigns[current_user_assigns_key].present?, message
14
17
  end
15
18
 
16
19
  def assert_signed_out(message: 'Expected @current_user to be blank when signed out')
17
20
  visit(root_path)
18
21
  assert_page_normal
19
- assert assigns['current_user'].blank?, message
22
+ assert assigns[current_user_assigns_key].blank?, message
20
23
  end
21
24
 
22
25
  def assert_no_exceptions(message: "(no_exceptions) Unexpected rails server exception:\n:exception:")
@@ -209,35 +212,41 @@ module EffectiveTestBotAssertions
209
212
 
210
213
  def assert_no_email(&block)
211
214
  before = ActionMailer::Base.deliveries.map { |mail| {to: mail.to, subject: mail.subject} }
212
- yield
215
+ retval = yield
213
216
  after = ActionMailer::Base.deliveries.map { |mail| {to: mail.to, subject: mail.subject} }
214
217
 
215
218
  diff = (after - before)
216
219
 
217
220
  assert diff.blank?, "(assert_no_email) #{diff.length} unexpected emails delivered: #{diff}"
221
+ retval
218
222
  end
219
223
 
220
224
  # assert_effective_log { click_on('download.txt') }
221
- def assert_effective_log(status: nil)
225
+ def assert_effective_log(status: nil, &block)
222
226
  raise('EffectiveLogging is not defined') unless defined?(EffectiveLogging)
223
227
  raise('expected a block') unless block_given?
224
228
 
225
229
  logs = (status.present? ? Effective::Log.where(status: status).all : Effective::Log.all)
226
230
 
227
231
  before = logs.count
228
- yield
232
+ retval = yield
229
233
  after = logs.count
230
234
 
231
235
  assert (after - before == 1), "(assert_effective_log) Expected one log to have been created"
236
+ retval
232
237
  end
233
238
 
234
239
  # assert_email :new_user_sign_up
235
240
  # assert_email :new_user_sign_up, to: 'newuser@example.com'
236
241
  # assert_email from: 'admin@example.com'
237
242
  def assert_email(action = nil, to: nil, from: nil, subject: nil, body: nil, message: nil, count: nil, &block)
243
+ retval = nil
244
+
245
+ perform_enqueued_jobs if respond_to?(:perform_enqueued_jobs)
246
+
238
247
  if block_given?
239
248
  before = ActionMailer::Base.deliveries.length
240
- yield
249
+ retval = yield
241
250
  difference = (ActionMailer::Base.deliveries.length - before)
242
251
 
243
252
  if count.present?
@@ -249,7 +258,7 @@ module EffectiveTestBotAssertions
249
258
 
250
259
  if (action || to || from || subject || body).nil?
251
260
  assert ActionMailer::Base.deliveries.present?, message || "(assert_email) Expected email to have been delivered"
252
- return
261
+ return retval
253
262
  end
254
263
 
255
264
  actions = ActionMailer::Base.instance_variable_get(:@mailer_actions)
@@ -263,7 +272,7 @@ module EffectiveTestBotAssertions
263
272
  matches &&= (message.subject == subject) if subject
264
273
  matches &&= (message.body == body) if body
265
274
 
266
- return if matches
275
+ return retval if matches
267
276
  end
268
277
 
269
278
  expected = [
@@ -9,7 +9,7 @@ module EffectiveTestBotFormFiller
9
9
  tabs = all("a[data-toggle='tab']", wait: false)
10
10
 
11
11
  # If there's only 1 tab, just fill it out
12
- (fill_form_fields(fills) and return) unless tabs.length > 1
12
+ return fill_form_fields(fills) unless tabs.length > 1
13
13
 
14
14
  # If there's more than one tab:
15
15
  # We first fill in all fields that are outside of the tab-content
@@ -50,9 +50,10 @@ module EffectiveTestBotFormFiller
50
50
 
51
51
  # Only fills in visible fields
52
52
  # fill_form(:email => 'somethign@soneone.com', :password => 'blahblah', 'user.last_name' => 'hlwerewr')
53
- def fill_form_fields(fills = {}, debug: false)
53
+ def fill_form_fields(fills = {})
54
54
  save_test_bot_screenshot
55
55
 
56
+ debug = fills.delete(:debug)
56
57
  seen = {}
57
58
 
58
59
  5.times do
@@ -10,11 +10,13 @@ module EffectiveTestBotLoginHelper
10
10
  # This is currently hardcoded to use the warden login_as test helper
11
11
  def sign_in(user)
12
12
  if user.kind_of?(String)
13
- login_as(User.find_by_email!(user))
14
- elsif user.kind_of?(User)
13
+ login_as(devise_user_class.find_by_email!(user))
14
+ elsif user.class.name.end_with?('User')
15
15
  raise 'user must be persisted' unless user.persisted?
16
16
  user.reload
17
- login_as(user)
17
+
18
+ devise_scope = user.class.name.underscore.gsub('/', '_').to_sym
19
+ login_as(user, scope: devise_scope)
18
20
  elsif user == false
19
21
  true # Do nothing
20
22
  else
@@ -28,31 +30,38 @@ module EffectiveTestBotLoginHelper
28
30
  end
29
31
 
30
32
  def sign_in_manually(user_or_email, password = nil)
31
- visit new_user_session_path
33
+ visit (respond_to?(:new_user_session_path) ? new_user_session_path : '/users/sign_in')
32
34
 
33
35
  email = (user_or_email.respond_to?(:email) ? user_or_email.email : user_or_email)
34
36
  username = (user_or_email.respond_to?(:username) ? user_or_email.username : user_or_email)
35
37
  login = (user_or_email.respond_to?(:login) ? user_or_email.login : user_or_email)
36
38
 
37
- within('form#new_user') do
39
+ within('form[id^=new][id$=user]') do
38
40
  fill_form(email: email, password: password, username: username, login: login)
39
41
  submit_novalidate_form
40
42
  end
41
43
  end
42
44
 
43
45
  def sign_up(email: Faker::Internet.email, password: Faker::Internet.password, **options)
44
- visit new_user_registration_path
46
+ visit (respond_to?(:new_user_registration_path) ? new_user_registration_path : '/users/sign_up')
45
47
 
46
- within('form#new_user') do
48
+ within('form[id^=new][id$=user]') do
47
49
  fill_form({email: email, password: password, password_confirmation: password}.merge(options))
48
50
  submit_novalidate_form
49
51
  end
50
52
 
51
- User.find_by_email(email)
53
+ devise_user_class.find_by_email(email)
52
54
  end
53
55
 
54
56
  def current_user
55
- User.where(id: assigns['current_user']['id']).first if (assigns['current_user'] && assigns['current_user']['id'])
57
+ user_id = assigns.dig(current_user_assigns_key, 'id')
58
+ return if user_id.blank?
59
+
60
+ devise_user_class.where(id: user_id).first
61
+ end
62
+
63
+ def devise_user_class
64
+ (current_user_assigns_class || User)
56
65
  end
57
66
 
58
67
  end
@@ -68,6 +68,11 @@ module EffectiveTestBotTestHelper
68
68
  Array(all(selector).first).each { |field| within(field) { yield } }
69
69
  end
70
70
 
71
+ def within_tab(name, &block)
72
+ first("a.nav-link#tab-#{name.parameterize}").click
73
+ within_first("div.tab-pane##{name.parameterize}") { yield }
74
+ end
75
+
71
76
  def click_first(label)
72
77
  click_link(label, match: :first)
73
78
  end
@@ -93,6 +98,14 @@ module EffectiveTestBotTestHelper
93
98
  key ? assigns[key.to_s] : assigns
94
99
  end
95
100
 
101
+ def current_user_assigns_key
102
+ assigns.keys.find { |key| key.start_with?('current_') && key.end_with?('_user') } || 'current_user'
103
+ end
104
+
105
+ def current_user_assigns_class
106
+ current_user_assigns_key.sub('current_').gsub('_', '::').classify.safe_constantize
107
+ end
108
+
96
109
  def access_denied_exception
97
110
  return nil unless (page.evaluate_script('window.effective_test_bot.access_denied') rescue nil).present?
98
111
 
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.35
4
+ version: 1.2.3
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: 2021-02-04 00:00:00.000000000 Z
11
+ date: 2021-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails