Files
openfoodnetwork/spec/requests/omniauth_callbacks_controller_spec.rb
Maikel Linke dcb6f4676d Remove all unnecessary spec_helper require statements
The `.rspec` file is doing this for us.
2026-01-21 12:35:34 +11:00

65 lines
1.9 KiB
Ruby

# frozen_string_literal: true
# Devise calls OmniauthCallbacksController for OpenID Connect callbacks.
RSpec.describe '/user/spree_user/auth/openid_connect/callback' do
include AuthenticationHelper
let(:user) { create(:user) }
let(:params) { { code: 'code123' } }
before do
OmniAuth.config.test_mode = true
login_as user
end
def request!
post(self.class.top_level_description, params:)
end
context 'when the omniauth setup is returning with an authorization' do
# The auth hash data has been observed by connecting to the Keycloak server
# https://login.lescommuns.org/.
before do
OmniAuth.config.mock_auth[:openid_connect] = OmniAuth::AuthHash.new(
JSON.parse(file_fixture("omniauth.auth.json").read)
)
end
it 'is successful' do
expect { request! }.to change { OidcAccount.count }.by(1)
account = OidcAccount.last
expect(account.provider).to eq "openid_connect"
expect(account.uid).to eq "ofn@example.com"
expect(response).to have_http_status(:found)
end
context 'when OIDC account already linked with a different user' do
before do
create(:user, email: "ofn@elsewhere.com")
.create_oidc_account!(uid: "ofn@example.com")
end
it 'fails with error message' do
expect { request! }.not_to change { OidcAccount.count }
expect(response).to have_http_status(:found)
expect(flash[:error]).to match "ofn@example.com is already associated with another account"
end
end
end
context 'when the omniauth openid_connect is mocked with an error' do
before do
OmniAuth.config.mock_auth[:openid_connect] = :invalid_credentials
end
it 'fails with bad auth data' do
expect { request! }.not_to change { OidcAccount.count }
expect(response).to have_http_status(:found)
expect(flash[:error]).to match "Could not sign in"
end
end
end