Fix Zendesk import failure on lowest subscription tier, aka "Essential" (fixes #2262)
This commit is contained in:
parent
a780745349
commit
2618a51f1b
5 changed files with 83 additions and 0 deletions
|
@ -39,6 +39,10 @@ class Sequencer
|
||||||
|
|
||||||
def resource_iteration(&block)
|
def resource_iteration(&block)
|
||||||
resource_collection.public_send(resource_iteration_method, &block)
|
resource_collection.public_send(resource_iteration_method, &block)
|
||||||
|
rescue ZendeskAPI::Error::NetworkError => e
|
||||||
|
return if e.response.status.to_s == '403' && resource_klass.in?(%w[UserField OrganizationField])
|
||||||
|
|
||||||
|
raise
|
||||||
end
|
end
|
||||||
|
|
||||||
def resource_collection
|
def resource_collection
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
require 'lib/sequencer/unit/import/zendesk/sub_sequence/base_examples'
|
||||||
|
|
||||||
|
RSpec.describe Sequencer::Unit::Import::Zendesk::OrganizationFields, sequencer: :unit do
|
||||||
|
include_examples 'Sequencer::Unit::Import::Zendesk::SubSequence::Base'
|
||||||
|
end
|
|
@ -0,0 +1,61 @@
|
||||||
|
RSpec.shared_examples 'Sequencer::Unit::Import::Zendesk::SubSequence::Base' do
|
||||||
|
before do
|
||||||
|
allow(params[:client]).to receive(collection_name).and_return(client_collection)
|
||||||
|
allow(client_collection).to receive(:all!).and_raise(api_error)
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:params) do
|
||||||
|
{
|
||||||
|
dry_run: false,
|
||||||
|
import_job: instance_double(ImportJob),
|
||||||
|
client: double('ZendeskAPI'),
|
||||||
|
group_map: {}, # required by Tickets
|
||||||
|
organization_map: {}, # required by Tickets
|
||||||
|
ticket_field_map: {}, # required by Tickets
|
||||||
|
user_map: {}, # required by Tickets
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:collection_name) { described_class.name.demodulize.snakecase.to_sym }
|
||||||
|
let(:client_collection) { double('ZendeskAPI::Collection') }
|
||||||
|
let(:api_error) { ZendeskAPI::Error::NetworkError.new('Mock err msg', response_obj) }
|
||||||
|
let(:response_obj) { double('Faraday::Response') }
|
||||||
|
|
||||||
|
# https://github.com/zammad/zammad/issues/2262
|
||||||
|
context 'for lowest-tier Zendesk subscriptions ("Essential")' do
|
||||||
|
shared_examples 'Zendesk import data (only available on Team tier and up)' do
|
||||||
|
context 'when API returns 403 forbidden during sync' do
|
||||||
|
before { allow(response_obj).to receive(:status).and_return(403) }
|
||||||
|
|
||||||
|
it 'rescues the resulting exception' do
|
||||||
|
expect { process(params) }.not_to raise_error
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when API returns other errors' do
|
||||||
|
before { allow(response_obj).to receive(:status).and_return(500) }
|
||||||
|
|
||||||
|
# https://github.com/zammad/zammad/issues/2262
|
||||||
|
it 'does not rescue the resulting exception' do
|
||||||
|
expect { process(params) }.to raise_error(api_error)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples 'Zendesk import data (available on all tiers)' do
|
||||||
|
context 'if API returns 403 forbidden during sync' do
|
||||||
|
before { allow(response_obj).to receive(:status).and_return(403) }
|
||||||
|
|
||||||
|
it 'does not rescue the resulting exception' do
|
||||||
|
expect { process(params) }.to raise_error(api_error)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if described_class.name.demodulize.in?(%w[UserFields OrganizationFields])
|
||||||
|
include_examples 'Zendesk import data (only available on Team tier and up)'
|
||||||
|
else
|
||||||
|
include_examples 'Zendesk import data (available on all tiers)'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
6
spec/lib/sequencer/unit/import/zendesk/tickets_spec.rb
Normal file
6
spec/lib/sequencer/unit/import/zendesk/tickets_spec.rb
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
require 'lib/sequencer/unit/import/zendesk/sub_sequence/base_examples'
|
||||||
|
|
||||||
|
RSpec.describe Sequencer::Unit::Import::Zendesk::Tickets, sequencer: :unit do
|
||||||
|
include_examples 'Sequencer::Unit::Import::Zendesk::SubSequence::Base'
|
||||||
|
end
|
|
@ -0,0 +1,6 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
require 'lib/sequencer/unit/import/zendesk/sub_sequence/base_examples'
|
||||||
|
|
||||||
|
RSpec.describe Sequencer::Unit::Import::Zendesk::UserFields, sequencer: :unit do
|
||||||
|
include_examples 'Sequencer::Unit::Import::Zendesk::SubSequence::Base'
|
||||||
|
end
|
Loading…
Reference in a new issue