Merge remote-tracking branch 'upstream/pull/2073'
[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 UserCapabilityTest < CapabilityTest
58   test "user preferences" do
59     # a user with no tokens
60     capability = Capability.new nil
61     [:read, :read_one, :update, :update_one, :delete_one].each do |act|
62       assert capability.cannot? act, UserPreference
63     end
64
65     # A user with empty tokens
66     capability = Capability.new tokens
67
68     [:read, :read_one, :update, :update_one, :delete_one].each do |act|
69       assert capability.cannot? act, UserPreference
70     end
71
72     capability = Capability.new tokens(:allow_read_prefs)
73
74     [:update, :update_one, :delete_one].each do |act|
75       assert capability.cannot? act, UserPreference
76     end
77
78     [:read, :read_one].each do |act|
79       assert capability.can? act, UserPreference
80     end
81
82     capability = Capability.new tokens(:allow_write_prefs)
83     [:read, :read_one].each do |act|
84       assert capability.cannot? act, UserPreference
85     end
86
87     [:update, :update_one, :delete_one].each do |act|
88       assert capability.can? act, UserPreference
89     end
90   end
91 end