effective_test_bot 1.1.36 → 1.2.4

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: 8b48d94a0636a8e399c6d2d70e26f5cc49e2071e34b8a81be179dc3334c52c9b
4
- data.tar.gz: 4dbfa94a3c171506de7dcd51af8b7999573ab3017ef3984ffdf53e9530f731a0
3
+ metadata.gz: dfb43e3e70877589f36e4686127e142207377f2f1232bc000dac2749c4d2e5bc
4
+ data.tar.gz: 48b700956d1bddf075d49abc9c9f4a4d9f32921d0e2bf4268c578518652f6f72
5
5
  SHA512:
6
- metadata.gz: fd447674df972509839eefcefa0cd04b9d10e058fe236dceabf6dc340f8df9ed50fe439177d15b8367b1966071c66c7ac60237bbd15ae1a58a19a29bd961c9e6
7
- data.tar.gz: 2446921073f5b4b4be0f893f026cdc9526070f951cf4005fc145bf9c5ce3f7910a03f98efd98b3a4672887e7087db16373100693b271fa3c07f9faf5230bb0af
6
+ metadata.gz: 32190b5326ad994c3c2f8ab3eb186bdd47be93fe164649d349e764a2eec54653e4ad38b67d3a0025c6a82325e8a0f89f86093ae1ef8c5fde7fc2fd5544e791b0
7
+ data.tar.gz: e2e0c8e3e6c71d969d0cddfb6f925ab2747a803051745172d7e407b8b06231df2b5c14a1ed15b5c69dc32ad255de8885f72bbfe389c1382852659cbb61180d69
@@ -3,28 +3,26 @@ require 'effective_test_bot/engine'
3
3
  require 'effective_test_bot/dsl'
4
4
  require 'effective_test_bot/middleware'
5
5
  require 'effective_test_bot/version'
6
+ require 'timecop'
6
7
 
7
8
  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
9
+ mattr_accessor :passed_tests
10
+
11
+ def self.config_keys
12
+ [
13
+ :user,
14
+ :except, :only,
15
+ :fail_fast,
16
+ :form_fills,
17
+ :screenshots, :autosave_animated_gif_on_failure,
18
+ :tour_mode, :tour_mode_extreme,
19
+ :animated_gif_delay, :animated_gif_background_color,
20
+ :image_processing_class_name,
21
+ :backtrace_lines, :silence_skipped_routes
22
+ ]
23
+ end
24
+
25
+ include EffectiveGem
28
26
 
29
27
  # Test could be something like "crud_test", "crud_test (documents#new)", "documents", documents#new"
30
28
  # Assertion will be page_title, or flash
@@ -1,3 +1,3 @@
1
1
  module EffectiveTestBot
2
- VERSION = '1.1.36'.freeze
2
+ VERSION = '1.2.4'.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
@@ -11,10 +11,12 @@ module EffectiveTestBotLoginHelper
11
11
  def sign_in(user)
12
12
  if user.kind_of?(String)
13
13
  login_as(devise_user_class.find_by_email!(user))
14
- elsif user.kind_of?(devise_user_class)
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
@@ -34,7 +36,7 @@ module EffectiveTestBotLoginHelper
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
@@ -43,7 +45,7 @@ module EffectiveTestBotLoginHelper
43
45
  def sign_up(email: Faker::Internet.email, password: Faker::Internet.password, **options)
44
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
@@ -52,12 +54,14 @@ module EffectiveTestBotLoginHelper
52
54
  end
53
55
 
54
56
  def current_user
55
- return nil unless (assigns['current_user'] && assigns['current_user']['id'])
56
- devise_user_class.where(id: assigns['current_user']['id']).first
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
57
61
  end
58
62
 
59
63
  def devise_user_class
60
- User
64
+ (current_user_assigns_class || User)
61
65
  end
62
66
 
63
67
  end
@@ -68,6 +68,18 @@ 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
+
76
+ def with_time_travel(date, &block)
77
+ Timecop.travel(date)
78
+ retval = yield
79
+ Timecop.return
80
+ retval
81
+ end
82
+
71
83
  def click_first(label)
72
84
  click_link(label, match: :first)
73
85
  end
@@ -93,6 +105,14 @@ module EffectiveTestBotTestHelper
93
105
  key ? assigns[key.to_s] : assigns
94
106
  end
95
107
 
108
+ def current_user_assigns_key
109
+ assigns.keys.find { |key| key.start_with?('current_') && key.end_with?('_user') } || 'current_user'
110
+ end
111
+
112
+ def current_user_assigns_class
113
+ current_user_assigns_key.sub('current_').gsub('_', '::').classify.safe_constantize
114
+ end
115
+
96
116
  def access_denied_exception
97
117
  return nil unless (page.evaluate_script('window.effective_test_bot.access_denied') rescue nil).present?
98
118
 
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.36
4
+ version: 1.2.4
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-16 00:00:00.000000000 Z
11
+ date: 2021-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: timecop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  description: A shared library of rails model & system tests that should pass in every
126
140
  Rails application.
127
141
  email: