effective_test_bot 0.6.3 → 0.6.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
  SHA1:
3
- metadata.gz: a39eb4dbe99bb9e9e190dcdea42b98217e899fbb
4
- data.tar.gz: f3de18d8e670326b43977a17eaec8abc1bc9afc1
3
+ metadata.gz: 533f4dfe9d458e6c298b9da728e511cc2346e466
4
+ data.tar.gz: 92e5aad66b7f4d7ef653324412c45b5cc6b445e9
5
5
  SHA512:
6
- metadata.gz: 6602fcc1c63846384499ff4c3d20109dc113f20ed8e3d18f804e7a960da289dd15ab3700f7de6c45ea186963af1397627d7062abba896008bc1a00882e0259b4
7
- data.tar.gz: 430925ce013e377568e84a0e12295694adb9fe13355f7cb8129c0191f2c1b0db44f302af128d412c70f3310af2af111db8530cbf394e9cd40b8f535f8ff2da77
6
+ metadata.gz: afec0dac31e2002a83206d087e4b3706b6966addfc8e63b5ec58461da5d020bd9f9d28ec4181c68e356758c6134fe4bb319a7b316548437989ca8f5cb4b71f6c
7
+ data.tar.gz: 328fcf108174c8348c251da7a5eaab777453b35bee4604ec36e997271e138e5bae4323f0fb1524147eec83847f505170be8c19254e818cbf0ea67e8a31f01d10
data/README.md CHANGED
@@ -105,6 +105,7 @@ The following assertions are added for use in any integration test:
105
105
 
106
106
  - `assert_assigns` asserts a given rails view_assigns object is present.
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
+ - `assert_authorization` checks for a 403 Access Denied error. Add `assign_test_bot_access_denied_exception(exception)` to your ApplicationController's `rescue_from` block to generate more information.
108
109
  - `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
110
  - `assert_current_path(path)` asserts the current page path.
110
111
  - `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.
@@ -253,10 +254,10 @@ There are a few variations on the one-liner method:
253
254
  ```ruby
254
255
  class PostsTest < Capybara::Rails::TestCase
255
256
  # Runs all 9 crud_action tests against /posts
256
- crud_test(resource: Post, user: User.first)
257
+ crud_test(resource: Post)
257
258
 
258
259
  # Runs all 9 crud_action tests against /posts and use this Post's attributes when calling fill_form.
259
- crud_test(resource: Post.new(title: 'my first post'), user: User.first)
260
+ crud_test(resource: Post.new(title: 'my first post'))
260
261
 
261
262
  # Runs all 9 crud_action tests against /admin/posts controller as a previously seeded or fixtured admin user
262
263
  crud_test(resource: 'admin/posts', user: User.where(admin: true).first)
@@ -30,4 +30,23 @@ module EffectiveTestBotControllerHelper
30
30
  response.headers['Test-Bot-Unpermitted-Params'] = Base64.encode64(exception.params.to_json)
31
31
  end
32
32
  end
33
+
34
+ def assign_test_bot_access_denied_exception(exception)
35
+ return unless Rails.env.test?
36
+
37
+ response.headers['Test-Bot-Access-Denied'] = Base64.encode64({
38
+ exception: exception,
39
+ action: exception.action,
40
+ subject: (
41
+ if exception.subject.kind_of?(Symbol)
42
+ ":#{exception.subject}"
43
+ elsif exception.subject.class == Class
44
+ exception.subject.name
45
+ else
46
+ exception.subject.class.name
47
+ end
48
+ )
49
+ }.to_json)
50
+ end
51
+
33
52
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveTestBot
2
- VERSION = '0.6.3'.freeze
2
+ VERSION = '0.6.4'.freeze
3
3
  end
@@ -116,6 +116,7 @@ module TestBotable
116
116
  end
117
117
 
118
118
  # Instance Methods
119
+ protected
119
120
 
120
121
  def test_bot_user(test_name)
121
122
  return @test_bot_user if @test_bot_user
@@ -54,6 +54,21 @@ module EffectiveTestBotAssertions
54
54
  assert all("input[type='submit'],button[type='submit']").present?, message
55
55
  end
56
56
 
57
+ def assert_authorization(message = '(authorization) Expected authorized access')
58
+ if page.status_code == 403
59
+ exception = access_denied_exception
60
+
61
+ info = [
62
+ "Encountered a 403 Access Denied",
63
+ ("(cannot :#{exception['action']}, #{exception['subject']})" if exception.present?),
64
+ "on #{page.current_path} as user #{user || 'no user'}.",
65
+ ("\nAdd assign_test_bot_access_denied_exception(exception) to your ApplicationController's rescue_from block to gather more information." unless exception.present?),
66
+ ].compact.join(' ')
67
+
68
+ assert false, "#{message}.\n#{info}"
69
+ end
70
+ end
71
+
57
72
  def assert_page_status(status = 200, message = '(page_status) Expected :status: HTTP status code')
58
73
  assert_equal status, page.status_code, message.sub(':status:', status.to_s)
59
74
  end
@@ -30,6 +30,7 @@ module EffectiveTestBotFormHelper
30
30
  assert_no_unpermitted_params unless test_bot_skip?(:no_unpermitted_params)
31
31
  assert_no_assigns_errors unless test_bot_skip?(:no_assigns_errors)
32
32
  assert_no_exceptions unless test_bot_skip?(:exceptions)
33
+ assert_authorization unless test_bot_skip?(:authorization)
33
34
  assert_page_status unless test_bot_skip?(:page_status)
34
35
 
35
36
  true
@@ -45,7 +46,7 @@ module EffectiveTestBotFormHelper
45
46
  def clear_form
46
47
  all('input,select,textarea').each do |field|
47
48
  if field.tag_name == 'select' && field['class'].to_s.include?('select2') # effective_select
48
- within(field.parent) { first(:css, '.select2-selection__clear').try(:click) }
49
+ within(field.query_scope) { first(:css, '.select2-selection__clear').try(:click) }
49
50
  end
50
51
 
51
52
  begin
@@ -95,7 +95,7 @@ module EffectiveTestBotScreenshotsHelper
95
95
 
96
96
  def current_test_failure_filename
97
97
  # Match Capybara-screenshots format-ish
98
- "#{current_test_name.parameterize}_failure_#{Time.now.strftime('%Y-%m-%d-%H-%M-%S')}.gif"
98
+ "#{current_test_name.parameterize}-failure-#{Time.now.strftime('%Y-%m-%d-%H-%M-%S')}.gif"
99
99
  end
100
100
 
101
101
  # Where the tour animated gif ends up
@@ -69,8 +69,8 @@ module EffectiveTestBotTestHelper
69
69
  (JSON.parse(Base64.decode64(page.response_headers['Test-Bot-Unpermitted-Params'])) rescue [])
70
70
  end
71
71
 
72
- def exceptions
73
- (JSON.parse(Base64.decode64(page.response_headers['Test-Bot-Exceptions'])) rescue [])
72
+ def access_denied_exception
73
+ (JSON.parse(Base64.decode64(page.response_headers['Test-Bot-Access-Denied'])) rescue {})
74
74
  end
75
75
 
76
76
  end
@@ -8,6 +8,7 @@ module BaseTest
8
8
  return if test_bot_skip?(:normal)
9
9
 
10
10
  assert_no_exceptions unless test_bot_skip?(:exceptions)
11
+ assert_authorization unless test_bot_skip?(:authorization)
11
12
  assert_page_status unless test_bot_skip?(:page_status)
12
13
  assert_no_js_errors unless test_bot_skip?(:no_js_errors)
13
14
  assert_page_title unless (test_bot_skip?(:page_title) || all('head').blank? || was_download?)
@@ -51,7 +52,9 @@ module BaseTest
51
52
  assert(new_path.present?, "TestBotError: Generated polymorphic route new_#{[*controller_namespace, resource_name].compact.join('_')}_path is undefined. #{hint}")
52
53
 
53
54
  visit(new_path)
55
+
54
56
  assert_no_exceptions
57
+ assert_authorization(hint)
55
58
  assert_page_status
56
59
 
57
60
  assert_form("form#new_#{resource_name}", "TestBotError: Failed to find form#new_#{resource_name}. #{hint}") unless test_bot_skip?(:form)
@@ -63,6 +66,7 @@ module BaseTest
63
66
  submit_novalidate_form
64
67
 
65
68
  assert_no_exceptions
69
+ assert_authorization(hint)
66
70
  assert_page_status
67
71
  end
68
72
 
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.6.3
4
+ version: 0.6.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: 2017-02-03 00:00:00.000000000 Z
11
+ date: 2017-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails