Add RSpec suite with WebMock: core, OAuth, pagination, and resource behavior
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
RSpec.describe Fiken::Client do
|
||||
subject(:client) { described_class.new(token: "test-token") }
|
||||
|
||||
describe "#initialize" do
|
||||
it "raises without a token" do
|
||||
expect { described_class.new }.to raise_error(ArgumentError)
|
||||
end
|
||||
|
||||
it "accepts an access_token alias" do
|
||||
expect { described_class.new(access_token: "x") }.not_to raise_error
|
||||
end
|
||||
end
|
||||
|
||||
describe "#user" do
|
||||
it "GETs /user with a bearer token and wraps the response" do
|
||||
stub_fiken(:get, "/user", body: { "name" => "Runar", "email" => "runar@rin.no" })
|
||||
|
||||
user = client.user
|
||||
|
||||
expect(user.name).to eq("Runar")
|
||||
expect(a_request(:get, "#{API_BASE}/user")
|
||||
.with(headers: { "Authorization" => "Bearer test-token" })).to have_been_made
|
||||
end
|
||||
end
|
||||
|
||||
describe "#companies" do
|
||||
it "lists companies" do
|
||||
stub_fiken(:get, "/companies", body: [{ "slug" => "acme", "name" => "Acme AS" }])
|
||||
|
||||
companies = client.companies.list
|
||||
|
||||
expect(companies.map(&:slug)).to eq(["acme"])
|
||||
end
|
||||
|
||||
it "finds a single company by slug" do
|
||||
stub_fiken(:get, "/companies/acme", body: { "slug" => "acme", "name" => "Acme AS" })
|
||||
|
||||
expect(client.company("acme").name).to eq("Acme AS")
|
||||
end
|
||||
end
|
||||
|
||||
describe "error mapping" do
|
||||
it "raises Unauthorized on 401" do
|
||||
stub_fiken(:get, "/user", status: 401, body: { "message" => "Bad token" })
|
||||
|
||||
expect { client.user }.to raise_error(Fiken::Unauthorized, "Bad token")
|
||||
end
|
||||
|
||||
it "raises NotFound on 404" do
|
||||
stub_fiken(:get, "/companies/missing", status: 404)
|
||||
|
||||
expect { client.company("missing") }.to raise_error(Fiken::NotFound)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user