From f1eee78381d78f3ac47c6424e21f6851e9a65113 Mon Sep 17 00:00:00 2001 From: Denny Bresch Date: Thu, 8 Aug 2019 10:25:37 +0200 Subject: [PATCH] Fixes #2694 - Zendesk import doesn't consider all tickets. --- .../zendesk/mixin/incremental_export.rb | 20 +++++++++++++++++++ .../unit/import/zendesk/organizations.rb | 1 + .../unit/import/zendesk/sub_sequence/base.rb | 1 + lib/sequencer/unit/import/zendesk/tickets.rb | 1 + lib/sequencer/unit/import/zendesk/users.rb | 1 + .../zendesk/sub_sequence/base_examples.rb | 15 ++++++++++---- 6 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 lib/sequencer/unit/import/zendesk/mixin/incremental_export.rb diff --git a/lib/sequencer/unit/import/zendesk/mixin/incremental_export.rb b/lib/sequencer/unit/import/zendesk/mixin/incremental_export.rb new file mode 100644 index 000000000..c9392cda6 --- /dev/null +++ b/lib/sequencer/unit/import/zendesk/mixin/incremental_export.rb @@ -0,0 +1,20 @@ +class Sequencer + class Unit + module Import + module Zendesk + module Mixin + module IncrementalExport + + def self.included(base) + base.uses :client + end + + def resource_collection + "::ZendeskAPI::#{resource_klass}".constantize.incremental_export(client, 1) + end + end + end + end + end + end +end diff --git a/lib/sequencer/unit/import/zendesk/organizations.rb b/lib/sequencer/unit/import/zendesk/organizations.rb index 2f06d1040..b74d46993 100644 --- a/lib/sequencer/unit/import/zendesk/organizations.rb +++ b/lib/sequencer/unit/import/zendesk/organizations.rb @@ -3,6 +3,7 @@ class Sequencer module Import module Zendesk class Organizations < Sequencer::Unit::Import::Zendesk::SubSequence::Object + include ::Sequencer::Unit::Import::Zendesk::Mixin::IncrementalExport private diff --git a/lib/sequencer/unit/import/zendesk/sub_sequence/base.rb b/lib/sequencer/unit/import/zendesk/sub_sequence/base.rb index 1da87f1ee..af749e057 100644 --- a/lib/sequencer/unit/import/zendesk/sub_sequence/base.rb +++ b/lib/sequencer/unit/import/zendesk/sub_sequence/base.rb @@ -13,6 +13,7 @@ class Sequencer def self.included(base) base.extend(ClassMethods) + base.uses :dry_run, :import_job end diff --git a/lib/sequencer/unit/import/zendesk/tickets.rb b/lib/sequencer/unit/import/zendesk/tickets.rb index 47254c45a..d4ecfc801 100644 --- a/lib/sequencer/unit/import/zendesk/tickets.rb +++ b/lib/sequencer/unit/import/zendesk/tickets.rb @@ -3,6 +3,7 @@ class Sequencer module Import module Zendesk class Tickets < Sequencer::Unit::Import::Zendesk::SubSequence::Object + include ::Sequencer::Unit::Import::Zendesk::Mixin::IncrementalExport uses :user_map, :organization_map, :group_map, :ticket_field_map diff --git a/lib/sequencer/unit/import/zendesk/users.rb b/lib/sequencer/unit/import/zendesk/users.rb index b89b5a9f1..9c358f4fa 100644 --- a/lib/sequencer/unit/import/zendesk/users.rb +++ b/lib/sequencer/unit/import/zendesk/users.rb @@ -3,6 +3,7 @@ class Sequencer module Import module Zendesk class Users < Sequencer::Unit::Import::Zendesk::SubSequence::Object + include ::Sequencer::Unit::Import::Zendesk::Mixin::IncrementalExport uses :organization_map, :group_map, :user_group_map diff --git a/spec/lib/sequencer/unit/import/zendesk/sub_sequence/base_examples.rb b/spec/lib/sequencer/unit/import/zendesk/sub_sequence/base_examples.rb index c0fca3918..cf063002c 100644 --- a/spec/lib/sequencer/unit/import/zendesk/sub_sequence/base_examples.rb +++ b/spec/lib/sequencer/unit/import/zendesk/sub_sequence/base_examples.rb @@ -2,6 +2,13 @@ RSpec.shared_examples 'Sequencer::Unit::Import::Zendesk::SubSequence::Base' do describe 'error handling' do before do allow(params[:client]).to receive(collection_name).and_return(client_collection) + + # if method 'incremental_export' is defined in class add additional receive via incremental_export + # for Users, Tickets and Organizations we are using Mixin 'IncrementalExport' to get the correct resource_collection method + if "ZendeskAPI/#{collection_name}".classify.safe_constantize.respond_to?(:incremental_export) + allow("ZendeskAPI/#{collection_name}".classify.safe_constantize).to receive(:incremental_export).and_return(client_collection) + end + allow(client_collection).to receive(:all!).and_raise(api_error) end @@ -10,10 +17,10 @@ RSpec.shared_examples 'Sequencer::Unit::Import::Zendesk::SubSequence::Base' 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 + group_map: {}, # required by Tickets + organization_map: {}, # required by Tickets + ticket_field_map: {}, # required by Tickets + user_map: {}, # required by Tickets } end