|
require 'rails_helper'
describe Agents::StubhubAgent do
let(:name) { 'Agent Name' }
let(:url) { 'http://www.stubhub.com/event/name-1-1-2014-12345' }
let(:parsed_body) { JSON.parse(body)['response']['docs'][0] }
let(:valid_params) { { 'url' => parsed_body['url'] } }
let(:body) { File.read(Rails.root.join('spec/data_fixtures/stubhub_data.json')) }
let(:stubhub_event_id) { 12345 }
let(:response_payload) { {
'url' => url,
'name' => parsed_body['seo_description_en_US'],
'date' => parsed_body['event_date_local'],
'max_price' => parsed_body['maxPrice'],
'min_price' => parsed_body['minPrice'],
'total_postings' => parsed_body['totalPostings'],
'total_tickets' => parsed_body['totalTickets'],
'venue_name' => parsed_body['venue_name']
} }
before do
stub_request(:get, "http://www.stubhub.com/listingCatalog/select/?q=%2B%20stubhubDocumentType:event%0D%0A%2B%20event_id:#{stubhub_event_id}%0D%0A&rows=10&start=0&wt=json").
to_return(:status => 200, :body => body, :headers => {})
@stubhub_agent = described_class.new(name: name, options: valid_params)
@stubhub_agent.user = users(:jane)
@stubhub_agent.save!
end
describe "#check" do
it 'should create an event' do
expect { @stubhub_agent.check }.to change { Event.count }.by(1)
end
it 'should properly parse the response' do
event = @stubhub_agent.check
expect(event.payload).to eq(response_payload)
end
end
describe "validations" do
before do
expect(@stubhub_agent).to be_valid
end
it "should require a url" do
@stubhub_agent.options['url'] = nil
expect(@stubhub_agent).not_to be_valid
end
end
describe "#working?" do
it "checks if events have been received within the expected receive period" do
expect(@stubhub_agent).not_to be_working
Agents::StubhubAgent.async_check @stubhub_agent.id
expect(@stubhub_agent.reload).to be_working
two_days_from_now = 2.days.from_now
stub(Time).now { two_days_from_now }
expect(@stubhub_agent.reload).not_to be_working
end
end
end
|