# frozen_string_literal: true
require "spec_helper"
feature "Authorization Code Flow Errors" do
let(:client_params) { {} }
background do
default_scopes_exist :default
config_is_set(:authenticate_resource_owner) { User.first || redirect_to("/sign_in") }
client_exists client_params
create_resource_owner
sign_in
end
after do
access_grant_should_not_exist
end
context "with a client trying to xss resource owner" do
let(:client_name) { "
XSS
" }
let(:client_params) { { name: client_name } }
scenario "resource owner visit authorization endpoint" do
visit authorization_endpoint_url(client: @client)
expect(page).not_to have_css("#xss")
end
end
context "when access was denied" do
scenario "redirects with error" do
visit authorization_endpoint_url(client: @client)
click_on "Deny"
i_should_be_on_client_callback @client
url_should_not_have_param "code"
url_should_have_param "error", "access_denied"
url_should_have_param "error_description", translated_error_message(:access_denied)
end
scenario "redirects with state parameter" do
visit authorization_endpoint_url(client: @client, state: "return-this")
click_on "Deny"
i_should_be_on_client_callback @client
url_should_not_have_param "code"
url_should_have_param "state", "return-this"
end
end
end
describe "Authorization Code Flow Errors", "after authorization" do
before do
client_exists
create_resource_owner
authorization_code_exists application: @client,
resource_owner_id: @resource_owner.id,
resource_owner_type: @resource_owner.class.name
end
it "returns :invalid_grant error when posting an already revoked grant code" do
# First successful request
post token_endpoint_url(code: @authorization.token, client: @client)
# Second attempt with same token
expect do
post token_endpoint_url(code: @authorization.token, client: @client)
end.to_not(change { Doorkeeper::AccessToken.count })
should_not_have_json "access_token"
should_have_json "error", "invalid_grant"
should_have_json "error_description", translated_error_message("invalid_grant")
end
it "returns :invalid_grant error for invalid grant code" do
post token_endpoint_url(code: "invalid", client: @client)
access_token_should_not_exist
should_not_have_json "access_token"
should_have_json "error", "invalid_grant"
should_have_json "error_description", translated_error_message("invalid_grant")
end
end