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