test_unit_pundit 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.
- data/.gitignore +4 -0
- data/Gemfile +3 -0
- data/README.md +42 -0
- data/Rakefile +9 -0
- data/lib/generators/test_unit_pundit/install/install_generator.rb +9 -0
- data/lib/generators/test_unit_pundit/policy/policy_generator.rb +9 -0
- data/lib/generators/test_unit_pundit/policy/templates/policy_test.rb +17 -0
- data/lib/pundit/test_case.rb +8 -0
- data/lib/pundit/testing/assertions.rb +21 -0
- data/lib/tasks/testing.rake +10 -0
- data/lib/test_unit_pundit/railtie.rb +14 -0
- data/lib/test_unit_pundit.rb +2 -0
- data/test/test_case_test.rb +67 -0
- data/test_unit_pundit.gemspec +24 -0
- metadata +157 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# Test Unit Pundit
|
2
|
+
|
3
|
+
Adds rake test sub task.
|
4
|
+
|
5
|
+
``` sh
|
6
|
+
rake test:policies
|
7
|
+
```
|
8
|
+
|
9
|
+
Extends pundit generators.
|
10
|
+
|
11
|
+
Provides some test helpers.
|
12
|
+
|
13
|
+
|
14
|
+
## Installation
|
15
|
+
|
16
|
+
``` ruby
|
17
|
+
gem 'test_unit_pundit'
|
18
|
+
```
|
19
|
+
|
20
|
+
## Test
|
21
|
+
|
22
|
+
Put your policy test in `test/policies`:
|
23
|
+
|
24
|
+
``` ruby
|
25
|
+
require 'test_helper'
|
26
|
+
|
27
|
+
class PostPolicyTest < Pundit::TestCase
|
28
|
+
test "update? should deny access if post is published" do
|
29
|
+
assert_forbidden User.new(admin: false), Post.new(published: true), :update?
|
30
|
+
end
|
31
|
+
|
32
|
+
test "update? should grant access if post is published and user is an admin" do
|
33
|
+
assert_permitted User.new(admin: true), Post.new(published: true), :update?
|
34
|
+
end
|
35
|
+
|
36
|
+
test "update? should grant access if post is unpublished" do
|
37
|
+
assert_permitted User.new(admin: false), Post.new(published: false), :update?
|
38
|
+
end
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
*Note: test:policies can't run until original test tasks don't have error or failture, when running `rake test`. Now you should run `rake test:policies` to test policies.*
|
data/Rakefile
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
module Pundit
|
2
|
+
module Generators
|
3
|
+
class PolicyGenerator < ::Rails::Generators::NamedBase
|
4
|
+
def create_policy_test_file
|
5
|
+
template File.join(File.dirname(__FILE__), 'templates/policy_test.rb'), File.join('test/policies', class_path, "#{file_name}_policy_test.rb")
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
<% module_namespacing do -%>
|
4
|
+
class <%= class_name %>PolicyTest < Pundit::TestCase
|
5
|
+
# test "update? should deny access if post is published" do
|
6
|
+
# assert_forbidden User.new(admin: false), Post.new(published: true), :update?
|
7
|
+
# end
|
8
|
+
|
9
|
+
# test "update? should grant access if post is published and user is an admin" do
|
10
|
+
# assert_permitted User.new(admin: true), Post.new(published: true), :update?
|
11
|
+
# end
|
12
|
+
|
13
|
+
# test "update? should grant access if post is unpublished" do
|
14
|
+
# assert_permitted User.new(admin: false), Post.new(published: false), :update?
|
15
|
+
# end
|
16
|
+
end
|
17
|
+
<% end -%>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Pundit
|
2
|
+
module Testing
|
3
|
+
module Assertions
|
4
|
+
def assert_permitted(user, record, query, message = nil)
|
5
|
+
message ||= "Expected to grant #{query} on #{record} but it didn't"
|
6
|
+
assert run_authorization(user, record, query), message
|
7
|
+
end
|
8
|
+
|
9
|
+
def assert_forbidden(user, record, query, message = nil)
|
10
|
+
message ||= "Expected not to grant #{query} on #{record} but it did"
|
11
|
+
assert !run_authorization(user, record, query), message
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def run_authorization(user, record, query)
|
17
|
+
self.class.to_s.gsub(/Test/, '').constantize.new(user, record).public_send(query)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rails'
|
2
|
+
|
3
|
+
module TestUnitPundit
|
4
|
+
class Railtie < ::Rails::Railtie
|
5
|
+
generators do
|
6
|
+
load File.join(File.expand_path("../../generators/test_unit_pundit/install", __FILE__), "install_generator.rb")
|
7
|
+
load File.join(File.expand_path("../../generators/test_unit_pundit/policy", __FILE__), "policy_generator.rb")
|
8
|
+
end
|
9
|
+
|
10
|
+
rake_tasks do
|
11
|
+
load File.join(File.expand_path("../../tasks", __FILE__), "testing.rake")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'pundit/test_case'
|
2
|
+
|
3
|
+
require 'minitest/unit'
|
4
|
+
require 'minitest/autorun'
|
5
|
+
require 'minitest/pride'
|
6
|
+
|
7
|
+
class AssertPermittedTest < Pundit::TestCase
|
8
|
+
def test_assert_permitted_true
|
9
|
+
assert_permitted User.new(true), Post.new, :update?
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_assert_permitted_false
|
13
|
+
begin
|
14
|
+
assert_permitted User.new(false), Post.new, :update?
|
15
|
+
fail 'should not get to here'
|
16
|
+
rescue Exception => e
|
17
|
+
assert_match(/Expected to grant/, e.message)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class AssertForbiddenTest < Pundit::TestCase
|
23
|
+
def test_assert_forbidden_true
|
24
|
+
assert_forbidden User.new(false), Post.new, :update?
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_assert_forbidden_false
|
28
|
+
begin
|
29
|
+
assert_forbidden User.new(true), Post.new, :update?
|
30
|
+
fail 'should not get to here'
|
31
|
+
rescue Exception => e
|
32
|
+
assert_match(/Expected not to grant/, e.message)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
class User
|
40
|
+
attr_accessor :admin
|
41
|
+
|
42
|
+
def initialize(admin)
|
43
|
+
@admin = admin
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class Post
|
48
|
+
end
|
49
|
+
|
50
|
+
class Policy
|
51
|
+
attr_reader :user, :record
|
52
|
+
|
53
|
+
def initialize(user, record)
|
54
|
+
@user = user
|
55
|
+
@record = record
|
56
|
+
end
|
57
|
+
|
58
|
+
def update?
|
59
|
+
return true if user.admin
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
class AssertPermitted < Policy
|
64
|
+
end
|
65
|
+
|
66
|
+
class AssertForbidden < Policy
|
67
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'test_unit_pundit'
|
3
|
+
s.version = '0.1.1'
|
4
|
+
s.summary = 'Test::Unit support for Pundit'
|
5
|
+
s.description = 'Test::Unit support for Pundit'
|
6
|
+
s.homepage = 'https://github.com/cqc1008/test_unit_pundit'
|
7
|
+
|
8
|
+
s.rubyforge_project = 'test_unit_pundit'
|
9
|
+
s.authors = ['Tony Cao']
|
10
|
+
s.email = ['fm1008rr@sina.com']
|
11
|
+
s.license = 'MIT'
|
12
|
+
|
13
|
+
s.files = `git ls-files`.split($/)
|
14
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
|
17
|
+
s.add_dependency 'activesupport', '>= 3.0.0'
|
18
|
+
s.add_dependency 'railties', '>= 3.0.0'
|
19
|
+
s.add_dependency 'pundit', '~> 0.2.3'
|
20
|
+
|
21
|
+
s.add_development_dependency 'activesupport', '4.1.0'
|
22
|
+
s.add_development_dependency 'railties', '4.1.0'
|
23
|
+
s.add_development_dependency 'minitest', '5.3.2'
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: test_unit_pundit
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Tony Cao
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-04-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.0.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: railties
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 3.0.0
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 3.0.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: pundit
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.2.3
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.2.3
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: activesupport
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - '='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 4.1.0
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - '='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 4.1.0
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: railties
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - '='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 4.1.0
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - '='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 4.1.0
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: minitest
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - '='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 5.3.2
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - '='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 5.3.2
|
110
|
+
description: Test::Unit support for Pundit
|
111
|
+
email:
|
112
|
+
- fm1008rr@sina.com
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- .gitignore
|
118
|
+
- Gemfile
|
119
|
+
- README.md
|
120
|
+
- Rakefile
|
121
|
+
- lib/generators/test_unit_pundit/install/install_generator.rb
|
122
|
+
- lib/generators/test_unit_pundit/policy/policy_generator.rb
|
123
|
+
- lib/generators/test_unit_pundit/policy/templates/policy_test.rb
|
124
|
+
- lib/pundit/test_case.rb
|
125
|
+
- lib/pundit/testing/assertions.rb
|
126
|
+
- lib/tasks/testing.rake
|
127
|
+
- lib/test_unit_pundit.rb
|
128
|
+
- lib/test_unit_pundit/railtie.rb
|
129
|
+
- test/test_case_test.rb
|
130
|
+
- test_unit_pundit.gemspec
|
131
|
+
homepage: https://github.com/cqc1008/test_unit_pundit
|
132
|
+
licenses:
|
133
|
+
- MIT
|
134
|
+
post_install_message:
|
135
|
+
rdoc_options: []
|
136
|
+
require_paths:
|
137
|
+
- lib
|
138
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
140
|
+
requirements:
|
141
|
+
- - ! '>='
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
requirements: []
|
151
|
+
rubyforge_project: test_unit_pundit
|
152
|
+
rubygems_version: 1.8.24
|
153
|
+
signing_key:
|
154
|
+
specification_version: 3
|
155
|
+
summary: Test::Unit support for Pundit
|
156
|
+
test_files:
|
157
|
+
- test/test_case_test.rb
|