|
1 | | -require "rails_helper" |
2 | | - |
3 | | -describe ApplicationPolicy do |
| 1 | +shared_examples "ApplicationPolicy" do |
4 | 2 | subject(:policy) { described_class } |
5 | 3 |
|
6 | 4 | let(:member) { create(:user) } |
7 | | - let(:model) { create(:model) } |
| 5 | + let(:object) { create(target_class.to_s.underscore.to_sym) } |
8 | 6 |
|
9 | 7 | permissions :index?, :show? do |
10 | 8 | it "allows users with member role by default" do |
11 | | - expect(policy).to permit(member, model) |
| 9 | + expect(policy).to permit(member, object) |
12 | 10 | end |
13 | 11 |
|
14 | 12 | it "falls back to member role if ReBAC isn't available on the record" do |
|
18 | 16 |
|
19 | 17 | context "when default member role access is removed" do |
20 | 18 | before do |
21 | | - model.revoke_permission("view", Role.find_by(name: :member)) |
| 19 | + object.revoke_permission("view", Role.find_by(name: :member)) |
22 | 20 | end |
23 | 21 |
|
24 | 22 | it "denies users without individual view permission" do |
25 | | - expect(policy).not_to permit(member, model) |
| 23 | + expect(policy).not_to permit(member, object) |
26 | 24 | end |
27 | 25 |
|
28 | 26 | it "allows users with individual view permission" do |
29 | | - model.grant_permission_to "view", member |
30 | | - expect(policy).to permit(member, model) |
| 27 | + object.grant_permission_to "view", member |
| 28 | + expect(policy).to permit(member, object) |
31 | 29 | end |
32 | 30 | end |
33 | 31 |
|
34 | 32 | context "with an unknown user" do |
35 | 33 | it "denies access if public view permission isn't set" do |
36 | | - expect(policy).not_to permit(nil, model) |
| 34 | + expect(policy).not_to permit(nil, object) |
37 | 35 | end |
38 | 36 |
|
39 | 37 | it "allows access if public view permission is set" do |
40 | | - model.grant_permission_to "view", nil |
41 | | - expect(policy).to permit(nil, model) |
| 38 | + object.grant_permission_to "view", nil |
| 39 | + expect(policy).to permit(nil, object) |
42 | 40 | end |
43 | 41 | end |
44 | 42 | end |
|
64 | 62 | let(:contributor) { create(:contributor) } |
65 | 63 |
|
66 | 64 | it "allows all users with moderator role" do |
67 | | - expect(policy).to permit(moderator, model) |
| 65 | + expect(policy).to permit(moderator, object) |
68 | 66 | end |
69 | 67 |
|
70 | 68 | it "denies users with contributor role" do |
71 | | - expect(policy).not_to permit(contributor, model) |
| 69 | + expect(policy).not_to permit(contributor, object) |
72 | 70 | end |
73 | 71 |
|
74 | 72 | it "allows users with granted edit permission" do |
75 | | - model.grant_permission_to "edit", member |
76 | | - expect(policy).to permit(member, model) |
| 73 | + object.grant_permission_to "edit", member |
| 74 | + expect(policy).to permit(member, object) |
77 | 75 | end |
78 | 76 |
|
79 | 77 | it "allows users with granted owner permission" do |
80 | | - model.grant_permission_to "own", member |
81 | | - expect(policy).to permit(member, model) |
| 78 | + object.grant_permission_to "own", member |
| 79 | + expect(policy).to permit(member, object) |
82 | 80 | end |
83 | 81 |
|
84 | | - it "denies unknown users on public models" do |
85 | | - model.grant_permission_to "view", nil |
86 | | - expect(policy).not_to permit(nil, model) |
| 82 | + it "denies unknown users on public objects" do |
| 83 | + object.grant_permission_to "view", nil |
| 84 | + expect(policy).not_to permit(nil, object) |
87 | 85 | end |
88 | 86 | end |
89 | 87 | end |
0 commit comments