gitlab-org--gitlab-foss/spec/requests/oauth/authorizations_controller_s...

77 lines
2.2 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Oauth::AuthorizationsController do
let_it_be(:user) { create(:user) }
let_it_be(:application) { create(:oauth_application, redirect_uri: 'custom://test') }
let_it_be(:oauth_authorization_path) do
Gitlab::Routing.url_helpers.oauth_authorization_url(
client_id: application.uid,
response_type: 'code',
scope: application.scopes,
redirect_uri: application.redirect_uri,
state: SecureRandom.hex
)
end
before do
sign_in(user)
end
describe 'GET #new' do
context 'when application redirect URI has a custom scheme' do
context 'when CSP is disabled' do
before do
allow_next_instance_of(ActionDispatch::Request) do |instance|
allow(instance).to receive(:content_security_policy).and_return(nil)
end
end
it 'does not add a CSP' do
get oauth_authorization_path
expect(response.headers['Content-Security-Policy']).to be_nil
end
end
context 'when CSP contains form-action' do
before do
csp = ActionDispatch::ContentSecurityPolicy.new do |p|
p.form_action "'self'"
end
allow_next_instance_of(ActionDispatch::Request) do |instance|
allow(instance).to receive(:content_security_policy).and_return(csp)
end
end
it 'adds custom scheme to CSP form-action' do
get oauth_authorization_path
expect(response.headers['Content-Security-Policy']).to include("form-action 'self' custom:")
end
end
context 'when CSP does not contain form-action' do
before do
csp = ActionDispatch::ContentSecurityPolicy.new do |p|
p.script_src :self, 'https://some-cdn.test'
p.style_src :self, 'https://some-cdn.test'
end
allow_next_instance_of(ActionDispatch::Request) do |instance|
allow(instance).to receive(:content_security_policy).and_return(csp)
end
end
it 'does not add form-action to the CSP' do
get oauth_authorization_path
expect(response.headers['Content-Security-Policy']).not_to include('form-action')
end
end
end
end
end