policy-assertions 0.0.3 → 0.1.1

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: de43c6a77ae8bc5ef2887f016bc04b7924842852
4
- data.tar.gz: a68e538a28931ce1702a987c17ec56c433a132ee
3
+ metadata.gz: f24ccf11ad4ed8b8cfbc67593fdb47ee45acee40
4
+ data.tar.gz: 1383189eb57f1a60a320658985f8ca7f1853289d
5
5
  SHA512:
6
- metadata.gz: d3958f8816690edb5148180e06b4f4245f98ff1f1a9e68e0643444a2793001f9f8d3b5fb91288a9f4f2fcbf74c85a2e4a70d4ff57addfc9a376ab5c3780991b7
7
- data.tar.gz: 40c562a177f6387d8bff50d8aec2dbf838d46f5fb7399d96b0dbcc8a87a285266c9c166248cb9bb253d94adfdee376bd3a0d91cb02aaf44ab9846fbd88af6e42
6
+ metadata.gz: a5fc2eee22de0f4b9f5c0c6cb899035cef25322c09879613c83bde1b0c2e5ae943fe8f51b760223fe289889b628142e4235000fb62cceba3f5393728113d9338
7
+ data.tar.gz: c3dc79ede4de1fd15a5c0f2979c7c615a21f6c1d047ae29717400624881d61b062737a5489cbdf737196d77876fab87bd9fe0e899e32d0f55338d016823d5245
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## v0.1.0
2
+ * [Adds support for arrays as actions in block tests](https://github.com/ProctorU/policy-assertions/pull/10)
3
+ * [Adds support for `assert_not_permitted`](https://github.com/ProctorU/policy-assertions/pull/12)
4
+ * [Readme updates](https://github.com/ProctorU/policy-assertions/pull/11)
5
+ * Transferred ownership from @ksimmons to @proctoru
6
+
1
7
  ## v0.0.3
2
8
 
3
9
  * Compatibility with pundit 1.1.0
data/README.md CHANGED
@@ -1,10 +1,20 @@
1
1
  # policy-assertions
2
- [![Build Status](https://travis-ci.org/ksimmons/policy-assertions.svg?branch=master)](https://travis-ci.org/ksimmons/policy-assertions)
2
+
3
+ [![Build Status](https://circleci.com/gh/ProctorU/policy-assertions.svg?style=shield&circle-token=7084a829c9e63b415f59e627d9e4ee90db7d2afa)](https://circleci.com/gh/ProctorU/policy-assertions) [![Gem Version](https://badge.fury.io/rb/policy-assertions.svg)](https://badge.fury.io/rb/policy-assertions)
3
4
 
4
5
  Minitest test assertions for [Pundit](https://github.com/elabs/pundit) policies.
5
6
 
6
7
  policy-assertions provides a test class for easy Pundit testing. The test class provides assertions and refutations for policies and strong parameters.
7
8
 
9
+ ## Table of contents
10
+
11
+ * [Installation](#installation)
12
+ * [Usage](#usage)
13
+ * [Available test methods](#test-method-naming)
14
+ * [Configuration](#configuration)
15
+ * [Developing](#developing)
16
+ * [Credits](#credits)
17
+
8
18
  ## Installation
9
19
 
10
20
  Add this line to your application's Gemfile:
@@ -21,7 +31,7 @@ Or install it yourself as:
21
31
 
22
32
  $ gem install policy-assertions
23
33
 
24
- **Add require policy\_assertions to test\_helper.rb**
34
+ **Add require policy_assertions to test_helper.rb**
25
35
 
26
36
  ```ruby
27
37
  require 'policy_assertions'
@@ -31,10 +41,10 @@ require 'policy_assertions'
31
41
 
32
42
  policy-assertions is intended to make testing Pundit policies as simple as possible. The gem adds the following helpers:
33
43
 
34
- - PolicyAssertions::Test class
35
- - parses permissions to test from method name
36
- - assert\_permit and refute\_permit methods
37
- - assert\_strong\_parameters
44
+ * PolicyAssertions::Test class
45
+ * parses permissions to test from method name
46
+ * assert_permit and refute_permit methods
47
+ * assert_strong_parameters
38
48
 
39
49
  The following code sample illustrates the intended use of this gem.
40
50
 
@@ -57,6 +67,8 @@ class ArticlePolicyTest < PolicyAssertions::Test
57
67
  # Test that this user cannot delete this article
58
68
  def test_destroy
59
69
  refute_permit users(:regular), articles(:instructions)
70
+ # Alternate method name
71
+ asssert_not_permitted users(:regular), articles(:instructions)
60
72
  end
61
73
 
62
74
  # Test a permission by passing in an array instead of
@@ -78,8 +90,19 @@ class ArticlePolicyTest < PolicyAssertions::Test
78
90
  end
79
91
  ```
80
92
 
81
- ### Test method naming
82
- policy-assertions can read the permissions to test from the method name. This will only work when using the minitest def test_name syntax, it does not work for the Rails test block helper.
93
+ If policies are namespaced, the invocation of the class name should follow the same syntax as Pundit.
94
+
95
+ ```ruby
96
+ # Test that the Organizations::Article model allows index and show
97
+ # for any site visitor. nil is passed in for the user.
98
+ def test_index_and_show
99
+ assert_permit nil, [:organizations, Article]
100
+ end
101
+ ```
102
+
103
+ ## Test method naming
104
+
105
+ policy-assertions can read the permissions to test from the method name. This will only work when using the minitest def test_name syntax. When using the block syntax, you must explicitly pass the permission names.
83
106
 
84
107
  ```ruby
85
108
  # Good
@@ -92,26 +115,28 @@ end
92
115
  def test_show_and_index
93
116
  end
94
117
 
95
- # Not good
96
- # The permission cannot be read from this block.
118
+ # Good block syntax
119
+ # The permission cannot be automatically read, so you must pass the policy names directly.
97
120
  test 'create' do
98
- # passing the permissions to the assert or refute is ok.
99
121
  refute_permit nil, Article, 'create?', 'new?'
100
122
  end
101
123
  ```
124
+
102
125
  Define multiple permissions in a method name by separating the permissions using '\_and\_'.
103
126
 
104
127
  See the configuration section for changing the separator value.
105
128
 
106
- ### assert\_permit and refute\_permit
129
+ ### assert_permit and refute_permit
130
+
107
131
  These methods take the following parameters:
108
132
 
109
- - User to authorize
110
- - Model or instance to authorize
111
- - Optional array of permissions. They should match the permission method name exactly.
133
+ * User to authorize
134
+ * Model or instance to authorize
135
+ * Optional array of permissions. They should match the permission method name exactly.
112
136
 
113
137
  #### Passing permissions to assert and refute
114
- When permissions are passed to assert or refute the test method name is ignored and does not need to match a policy permission.
138
+
139
+ When permissions are passed to assert or refute, the test method name is ignored and does not need to match a policy permission.
115
140
 
116
141
  ```ruby
117
142
  class ArticlePolicyTest < PolicyAssertions::Test
@@ -124,7 +149,8 @@ end
124
149
  ```
125
150
 
126
151
  ### Using the rails test block helper
127
- policy-assertions will work with the rails test block helper but it cannot parse the permissions. If a test block is used and the permissions are not passed to the assert and refute methods a PolicyAssertions::MissingBlockParameters error will be thrown.
152
+
153
+ policy-assertions will work with the rails test block helper but it cannot parse the permissions. If a test block is used and the permissions are not passed to the `assert` and `refute` methods, a PolicyAssertions::MissingBlockParameters error will be thrown.
128
154
 
129
155
  ```ruby
130
156
  class ArticlePolicyTest < PolicyAssertions::Test
@@ -132,6 +158,11 @@ class ArticlePolicyTest < PolicyAssertions::Test
132
158
  assert_permit @user, Article, 'index?', 'show?'
133
159
  end
134
160
 
161
+ # Actions can also be passed as an array
162
+ test 'index?' do
163
+ assert_permit @user, Article, %w(index? show?)
164
+ end
165
+
135
166
  # this will result in a
136
167
  # PolicyAssertions::MissingBlockParameters error
137
168
  test 'show?' do
@@ -141,6 +172,7 @@ end
141
172
  ```
142
173
 
143
174
  ### Strong Parameters
175
+
144
176
  Since Pundit offers a [permitted_attributes](https://github.com/elabs/pundit#strong-parameters) helper, policy-assertions provides an assert method for testing.
145
177
 
146
178
  ```ruby
@@ -157,17 +189,39 @@ class ArticlePolicyTest < PolicyAssertions::Test
157
189
  end
158
190
  end
159
191
  ```
160
- ## Configure
192
+
193
+ ## Configuration
194
+
161
195
  Use the following in your test helper to change the test definition permissions separator.
162
196
 
163
197
  ```ruby
164
198
  PolicyAssertions.config.separator = '__separator__'
165
199
  ```
166
200
 
167
- ## Contributing
201
+ ## Developing
168
202
 
169
203
  1. Fork it ( https://github.com/[my-github-username]/policy-assertions/fork )
170
204
  2. Create your feature branch (`git checkout -b my-new-feature`)
171
205
  3. Commit your changes with tests (`git commit -am 'Add some feature'`)
172
206
  4. Push to the branch (`git push origin my-new-feature`)
173
207
  5. Create a new Pull Request
208
+
209
+ ## Credits
210
+
211
+ Policy-assertions is maintained and funded by [ProctorU](https://twitter.com/ProctorU),
212
+ a simple online proctoring service that allows you to take exams or
213
+ certification tests at home.
214
+
215
+ We'd like to thank [@ksimmons](https://github.com/ksimmons) for being the original creator of policy-assertions and allowing us to maintain the project.
216
+
217
+ <br>
218
+
219
+ <p align="center">
220
+ <a href="https://twitter.com/ProctorUEng">
221
+ <img src="https://s3-us-west-2.amazonaws.com/dev-team-resources/procki-eyes.svg" width=108 height=72>
222
+ </a>
223
+
224
+ <h3 align="center">
225
+ <a href="https://twitter.com/ProctorUEng">ProctorU Engineering & Design</a>
226
+ </h3>
227
+ </p>
data/circle.yml ADDED
@@ -0,0 +1,13 @@
1
+ dependencies:
2
+ override:
3
+ - 'rvm-exec 2.1.10 bundle install'
4
+ - 'rvm-exec 2.2.8 bundle install'
5
+ - 'rvm-exec 2.3.5 bundle install'
6
+ - 'rvm-exec 2.4.2 bundle install'
7
+
8
+ test:
9
+ override:
10
+ - 'rvm-exec 2.1.10 bundle exec rake'
11
+ - 'rvm-exec 2.2.8 bundle exec rake'
12
+ - 'rvm-exec 2.3.5 bundle exec rake'
13
+ - 'rvm-exec 2.4.2 bundle exec rake'
@@ -16,7 +16,7 @@ require 'policy_assertions/configuration'
16
16
  module PolicyAssertions
17
17
  class Test < ActiveSupport::TestCase
18
18
  def assert_permit(user, record, *permissions)
19
- get_permissions(permissions).each do |permission|
19
+ get_permissions(permissions.flatten).each do |permission|
20
20
  policy = Pundit.policy!(user, record)
21
21
  assert policy.public_send(permission),
22
22
  "Expected #{policy.class.name} to grant #{permission} "\
@@ -25,13 +25,14 @@ module PolicyAssertions
25
25
  end
26
26
 
27
27
  def refute_permit(user, record, *permissions)
28
- get_permissions(permissions).each do |permission|
28
+ get_permissions(permissions.flatten).each do |permission|
29
29
  policy = Pundit.policy!(user, record)
30
30
  refute policy.public_send(permission),
31
31
  "Expected #{policy.class.name} not to grant #{permission} "\
32
32
  "on #{record} for #{user} but it did"
33
33
  end
34
34
  end
35
+ alias assert_not_permitted refute_permit
35
36
 
36
37
  def assert_strong_parameters(user, record, params_hash, allowed_params)
37
38
  policy = Pundit.policy!(user, record)
@@ -1,3 +1,3 @@
1
1
  module PolicyAssertions
2
- VERSION = '0.0.3'
2
+ VERSION = '0.1.1'
3
3
  end
@@ -6,8 +6,8 @@ require 'policy_assertions/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "policy-assertions"
8
8
  spec.version = PolicyAssertions::VERSION
9
- spec.authors = ['Kevin Simmons']
10
- spec.email = ['kevin.p.simmons@gmail.com']
9
+ spec.authors = ['ProctorU']
10
+ spec.email = ['engineering@proctoru.com']
11
11
  spec.summary = %q{Minitest assertions for Pundit policies.}
12
12
  spec.description = %q{Minitest assertions for Pundit policies.}
13
13
  spec.homepage = 'https://github.com/ksimmons/policy-assertions'
@@ -102,6 +102,17 @@ class AssertionsTest < Minitest::Test
102
102
  assert test_runner.passed?
103
103
  end
104
104
 
105
+ def test_permission_failed_as_assert_not_permitted
106
+ test_runner = policy_class do
107
+ def test_create
108
+ assert_not_permitted nil, Article
109
+ end
110
+ end.new :test_create
111
+
112
+ test_runner.run
113
+ assert test_runner.passed?
114
+ end
115
+
105
116
  def test_destroy
106
117
  test_runner = policy_class do
107
118
  def test_destroy
@@ -197,8 +208,20 @@ class ValidBlockParametersTest
197
208
  assert_permit nil, Article, 'index?', 'long_action?'
198
209
  end
199
210
 
211
+ test 'assert_permit index? as array' do
212
+ assert_permit nil, Article, %w(index? long_action?)
213
+ end
214
+
200
215
  test 'destroy?' do
201
216
  refute_permit nil, Article, 'destroy?'
202
217
  end
218
+
219
+ test 'destroy? with assert_not_permitted' do
220
+ assert_not_permitted nil, Article, 'destroy?'
221
+ end
222
+
223
+ test 'refute_permit destroy? as array' do
224
+ refute_permit nil, Article, %w(destroy?)
225
+ end
203
226
  end
204
227
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: policy-assertions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
- - Kevin Simmons
7
+ - ProctorU
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-08 00:00:00.000000000 Z
11
+ date: 2018-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -124,19 +124,19 @@ dependencies:
124
124
  version: 3.0.0
125
125
  description: Minitest assertions for Pundit policies.
126
126
  email:
127
- - kevin.p.simmons@gmail.com
127
+ - engineering@proctoru.com
128
128
  executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
132
  - ".gitignore"
133
133
  - ".rubocop.yml"
134
- - ".travis.yml"
135
134
  - CHANGELOG.md
136
135
  - Gemfile
137
136
  - LICENSE.txt
138
137
  - README.md
139
138
  - Rakefile
139
+ - circle.yml
140
140
  - lib/policy_assertions.rb
141
141
  - lib/policy_assertions/configuration.rb
142
142
  - lib/policy_assertions/errors.rb
@@ -167,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  version: '0'
168
168
  requirements: []
169
169
  rubyforge_project:
170
- rubygems_version: 2.4.1
170
+ rubygems_version: 2.6.8
171
171
  signing_key:
172
172
  specification_version: 4
173
173
  summary: Minitest assertions for Pundit policies.
@@ -177,4 +177,3 @@ test_files:
177
177
  - test/lib/policy-assertions/version_test.rb
178
178
  - test/lib/policy_assertions_test.rb
179
179
  - test/test_helper.rb
180
- has_rdoc:
data/.travis.yml DELETED
@@ -1,4 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 1.9.3
4
- - 2.2.0-preview1