1 # frozen_string_literal: true
5 class Oauth2AuthorizationsControllerTest < ActionDispatch::IntegrationTest
7 # test all routes which lead to this controller
10 { :path => "/oauth2/authorize", :method => :get },
11 { :controller => "oauth2_authorizations", :action => "new" }
14 { :path => "/oauth2/authorize", :method => :post },
15 { :controller => "oauth2_authorizations", :action => "create" }
18 { :path => "/oauth2/authorize", :method => :delete },
19 { :controller => "oauth2_authorizations", :action => "destroy" }
22 { :path => "/oauth2/authorize/native", :method => :get },
23 { :controller => "oauth2_authorizations", :action => "show" }
28 application = create(:oauth_application, :scopes => "write_api")
30 get oauth_authorization_path(:client_id => application.uid,
31 :redirect_uri => application.redirect_uri,
32 :response_type => "code",
33 :scope => "write_api")
34 assert_redirected_to login_path(:referer => oauth_authorization_path(:client_id => application.uid,
35 :redirect_uri => application.redirect_uri,
36 :response_type => "code",
37 :scope => "write_api"))
39 session_for(create(:user))
41 get oauth_authorization_path(:client_id => application.uid,
42 :redirect_uri => application.redirect_uri,
43 :response_type => "code",
44 :scope => "write_api")
45 assert_response :success
46 assert_template "oauth2_authorizations/new"
50 application = create(:oauth_application, :scopes => "write_api", :redirect_uri => "urn:ietf:wg:oauth:2.0:oob")
52 get oauth_authorization_path(:client_id => application.uid,
53 :redirect_uri => application.redirect_uri,
54 :response_type => "code",
55 :scope => "write_api")
56 assert_redirected_to login_path(:referer => oauth_authorization_path(:client_id => application.uid,
57 :redirect_uri => application.redirect_uri,
58 :response_type => "code",
59 :scope => "write_api"))
61 session_for(create(:user))
63 get oauth_authorization_path(:client_id => application.uid,
64 :redirect_uri => application.redirect_uri,
65 :response_type => "code",
66 :scope => "write_api")
67 assert_response :success
68 assert_template "oauth2_authorizations/new"
72 application = create(:oauth_application, :scopes => "write_api")
74 session_for(create(:user))
76 get oauth_authorization_path(:client_id => application.uid,
77 :redirect_uri => "https://bad.example.com/",
78 :response_type => "code",
79 :scope => "write_api")
80 assert_response :bad_request
81 assert_template "oauth2_authorizations/error"
82 assert_select "p", "The requested redirect uri is malformed or doesn't match client redirect URI."
85 def test_new_bad_scope
86 application = create(:oauth_application, :scopes => "write_api")
88 session_for(create(:user))
90 get oauth_authorization_path(:client_id => application.uid,
91 :redirect_uri => application.redirect_uri,
92 :response_type => "code",
93 :scope => "bad_scope")
94 assert_response :bad_request
95 assert_template "oauth2_authorizations/error"
96 assert_select "p", "The requested scope is invalid, unknown, or malformed."
98 get oauth_authorization_path(:client_id => application.uid,
99 :redirect_uri => application.redirect_uri,
100 :response_type => "code",
101 :scope => "write_prefs")
102 assert_response :bad_request
103 assert_template "oauth2_authorizations/error"
104 assert_select "p", "The requested scope is invalid, unknown, or malformed."
107 def test_new_db_readonly
108 application = create(:oauth_application, :scopes => "write_api")
110 session_for(create(:user))
112 with_settings(:status => "database_readonly") do
113 get oauth_authorization_path(:client_id => application.uid,
114 :redirect_uri => application.redirect_uri,
115 :response_type => "code",
116 :scope => "write_api")
117 assert_redirected_to offline_path
122 application = create(:oauth_application, :scopes => "write_api")
124 post oauth_authorization_path(:client_id => application.uid,
125 :redirect_uri => application.redirect_uri,
126 :response_type => "code",
127 :scope => "write_api")
128 assert_response :forbidden
130 session_for(create(:user))
132 post oauth_authorization_path(:client_id => application.uid,
133 :redirect_uri => application.redirect_uri,
134 :response_type => "code",
135 :scope => "write_api")
136 assert_redirected_to(/^#{Regexp.escape(application.redirect_uri)}\?code=/)
139 def test_create_native
140 application = create(:oauth_application, :scopes => "write_api", :redirect_uri => "urn:ietf:wg:oauth:2.0:oob")
142 post oauth_authorization_path(:client_id => application.uid,
143 :redirect_uri => application.redirect_uri,
144 :response_type => "code",
145 :scope => "write_api")
146 assert_response :forbidden
148 session_for(create(:user))
150 post oauth_authorization_path(:client_id => application.uid,
151 :redirect_uri => application.redirect_uri,
152 :response_type => "code",
153 :scope => "write_api")
154 assert_response :redirect
155 assert_equal native_oauth_authorization_path, URI.parse(response.location).path
157 assert_response :success
158 assert_template "oauth2_authorizations/show"
162 application = create(:oauth_application)
164 delete oauth_authorization_path(:client_id => application.uid,
165 :redirect_uri => application.redirect_uri,
166 :response_type => "code",
167 :scope => "write_api")
168 assert_response :forbidden
170 session_for(create(:user))
172 delete oauth_authorization_path(:client_id => application.uid,
173 :redirect_uri => application.redirect_uri,
174 :response_type => "code",
175 :scope => "write_api")
176 assert_redirected_to(/^#{Regexp.escape(application.redirect_uri)}\?error=access_denied/)
179 def test_destroy_native
180 application = create(:oauth_application, :redirect_uri => "urn:ietf:wg:oauth:2.0:oob")
182 delete oauth_authorization_path(:client_id => application.uid,
183 :redirect_uri => application.redirect_uri,
184 :response_type => "code",
185 :scope => "write_api")
186 assert_response :forbidden
188 session_for(create(:user))
190 delete oauth_authorization_path(:client_id => application.uid,
191 :redirect_uri => application.redirect_uri,
192 :response_type => "code",
193 :scope => "write_api")
194 assert_response :bad_request