CI / Test (pull_request) Failing after 45s
- Enqueue the expiry job and the "app connected" notification on after_commit instead of after_create, so they only fire once the (now transactional) code exchange commits - Enforce the PKCE code_challenge format (43-128 unreserved chars, S256) with model validations, not only at the controller - Drop the now-unused RsAuthorizationCode#expired? - Cover the client_id-vs-stored-client_id check Part of #254
30 lines
921 B
Ruby
30 lines
921 B
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe RsOauthManager::IssueCode do
|
|
let(:user) { create :user }
|
|
|
|
subject do
|
|
described_class.call(
|
|
user: user,
|
|
client_id: "example.com",
|
|
redirect_uri: "https://example.com",
|
|
permissions: %w(documents:rw),
|
|
code_challenge: "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM",
|
|
code_challenge_method: "S256",
|
|
expire_at: 1.month.from_now
|
|
)
|
|
end
|
|
|
|
it "creates a short-lived authorization code" do
|
|
expect { subject }.to change(RsAuthorizationCode, :count).by(1)
|
|
expect(subject.code).to be_present
|
|
expect(subject.client_id).to eq("example.com")
|
|
expect(subject.permissions).to eq(%w(documents:rw))
|
|
expect(subject.code_challenge).to eq("E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM")
|
|
end
|
|
|
|
it "does not create a remote storage authorization" do
|
|
expect { subject }.not_to change(RemoteStorageAuthorization, :count)
|
|
end
|
|
end
|