Merge remote-tracking branch 'upstream/pull/2072'
[rails.git] / test / abilities / capability_test.rb
1 # frozen_string_literal: true
2
3 require "test_helper"
4
5 class CapabilityTest < ActiveSupport::TestCase
6   def tokens(*toks)
7     AccessToken.new do |token|
8       toks.each do |t|
9         token.public_send("#{t}=", true)
10       end
11     end
12   end
13 end
14
15 class ChangesetCommentCapabilityTest < CapabilityTest
16   test "as a normal user with permissionless token" do
17     token = create(:access_token)
18     capability = Capability.new token
19
20     [:create, :destroy, :restore].each do |action|
21       assert capability.cannot? action, ChangesetComment
22     end
23   end
24
25   test "as a normal user with allow_write_api token" do
26     token = create(:access_token, :allow_write_api => true)
27     capability = Capability.new token
28
29     [:destroy, :restore].each do |action|
30       assert capability.cannot? action, ChangesetComment
31     end
32
33     [:create].each do |action|
34       assert capability.can? action, ChangesetComment
35     end
36   end
37
38   test "as a moderator with permissionless token" do
39     token = create(:access_token, :user => create(:moderator_user))
40     capability = Capability.new token
41
42     [:create, :destroy, :restore].each do |action|
43       assert capability.cannot? action, ChangesetComment
44     end
45   end
46
47   test "as a moderator with allow_write_api token" do
48     token = create(:access_token, :user => create(:moderator_user), :allow_write_api => true)
49     capability = Capability.new token
50
51     [:create, :destroy, :restore].each do |action|
52       assert capability.can? action, ChangesetComment
53     end
54   end
55 end
56
57 class NoteCapabilityTest < CapabilityTest
58   test "as a normal user with permissionless token" do
59     token = create(:access_token)
60     capability = Capability.new token
61
62     [:create, :comment, :close, :reopen, :destroy].each do |action|
63       assert capability.cannot? action, Note
64     end
65   end
66
67   test "as a normal user with allow_write_notes token" do
68     token = create(:access_token, :allow_write_notes => true)
69     capability = Capability.new token
70
71     [:destroy].each do |action|
72       assert capability.cannot? action, Note
73     end
74
75     [:create, :comment, :close, :reopen].each do |action|
76       assert capability.can? action, Note
77     end
78   end
79
80   test "as a moderator with permissionless token" do
81     token = create(:access_token, :user => create(:moderator_user))
82     capability = Capability.new token
83
84     [:destroy].each do |action|
85       assert capability.cannot? action, Note
86     end
87   end
88
89   test "as a moderator with allow_write_notes token" do
90     token = create(:access_token, :user => create(:moderator_user), :allow_write_notes => true)
91     capability = Capability.new token
92
93     [:destroy].each do |action|
94       assert capability.can? action, Note
95     end
96   end
97 end
98
99 class UserCapabilityTest < CapabilityTest
100   test "user preferences" do
101     # a user with no tokens
102     capability = Capability.new nil
103     [:read, :read_one, :update, :update_one, :delete_one].each do |act|
104       assert capability.cannot? act, UserPreference
105     end
106
107     # A user with empty tokens
108     capability = Capability.new tokens
109
110     [:read, :read_one, :update, :update_one, :delete_one].each do |act|
111       assert capability.cannot? act, UserPreference
112     end
113
114     capability = Capability.new tokens(:allow_read_prefs)
115
116     [:update, :update_one, :delete_one].each do |act|
117       assert capability.cannot? act, UserPreference
118     end
119
120     [:read, :read_one].each do |act|
121       assert capability.can? act, UserPreference
122     end
123
124     capability = Capability.new tokens(:allow_write_prefs)
125     [:read, :read_one].each do |act|
126       assert capability.cannot? act, UserPreference
127     end
128
129     [:update, :update_one, :delete_one].each do |act|
130       assert capability.can? act, UserPreference
131     end
132   end
133 end