Refactor External credentials request spec
This commit is contained in:
parent
ad19b532a9
commit
6e3f32825f
5 changed files with 324 additions and 363 deletions
|
@ -1,5 +1,19 @@
|
|||
FactoryBot.define do
|
||||
factory :external_credential do
|
||||
credentials { { 'application_id' => '1234', 'application_secret' => 'secret' } }
|
||||
factory :facebook_credential do
|
||||
name 'facebook'
|
||||
credentials { { application_id: 123, application_secret: 123 } }
|
||||
end
|
||||
|
||||
factory :twitter_credential do
|
||||
name 'twitter'
|
||||
|
||||
credentials do
|
||||
{ consumer_key: 123,
|
||||
consumer_secret: 123,
|
||||
oauth_token: 123,
|
||||
oauth_token_secret: 123 }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,228 +0,0 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe 'ExternalCredentials', type: :request do
|
||||
|
||||
let(:admin_user) do
|
||||
create(:admin_user)
|
||||
end
|
||||
|
||||
describe 'request handling' do
|
||||
|
||||
it 'does external_credential index with nobody' do
|
||||
get '/api/v1/external_credentials', as: :json
|
||||
expect(response).to have_http_status(401)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('authentication failed')
|
||||
end
|
||||
|
||||
it 'does external_credential app_verify with nobody' do
|
||||
post '/api/v1/external_credentials/facebook/app_verify', as: :json
|
||||
expect(response).to have_http_status(401)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('authentication failed')
|
||||
end
|
||||
|
||||
it 'does link_account app_verify with nobody' do
|
||||
get '/api/v1/external_credentials/facebook/link_account', as: :json
|
||||
expect(response).to have_http_status(401)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('authentication failed')
|
||||
end
|
||||
|
||||
it 'does external_credential callback with nobody' do
|
||||
get '/api/v1/external_credentials/facebook/callback', as: :json
|
||||
expect(response).to have_http_status(401)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('authentication failed')
|
||||
end
|
||||
|
||||
it 'does external_credential index with admin' do
|
||||
authenticated_as(admin_user)
|
||||
get '/api/v1/external_credentials', as: :json
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_a_kind_of(Array)
|
||||
expect(json_response).to be_truthy
|
||||
expect(json_response.count).to eq(0)
|
||||
|
||||
get '/api/v1/external_credentials?expand=true', as: :json
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_a_kind_of(Array)
|
||||
expect(json_response).to be_truthy
|
||||
expect(json_response.count).to eq(0)
|
||||
end
|
||||
|
||||
it 'does external_credential app_verify with admin - facebook' do
|
||||
authenticated_as(admin_user)
|
||||
post '/api/v1/external_credentials/facebook/app_verify', as: :json
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('No application_id param!')
|
||||
|
||||
VCR.use_cassette('request/external_credentials/facebook/app_verify_invalid_credentials_with_not_created') do
|
||||
post '/api/v1/external_credentials/facebook/app_verify', params: { application_id: 123, application_secret: 123 }, as: :json
|
||||
end
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('type: OAuthException, code: 101, message: Error validating application. Cannot get application info due to a system error. [HTTP 400]')
|
||||
|
||||
create(:external_credential, { name: 'facebook', credentials: { application_id: 123, application_secret: 123 } })
|
||||
VCR.use_cassette('request/external_credentials/facebook/app_verify_invalid_credentials_with_created') do
|
||||
post '/api/v1/external_credentials/facebook/app_verify', as: :json
|
||||
end
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('type: OAuthException, code: 101, message: Error validating application. Cannot get application info due to a system error. [HTTP 400]')
|
||||
end
|
||||
|
||||
it 'does external_credential app_verify with admin - twitter' do
|
||||
authenticated_as(admin_user)
|
||||
post '/api/v1/external_credentials/twitter/app_verify', as: :json
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('No consumer_key param!')
|
||||
|
||||
VCR.use_cassette('request/external_credentials/twitter/app_verify_invalid_credentials_with_not_created') do
|
||||
post '/api/v1/external_credentials/twitter/app_verify', params: { consumer_key: 123, consumer_secret: 123, oauth_token: 123, oauth_token_secret: 123 }, as: :json
|
||||
end
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('401 Authorization Required')
|
||||
|
||||
create(:external_credential, { name: 'twitter', credentials: { consumer_key: 123, consumer_secret: 123, oauth_token: 123, oauth_token_secret: 123 } })
|
||||
VCR.use_cassette('request/external_credentials/twitter/app_verify_invalid_credentials_with_created') do
|
||||
post '/api/v1/external_credentials/twitter/app_verify', as: :json
|
||||
end
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('401 Authorization Required')
|
||||
end
|
||||
|
||||
it 'does link_account app_verify with admin - facebook' do
|
||||
authenticated_as(admin_user)
|
||||
get '/api/v1/external_credentials/facebook/link_account', as: :json
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('No facebook app configured!')
|
||||
|
||||
get '/api/v1/external_credentials/facebook/link_account', params: { application_id: 123, application_secret: 123 }, as: :json
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('No facebook app configured!')
|
||||
|
||||
create(:external_credential, { name: 'facebook', credentials: { application_id: 123, application_secret: 123 } })
|
||||
|
||||
VCR.use_cassette('request/external_credentials/facebook/link_account_with_invalid_credential') do
|
||||
get '/api/v1/external_credentials/facebook/link_account', as: :json
|
||||
end
|
||||
expect(response).to have_http_status(500)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('type: OAuthException, code: 101, message: Error validating application. Cannot get application info due to a system error. [HTTP 400]')
|
||||
end
|
||||
|
||||
it 'does link_account app_verify with admin - twitter' do
|
||||
authenticated_as(admin_user)
|
||||
get '/api/v1/external_credentials/twitter/link_account', as: :json
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('No twitter app configured!')
|
||||
|
||||
get '/api/v1/external_credentials/twitter/link_account', params: { consumer_key: 123, consumer_secret: 123, oauth_token: 123, oauth_token_secret: 123 }, as: :json
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('No twitter app configured!')
|
||||
|
||||
create(:external_credential, { name: 'twitter', credentials: { consumer_key: 123, consumer_secret: 123, oauth_token: 123, oauth_token_secret: 123 } })
|
||||
VCR.use_cassette('request/external_credentials/twitter/link_account_with_invalid_credential') do
|
||||
get '/api/v1/external_credentials/twitter/link_account', as: :json
|
||||
end
|
||||
expect(response).to have_http_status(500)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('401 Authorization Required')
|
||||
end
|
||||
|
||||
it 'does external_credential callback with admin - facebook' do
|
||||
authenticated_as(admin_user)
|
||||
get '/api/v1/external_credentials/facebook/callback', as: :json
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('No facebook app configured!')
|
||||
|
||||
get '/api/v1/external_credentials/facebook/callback', params: { application_id: 123, application_secret: 123 }, as: :json
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('No facebook app configured!')
|
||||
|
||||
create(:external_credential, { name: 'facebook', credentials: { application_id: 123, application_secret: 123 } })
|
||||
VCR.use_cassette('request/external_credentials/facebook/callback_invalid_credentials') do
|
||||
get '/api/v1/external_credentials/facebook/callback', as: :json
|
||||
end
|
||||
expect(response).to have_http_status(500)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('type: OAuthException, code: 101, message: Error validating application. Cannot get application info due to a system error. [HTTP 400]')
|
||||
end
|
||||
|
||||
it 'does external_credential callback with admin - twitter' do
|
||||
authenticated_as(admin_user)
|
||||
get '/api/v1/external_credentials/twitter/callback', as: :json
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('No twitter app configured!')
|
||||
|
||||
get '/api/v1/external_credentials/twitter/callback', params: { consumer_key: 123, consumer_secret: 123 }, as: :json
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('No twitter app configured!')
|
||||
|
||||
create(:external_credential, { name: 'twitter', credentials: { consumer_key: 123, consumer_secret: 123 } })
|
||||
get '/api/v1/external_credentials/twitter/callback', as: :json
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('No request_token for session found!')
|
||||
|
||||
#request.session[:oauth_token] = 'some_token'
|
||||
#get '/api/v1/external_credentials/twitter/callback', as: :json
|
||||
#expect(response).to have_http_status(422)
|
||||
#expect(json_response).to be_a_kind_of(Hash)
|
||||
#expect(json_response['error']).to eq('Invalid oauth_token given!')
|
||||
end
|
||||
|
||||
it 'does external_credential app_verify with admin and different permissions' do
|
||||
authenticated_as(admin_user)
|
||||
|
||||
create(:external_credential, { name: 'twitter', credentials: { consumer_key: 123, consumer_secret: 123 } })
|
||||
VCR.use_cassette('request/external_credentials/twitter/app_verify_twitter') do
|
||||
post '/api/v1/external_credentials/twitter/app_verify', as: :json
|
||||
end
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('401 Authorization Required')
|
||||
|
||||
permission = Permission.find_by(name: 'admin.channel_twitter')
|
||||
permission.active = false
|
||||
permission.save!
|
||||
|
||||
post '/api/v1/external_credentials/twitter/app_verify', as: :json
|
||||
expect(response).to have_http_status(401)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('Not authorized (user)!')
|
||||
|
||||
create(:external_credential, { name: 'facebook', credentials: { application_id: 123, application_secret: 123 } })
|
||||
VCR.use_cassette('request/external_credentials/facebook/app_verify_facebook') do
|
||||
post '/api/v1/external_credentials/facebook/app_verify', as: :json
|
||||
end
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('type: OAuthException, code: 101, message: Error validating application. Cannot get application info due to a system error. [HTTP 400]')
|
||||
|
||||
permission = Permission.find_by(name: 'admin.channel_facebook')
|
||||
permission.active = false
|
||||
permission.save!
|
||||
|
||||
post '/api/v1/external_credentials/facebook/app_verify', as: :json
|
||||
expect(response).to have_http_status(401)
|
||||
expect(json_response).to be_a_kind_of(Hash)
|
||||
expect(json_response['error']).to eq('Not authorized (user)!')
|
||||
end
|
||||
|
||||
end
|
||||
end
|
309
spec/requests/external_credentials_spec.rb
Normal file
309
spec/requests/external_credentials_spec.rb
Normal file
|
@ -0,0 +1,309 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe 'External Credentials', type: :request do
|
||||
let(:admin_user) { create(:admin_user) }
|
||||
|
||||
context 'without authentication' do
|
||||
describe '#index' do
|
||||
it 'returns 401 unauthorized' do
|
||||
get '/api/v1/external_credentials', as: :json
|
||||
|
||||
expect(response).to have_http_status(401)
|
||||
expect(json_response).to include('error' => 'authentication failed')
|
||||
end
|
||||
end
|
||||
|
||||
describe '#app_verify' do
|
||||
it 'returns 401 unauthorized' do
|
||||
post '/api/v1/external_credentials/facebook/app_verify', as: :json
|
||||
|
||||
expect(response).to have_http_status(401)
|
||||
expect(json_response).to include('error' => 'authentication failed')
|
||||
end
|
||||
end
|
||||
|
||||
describe '#link_account' do
|
||||
it 'returns 401 unauthorized' do
|
||||
get '/api/v1/external_credentials/facebook/link_account', as: :json
|
||||
|
||||
expect(response).to have_http_status(401)
|
||||
expect(json_response).to include('error' => 'authentication failed')
|
||||
end
|
||||
end
|
||||
|
||||
describe '#callback' do
|
||||
it 'returns 401 unauthorized' do
|
||||
get '/api/v1/external_credentials/facebook/callback', as: :json
|
||||
|
||||
expect(response).to have_http_status(401)
|
||||
expect(json_response).to include('error' => 'authentication failed')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'authenticated as admin' do
|
||||
before { authenticated_as(admin_user) }
|
||||
|
||||
describe '#index' do
|
||||
it 'responds with an array of ExternalCredential records' do
|
||||
get '/api/v1/external_credentials', as: :json
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to eq([])
|
||||
end
|
||||
|
||||
context 'with expand=true URL parameters' do
|
||||
it 'responds with an array of ExternalCredential records and their association data' do
|
||||
get '/api/v1/external_credentials?expand=true', as: :json
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to eq([])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'for Facebook' do
|
||||
let(:invalid_credentials) do
|
||||
{ application_id: 123, application_secret: 123 }
|
||||
end
|
||||
|
||||
describe '#app_verify' do
|
||||
describe 'failure cases' do
|
||||
context 'when permission for Facebook channel is deactivated' do
|
||||
before { Permission.find_by(name: 'admin.channel_facebook').update(active: false) }
|
||||
|
||||
it 'returns 401 unauthorized with internal (Zammad) error' do
|
||||
post '/api/v1/external_credentials/facebook/app_verify', as: :json
|
||||
expect(response).to have_http_status(401)
|
||||
expect(json_response).to include('error' => 'Not authorized (user)!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with no credentials' do
|
||||
it 'returns 200 with internal (Zammad) error' do
|
||||
post '/api/v1/external_credentials/facebook/app_verify', as: :json
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to include('error' => 'No application_id param!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid credentials, via request params' do
|
||||
it 'returns 200 with remote (Facebook auth) error' do
|
||||
VCR.use_cassette('request/external_credentials/facebook/app_verify_invalid_credentials_with_not_created') do
|
||||
post '/api/v1/external_credentials/facebook/app_verify', params: invalid_credentials, as: :json
|
||||
end
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to include('error' => 'type: OAuthException, code: 101, message: Error validating application. Cannot get application info due to a system error. [HTTP 400]')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid credentials, via ExternalCredential record' do
|
||||
before { create(:facebook_credential, credentials: invalid_credentials) }
|
||||
|
||||
it 'returns 200 with remote (Facebook auth) error' do
|
||||
VCR.use_cassette('request/external_credentials/facebook/app_verify_invalid_credentials_with_created') do
|
||||
post '/api/v1/external_credentials/facebook/app_verify', as: :json
|
||||
end
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to include('error' => 'type: OAuthException, code: 101, message: Error validating application. Cannot get application info due to a system error. [HTTP 400]')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#link_account' do
|
||||
describe 'failure cases' do
|
||||
context 'with no credentials' do
|
||||
it 'returns 422 unprocessable entity with internal (Zammad) error' do
|
||||
get '/api/v1/external_credentials/facebook/link_account', as: :json
|
||||
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to include('error' => 'No facebook app configured!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid credentials, via request params' do
|
||||
it 'returns 422 unprocessable entity with internal (Zammad) error' do
|
||||
get '/api/v1/external_credentials/facebook/link_account', params: invalid_credentials, as: :json
|
||||
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to include('error' => 'No facebook app configured!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid credentials, via ExternalCredential record' do
|
||||
before { create(:facebook_credential, credentials: invalid_credentials) }
|
||||
|
||||
it 'returns 500 with remote (Facebook auth) error' do
|
||||
VCR.use_cassette('request/external_credentials/facebook/link_account_with_invalid_credential') do
|
||||
get '/api/v1/external_credentials/facebook/link_account', as: :json
|
||||
end
|
||||
|
||||
expect(response).to have_http_status(500)
|
||||
expect(json_response).to include('error' => 'type: OAuthException, code: 101, message: Error validating application. Cannot get application info due to a system error. [HTTP 400]')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#callback' do
|
||||
describe 'failure cases' do
|
||||
context 'with no credentials' do
|
||||
it 'returns 422 unprocessable entity with internal (Zammad) error' do
|
||||
get '/api/v1/external_credentials/facebook/callback', as: :json
|
||||
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to include('error' => 'No facebook app configured!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid credentials, via request params' do
|
||||
it 'returns 422 unprocessable entity with internal (Zammad) error' do
|
||||
get '/api/v1/external_credentials/facebook/callback', params: invalid_credentials, as: :json
|
||||
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to include('error' => 'No facebook app configured!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid credentials, via ExternalCredential record' do
|
||||
before { create(:facebook_credential, credentials: invalid_credentials) }
|
||||
|
||||
it 'returns 500 with remote (Facebook auth) error' do
|
||||
VCR.use_cassette('request/external_credentials/facebook/callback_invalid_credentials') do
|
||||
get '/api/v1/external_credentials/facebook/callback', as: :json
|
||||
end
|
||||
|
||||
expect(response).to have_http_status(500)
|
||||
expect(json_response).to include('error' => 'type: OAuthException, code: 101, message: Error validating application. Cannot get application info due to a system error. [HTTP 400]')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'for Twitter' do
|
||||
let(:invalid_credentials) do
|
||||
{ consumer_key: 123, consumer_secret: 123, oauth_token: 123, oauth_token_secret: 123 }
|
||||
end
|
||||
|
||||
describe '#app_verify' do
|
||||
describe 'failure cases' do
|
||||
context 'when permission for Twitter channel is deactivated' do
|
||||
before { Permission.find_by(name: 'admin.channel_twitter').update(active: false) }
|
||||
|
||||
it 'returns 401 unauthorized with internal (Zammad) error' do
|
||||
post '/api/v1/external_credentials/twitter/app_verify', as: :json
|
||||
expect(response).to have_http_status(401)
|
||||
expect(json_response).to include('error' => 'Not authorized (user)!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with no credentials' do
|
||||
it 'returns 200 with internal (Zammad) error' do
|
||||
post '/api/v1/external_credentials/twitter/app_verify', as: :json
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to include('error' => 'No consumer_key param!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid credentials, via request params' do
|
||||
it 'returns 200 with remote (Twitter auth) error' do
|
||||
VCR.use_cassette('request/external_credentials/twitter/app_verify_invalid_credentials_with_not_created') do
|
||||
post '/api/v1/external_credentials/twitter/app_verify', params: invalid_credentials, as: :json
|
||||
end
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to include('error' => '401 Authorization Required')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid credentials, via existing ExternalCredential record' do
|
||||
before { create(:twitter_credential, credentials: invalid_credentials) }
|
||||
|
||||
it 'returns 200 with remote (Twitter auth) error' do
|
||||
VCR.use_cassette('request/external_credentials/twitter/app_verify_invalid_credentials_with_created') do
|
||||
post '/api/v1/external_credentials/twitter/app_verify', as: :json
|
||||
end
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to include('error' => '401 Authorization Required')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#link_account' do
|
||||
describe 'failure cases' do
|
||||
context 'with no credentials' do
|
||||
it 'returns 422 unprocessable entity with internal (Zammad) error' do
|
||||
get '/api/v1/external_credentials/twitter/link_account', as: :json
|
||||
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to include('error' => 'No twitter app configured!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid credentials, via request params' do
|
||||
it 'returns 422 unprocessable entity with internal (Zammad) error' do
|
||||
get '/api/v1/external_credentials/twitter/link_account', params: invalid_credentials, as: :json
|
||||
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to include('error' => 'No twitter app configured!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid credentials, via ExternalCredential record' do
|
||||
before { create(:twitter_credential, credentials: invalid_credentials) }
|
||||
|
||||
it 'returns 500 with remote (Twitter auth) error' do
|
||||
VCR.use_cassette('request/external_credentials/twitter/link_account_with_invalid_credential') do
|
||||
get '/api/v1/external_credentials/twitter/link_account', as: :json
|
||||
end
|
||||
|
||||
expect(response).to have_http_status(500)
|
||||
expect(json_response).to include('error' => '401 Authorization Required')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#callback' do
|
||||
describe 'failure cases' do
|
||||
context 'with no credentials' do
|
||||
it 'returns 422 unprocessable entity with internal (Zammad) error' do
|
||||
get '/api/v1/external_credentials/twitter/callback', as: :json
|
||||
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to include('error' => 'No twitter app configured!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid credentials, via request params' do
|
||||
it 'returns 422 unprocessable entity with internal (Zammad) error' do
|
||||
get '/api/v1/external_credentials/twitter/callback', params: invalid_credentials, as: :json
|
||||
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to include('error' => 'No twitter app configured!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid credentials, via ExternalCredential record' do
|
||||
before { create(:twitter_credential, credentials: invalid_credentials) }
|
||||
|
||||
it 'returns 422 unprocessable entity with internal (Zammad) error' do
|
||||
get '/api/v1/external_credentials/twitter/callback', as: :json
|
||||
|
||||
expect(response).to have_http_status(422)
|
||||
expect(json_response).to include('error' => 'No request_token for session found!')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,58 +0,0 @@
|
|||
---
|
||||
http_interactions:
|
||||
- request:
|
||||
method: post
|
||||
uri: https://graph.facebook.com/oauth/access_token
|
||||
body:
|
||||
encoding: UTF-8
|
||||
string: client_id=123&client_secret=123&grant_type=client_credentials
|
||||
headers:
|
||||
User-Agent:
|
||||
- Faraday v0.12.2
|
||||
Content-Type:
|
||||
- application/x-www-form-urlencoded
|
||||
Accept-Encoding:
|
||||
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
||||
Accept:
|
||||
- "*/*"
|
||||
response:
|
||||
status:
|
||||
code: 400
|
||||
message: Bad Request
|
||||
headers:
|
||||
Www-Authenticate:
|
||||
- OAuth "Facebook Platform" "invalid_client" "Error validating application.
|
||||
Cannot get application info due to a system error."
|
||||
Content-Type:
|
||||
- application/json; charset=UTF-8
|
||||
Facebook-Api-Version:
|
||||
- v2.8
|
||||
X-Fb-Rev:
|
||||
- '4583987'
|
||||
Access-Control-Allow-Origin:
|
||||
- "*"
|
||||
Cache-Control:
|
||||
- no-store
|
||||
X-Fb-Trace-Id:
|
||||
- Gun7Y5LdGdV
|
||||
Expires:
|
||||
- Sat, 01 Jan 2000 00:00:00 GMT
|
||||
Strict-Transport-Security:
|
||||
- max-age=15552000; preload
|
||||
Pragma:
|
||||
- no-cache
|
||||
X-Fb-Debug:
|
||||
- 6TUcLsJ9OAIw/Pb2N6TLCham7A35JxDcZGYRF8P/KOsWeJQNr7YiKMmb+PSN2yO11B/55cBLEiTzamU4ejATvQ==
|
||||
Date:
|
||||
- Fri, 30 Nov 2018 12:50:49 GMT
|
||||
Connection:
|
||||
- keep-alive
|
||||
Content-Length:
|
||||
- '166'
|
||||
body:
|
||||
encoding: UTF-8
|
||||
string: '{"error":{"message":"Error validating application. Cannot get application
|
||||
info due to a system error.","type":"OAuthException","code":101,"fbtrace_id":"Gun7Y5LdGdV"}}'
|
||||
http_version:
|
||||
recorded_at: Fri, 30 Nov 2018 12:50:49 GMT
|
||||
recorded_with: VCR 4.0.0
|
|
@ -1,76 +0,0 @@
|
|||
---
|
||||
http_interactions:
|
||||
- request:
|
||||
method: post
|
||||
uri: https://api.twitter.com/oauth/request_token
|
||||
body:
|
||||
encoding: UTF-8
|
||||
string: ''
|
||||
headers:
|
||||
Accept-Encoding:
|
||||
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
||||
Accept:
|
||||
- "*/*"
|
||||
User-Agent:
|
||||
- OAuth gem v0.5.3
|
||||
Content-Length:
|
||||
- '0'
|
||||
Authorization:
|
||||
- OAuth oauth_callback="http%3A%2F%2Fzammad.example.com%2Fapi%2Fv1%2Fexternal_credentials%2Ftwitter%2Fcallback",
|
||||
oauth_consumer_key="123", oauth_nonce="MUJuxD5pJylV4EjZdF6Z4aOa4ersvQ7X1Yn79OmI",
|
||||
oauth_signature="fahmle9Bx8I6xsXd4PdB0QjPaog%3D", oauth_signature_method="HMAC-SHA1",
|
||||
oauth_timestamp="1543582248", oauth_version="1.0"
|
||||
response:
|
||||
status:
|
||||
code: 401
|
||||
message: Authorization Required
|
||||
headers:
|
||||
Cache-Control:
|
||||
- no-cache, no-store, must-revalidate, pre-check=0, post-check=0
|
||||
Content-Disposition:
|
||||
- attachment; filename=json.json
|
||||
Content-Length:
|
||||
- '89'
|
||||
Content-Type:
|
||||
- application/json; charset=utf-8
|
||||
Date:
|
||||
- Fri, 30 Nov 2018 12:50:49 GMT
|
||||
Expires:
|
||||
- Tue, 31 Mar 1981 05:00:00 GMT
|
||||
Last-Modified:
|
||||
- Fri, 30 Nov 2018 12:50:49 GMT
|
||||
Pragma:
|
||||
- no-cache
|
||||
Server:
|
||||
- tsa_o
|
||||
Set-Cookie:
|
||||
- guest_id=v1%3A154358224907677984; Max-Age=63072000; Expires=Sun, 29 Nov 2020
|
||||
12:50:49 GMT; Path=/; Domain=.twitter.com
|
||||
- personalization_id="v1_HLys+XMhL9WX47EwRLZ9ZQ=="; Max-Age=63072000; Expires=Sun,
|
||||
29 Nov 2020 12:50:49 GMT; Path=/; Domain=.twitter.com
|
||||
Status:
|
||||
- 401 Unauthorized
|
||||
Strict-Transport-Security:
|
||||
- max-age=631138519
|
||||
Www-Authenticate:
|
||||
- OAuth realm="https://api.twitter.com"
|
||||
X-Connection-Hash:
|
||||
- b8e5026ed8e6cef6e85a0e07023a10ad
|
||||
X-Content-Type-Options:
|
||||
- nosniff
|
||||
X-Frame-Options:
|
||||
- SAMEORIGIN
|
||||
X-Response-Time:
|
||||
- '120'
|
||||
X-Transaction:
|
||||
- 002723f700aff7dd
|
||||
X-Twitter-Response-Tags:
|
||||
- BouncerCompliant
|
||||
X-Xss-Protection:
|
||||
- 1; mode=block; report=https://twitter.com/i/xss_report
|
||||
body:
|
||||
encoding: ASCII-8BIT
|
||||
string: '{"errors":[{"code":32,"message":"Could not authenticate you."}]}'
|
||||
http_version:
|
||||
recorded_at: Fri, 30 Nov 2018 12:50:49 GMT
|
||||
recorded_with: VCR 4.0.0
|
Loading…
Reference in a new issue