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 ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .ruby-gemset
3
+ .ruby-version
4
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
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
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.libs << 'test'
5
+ t.pattern = 'test/*_test.rb'
6
+ end
7
+
8
+ desc "Run tests"
9
+ task default: :test
@@ -0,0 +1,9 @@
1
+ module Pundit
2
+ module Generators
3
+ class InstallGenerator < ::Rails::Generators::Base
4
+ def create_test_folder
5
+ empty_directory('test/policies')
6
+ end
7
+ end
8
+ end
9
+ end
@@ -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,8 @@
1
+ require 'active_support/test_case'
2
+ require 'pundit/testing/assertions'
3
+
4
+ module Pundit
5
+ class TestCase < ::ActiveSupport::TestCase
6
+ include Pundit::Testing::Assertions
7
+ end
8
+ 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,10 @@
1
+ namespace :test do
2
+
3
+ Rails::SubTestTask.new(policies: 'test:prepare') do |t|
4
+ t.libs << 'test'
5
+ t.pattern = 'test/policies/**/*_test.rb'
6
+ end
7
+
8
+ end
9
+
10
+ Rake::Task[:test].enhance { Rake::Task['test:policies'].invoke }
@@ -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,2 @@
1
+ require 'test_unit_pundit/railtie'
2
+ require 'pundit/test_case'
@@ -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