Skip to content

Commit

Permalink
Add worker spec for 302 response from Zendesk
Browse files Browse the repository at this point in the history
In 2015 there was a case where 302 responses from the Zendesk API were
apparently not being raised to the error notifcation service. This
commit adds a spec to cover this case.

Also:
  - Rework the existing specs to use 'context' blocks as I feel it's
  a little clearer.
  • Loading branch information
neilvanbeinum authored and Neil van Beinum committed Oct 3, 2016
1 parent a557ead commit e54297c
Showing 1 changed file with 43 additions and 22 deletions.
65 changes: 43 additions & 22 deletions spec/workers/zendesk_ticket_worker_spec.rb
Original file line number Diff line number Diff line change
@@ -1,40 +1,61 @@
require 'rails_helper'

describe ZendeskTicketWorker do
it "raises a ticket successfully" do
zendesk_has_user(email: "a@b.com", suspended: false)
context 'normal ticket creation' do
before do
zendesk_has_user(email: "a@b.com", suspended: false)
end

stub = stub_zendesk_ticket_creation("some" => "options", "requester" => { "email" => "a@b.com" })
it "creates a ticket successfully" do
stub = stub_zendesk_ticket_creation("some" => "options", "requester" => { "email" => "a@b.com" })
ZendeskTicketWorker.new.perform("some" => "options", "requester" => { "email" => "a@b.com" })

ZendeskTicketWorker.new.perform("some" => "options", "requester" => { "email" => "a@b.com" })

expect(stub).to have_been_made
expect(stub).to have_been_made
end
end

it "doesn't raise a ticket if the user is suspended" do
zendesk_has_user(email: "a@b.com", suspended: true)

ZendeskTicketWorker.new.perform("some" => "options", "requester" => { "email" => "a@b.com" })
context 'with a suspended requesting user' do
before do
zendesk_has_user(email: "a@b.com", suspended: true)
ZendeskTicketWorker.new.perform("some" => "options", "requester" => { "email" => "a@b.com" })
end

expect(a_request(:post, %r{.*/tickets/.*})).to_not have_been_made
it 'does not create a ticket' do
expect(a_request(:post, %r{.*/tickets/.*})).to_not have_been_made
end
end

it "discards the ticket if it receives a 409 response" do
zendesk_has_user(email: "a@b.com", suspended: false)
context 'with a 409 response' do
before do
zendesk_has_user(email: "a@b.com", suspended: false)
zendesk_returns_conflict
ZendeskTicketWorker.new.perform("some" => "options", "requester" => { "email" => "a@b.com" })
end

zendesk_returns_conflict
it "discards the ticket" do
expect(a_request(:post, %r{.*/tickets/.*})).to_not have_been_made
end
end

ZendeskTicketWorker.new.perform("some" => "options", "requester" => { "email" => "a@b.com" })
context 'with a 503 response' do
before do
zendesk_has_user(email: "a@b.com", suspended: false)
zendesk_is_unavailable
end

expect(a_request(:post, %r{.*/tickets/.*})).to_not have_been_made
it "raises the error" do
expect{ZendeskTicketWorker.new.perform("some" => "options", "requester" => { "email" => "a@b.com" })}.to raise_error(ZendeskAPI::Error::NetworkError)
end
end

it "raises the ticket if it receives a 503 response" do
zendesk_has_user(email: "a@b.com", suspended: false)
context 'with a 302 response' do
before do
zendesk_has_user(email: "a@b.com", suspended: false)
zendesk_returns_redirect
end

zendesk_is_unavailable

expect{ZendeskTicketWorker.new.perform("some" => "options", "requester" => { "email" => "a@b.com" })}.to raise_error(ZendeskAPI::Error::NetworkError)
it "raises the error" do
expect{ZendeskTicketWorker.new.perform("some" => "options", "requester" => { "email" => "a@b.com" })}.to raise_error(ZendeskAPI::Error::NetworkError)
end
end

end

0 comments on commit e54297c

Please sign in to comment.