diff --git a/lib/mobilize_america_client/client.rb b/lib/mobilize_america_client/client.rb index d1aa4ac..e1af6e2 100644 --- a/lib/mobilize_america_client/client.rb +++ b/lib/mobilize_america_client/client.rb @@ -2,6 +2,7 @@ require 'mobilize_america_client/client/events' require 'mobilize_america_client/client/organizations' require 'mobilize_america_client/request' +require 'mobilize_america_client/errors' module MobilizeAmericaClient class Client diff --git a/lib/mobilize_america_client/errors.rb b/lib/mobilize_america_client/errors.rb new file mode 100644 index 0000000..fa9d56f --- /dev/null +++ b/lib/mobilize_america_client/errors.rb @@ -0,0 +1,4 @@ +module MobilizeAmericaClient + class NotFoundError < StandardError + end +end diff --git a/lib/mobilize_america_client/request.rb b/lib/mobilize_america_client/request.rb index 9e68f13..e053f64 100644 --- a/lib/mobilize_america_client/request.rb +++ b/lib/mobilize_america_client/request.rb @@ -28,6 +28,10 @@ def request(method:, path:, params: {}, body: {}) req.body = ::JSON.generate(body) unless body.empty? end + if response.status == 404 + raise MobilizeAmericaClient::NotFoundError + end + JSON.parse(response.body) end end diff --git a/spec/client/events_spec.rb b/spec/client/events_spec.rb index 4041c13..3609ce3 100644 --- a/spec/client/events_spec.rb +++ b/spec/client/events_spec.rb @@ -12,6 +12,12 @@ let(:events_url) { "#{base_url}/organizations/#{org_id}/events" } let(:response) { {'data' => [{'id' => 1, 'description' => 'event 1'}, {'id' => 2, 'description' => 'event 2'}]} } + it 'should raise if response status is 404' do + stub_request(:get, events_url).with(headers: standard_headers).to_return(status: 404, body: {error: 'not found'}.to_json) + + expect { subject.organization_events(organization_id: org_id) }.to raise_error MobilizeAmericaClient::NotFoundError + end + it 'should call the endpoint and return JSON' do stub_request(:get, events_url).with(headers: standard_headers).to_return(body: response.to_json) expect(subject.organization_events(organization_id: org_id)).to eq(response)