Clone
require 'spec_helper'
describe Locomotive::Steam::ExternalAPIService do
let(:service) { described_class.new }
describe '#consume' do
let(:url) { '' }
let(:options) { {} }
let(:code) { 200 }
let(:parsed_response) { Hash.new }
let(:response) { instance_double('Response', code: code, parsed_response: parsed_response) }
subject { service.consume(url, options) }
describe 'sets the base uri from a simple url' do
let(:url) { 'http://blog.locomotiveapp.org' }
it do
expect(service.class).to receive(:get).with('/', { base_uri: 'http://blog.locomotiveapp.org' }).and_return(response)
subject
end
describe 'wrong response (<> 200)' do
let(:code) { 500 }
it do
expect(service.class).to receive(:get).with('/', { base_uri: 'http://blog.locomotiveapp.org' }).and_return(response)
expect(subject).to eq nil
end
end
describe 'returns a collection instead of a hash' do
let(:parsed_response) { [{ 'averagePrice' => 1 }] }
it do
expect(service.class).to receive(:get).with('/', { base_uri: 'http://blog.locomotiveapp.org' }).and_return(response)
expect(subject.first['average_price']).to eq 1
end
end
end
describe 'sets the base uri from a much more complex url' do
let(:url) { 'http://free.worldweatheronline.com/feed/weather.ashx?key=secretapikey&format=json' }
it do
expect(service.class).to receive(:get).with('/feed/weather.ashx?key=secretapikey&format=json', { base_uri: 'http://free.worldweatheronline.com' }).and_return(response)
subject
end
end
describe 'sets both the base uri and the path from an url with parameters' do
let(:url) { 'http://blog.locomotiveapp.org/api/read/json?num=3' }
it do
expect(service.class).to receive(:get).with('/api/read/json?num=3', { base_uri: 'http://blog.locomotiveapp.org' }).and_return(response)
subject
end
end
describe 'sets auth credentials' do
let(:url) { 'http://blog.locomotiveapp.org' }
let(:options) { { username: 'john', password: 'foo' } }
it do
expect(service.class).to receive(:get).with('/', { base_uri: 'http://blog.locomotiveapp.org', basic_auth: { username: 'john', password: 'foo' } }).and_return(response)
subject
end
end
end
end