debian-mirror-gitlab/doorkeeper/spec/lib/oauth/base_request_spec.rb
2020-01-04 02:51:38 +05:30

155 lines
4 KiB
Ruby

require 'spec_helper_integration'
module Doorkeeper::OAuth
describe BaseRequest do
let(:access_token) do
double :access_token,
token: "some-token",
expires_in: "3600",
expires_in_seconds: "300",
scopes_string: "two scopes",
refresh_token: "some-refresh-token",
token_type: "bearer",
created_at: 0
end
let(:client) { double :client, id: '1' }
let(:scopes_array) { %w[public write] }
let(:server) do
double :server,
access_token_expires_in: 100,
custom_access_token_expires_in: ->(_) { nil },
refresh_token_enabled?: false
end
subject do
BaseRequest.new
end
describe "#authorize" do
before do
allow(subject).to receive(:access_token).and_return(access_token)
end
it "validates itself" do
expect(subject).to receive(:validate).once
subject.authorize
end
context "valid" do
before do
allow(subject).to receive(:valid?).and_return(true)
end
it "calls callback methods" do
expect(subject).to receive(:before_successful_response).once
expect(subject).to receive(:after_successful_response).once
subject.authorize
end
it "returns a TokenResponse object" do
result = subject.authorize
expect(result).to be_an_instance_of(TokenResponse)
expect(result.body).to eq(
TokenResponse.new(access_token).body
)
end
end
context "invalid" do
before do
allow(subject).to receive(:valid?).and_return(false)
allow(subject).to receive(:error).and_return("server_error")
allow(subject).to receive(:state).and_return("hello")
end
it "returns an ErrorResponse object" do
error_description = I18n.translate(
"server_error",
scope: %i[doorkeeper errors messages]
)
result = subject.authorize
expect(result).to be_an_instance_of(ErrorResponse)
expect(result.body).to eq(
error: "server_error",
error_description: error_description,
state: "hello"
)
end
end
end
describe "#default_scopes" do
it "delegates to the server" do
expect(subject).to receive(:server).and_return(server).once
expect(server).to receive(:default_scopes).once
subject.default_scopes
end
end
describe "#find_or_create_access_token" do
it "returns an instance of AccessToken" do
result = subject.find_or_create_access_token(
client,
"1",
"public",
server
)
expect(result).to be_an_instance_of(Doorkeeper::AccessToken)
end
end
describe "#scopes" do
context "@original_scopes is present" do
before do
subject.instance_variable_set(:@original_scopes, "public write")
end
it "returns array of @original_scopes" do
result = subject.scopes
expect(result).to eq(scopes_array)
end
end
context "@original_scopes is not present" do
before do
subject.instance_variable_set(:@original_scopes, "")
end
it "calls #default_scopes" do
allow(subject).to receive(:server).and_return(server).once
allow(server).to receive(:default_scopes).and_return(scopes_array).once
result = subject.scopes
expect(result).to eq(scopes_array)
end
end
end
describe "#valid?" do
context "error is nil" do
it "returns true" do
allow(subject).to receive(:error).and_return(nil).once
expect(subject.valid?).to eq(true)
end
end
context "error is not nil" do
it "returns false" do
allow(subject).to receive(:error).and_return(Object.new).once
expect(subject.valid?).to eq(false)
end
end
end
end
end