From 0acedd39c261f52bac6754f25bfb18bc0af51bfe Mon Sep 17 00:00:00 2001 From: Thorsten Eckel Date: Wed, 3 Feb 2016 10:59:12 +0100 Subject: [PATCH 1/3] Code improvements. --- lib/import/zendesk.rb | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/import/zendesk.rb b/lib/import/zendesk.rb index 8ebc8b3d4..f654037f7 100644 --- a/lib/import/zendesk.rb +++ b/lib/import/zendesk.rb @@ -148,7 +148,7 @@ module Import::Zendesk initialize_client # retrive statistic - statistic = { + result = { 'Tickets' => 0, 'TicketFields' => 0, 'UserFields' => 0, @@ -162,20 +162,20 @@ module Import::Zendesk 'Automations' => 0, } - statistic.each { |object, _score| + result.each { |object, _score| counter = 0 @client.send( object.underscore.to_sym ).all do |_resource| counter += 1 end - statistic[ object ] = counter + result[ object ] = counter } - if statistic - Cache.write('import_zendesk_stats', statistic) + if result + Cache.write('import_zendesk_stats', result) end - statistic + result end =begin @@ -763,7 +763,6 @@ module Import::Zendesk elsif zendesk_article.via.channel == 'twitter' local_article_fields[:message_id] = zendesk_article.id - # TODO local_article_fields[:type_id] = if zendesk_article.via.source.rel == 'mention' article_type_twitter_status.id else @@ -776,7 +775,6 @@ module Import::Zendesk local_article_fields[:to] = zendesk_article.via.source.to.facebook_id local_article_fields[:message_id] = zendesk_article.id - # TODO local_article_fields[:type_id] = if zendesk_article.via.source.rel == 'post' article_type_facebook_feed_post.id else From 3202f8a51a11a19371a2a665b9e694716deca7e0 Mon Sep 17 00:00:00 2001 From: Thorsten Eckel Date: Wed, 3 Feb 2016 11:02:07 +0100 Subject: [PATCH 2/3] Fixed bug: Results have to get compared in the browser since the backend runs in the test mode and the frontend in production. --- .../app/controllers/import_zendesk.coffee | 6 +++- .../zendesk_import_browser_test.rb | 33 ++++++++++++++----- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/app/controllers/import_zendesk.coffee b/app/assets/javascripts/app/controllers/import_zendesk.coffee index a94f5631c..e0f1519cc 100644 --- a/app/assets/javascripts/app/controllers/import_zendesk.coffee +++ b/app/assets/javascripts/app/controllers/import_zendesk.coffee @@ -151,7 +151,11 @@ class Index extends App.ControllerContent success: (data, status, xhr) => if data.result is 'import_done' - window.location.reload() + delay = 0 + if @Config.get('developer_mode') is true + delay = 5000 + + @delay(window.location.reload, delay) return if data.result is 'error' diff --git a/test/integration/zendesk_import_browser_test.rb b/test/integration/zendesk_import_browser_test.rb index f2e90468d..b40b378c7 100644 --- a/test/integration/zendesk_import_browser_test.rb +++ b/test/integration/zendesk_import_browser_test.rb @@ -79,17 +79,32 @@ class ZendeskImportBrowserTest < TestCase click(css: '.js-migration-start') watch_for( - css: 'body', - value: 'login', + css: '.js-group .js-done', + value: '2', + timeout: 60, + ) + + watch_for( + css: '.js-organization .js-done', + value: '1', + timeout: 60, + ) + + watch_for( + css: '.js-user .js-done', + value: '141', + timeout: 60, + ) + + watch_for( + css: '.js-ticket .js-done', + value: '143', timeout: 300, ) - assert_equal( 143, User.count, 'users' ) - assert_equal( 3, Group.count, 'groups' ) - assert_equal( 5, Role.count, 'roles' ) - assert_equal( 2, Organization.count, 'organizations' ) - assert_equal( 144, Ticket.count, 'tickets' ) - assert_equal( 151, Ticket::Article.count, 'ticket articles' ) - assert_equal( 2, Store.count, 'ticket article attachments' ) + watch_for( + css: 'body', + value: 'login', + ) end end From 22d9cebae34605f52806d67ce301f9082afd02e3 Mon Sep 17 00:00:00 2001 From: Thorsten Eckel Date: Wed, 3 Feb 2016 11:23:26 +0100 Subject: [PATCH 3/3] Reworked to the functionality to import objects in the fetch loop instead of fetching all in the first place. Issue is caused by the Zendesk API or Gem. For more information see: https://github.com/zendesk/zendesk_api_client_rb/issues/290 . --- lib/import/zendesk.rb | 41 ----------------------------------------- 1 file changed, 41 deletions(-) diff --git a/lib/import/zendesk.rb b/lib/import/zendesk.rb index f654037f7..9f947a2ed 100644 --- a/lib/import/zendesk.rb +++ b/lib/import/zendesk.rb @@ -317,12 +317,7 @@ module Import::Zendesk local_fields = local_object.constantize.column_names - zendesk_object_fields = [] @client.send("#{local_object.downcase}_fields").all { |zendesk_object_field| - zendesk_object_fields.push(zendesk_object_field) - } - - zendesk_object_fields.each { |zendesk_object_field| if local_object == 'Ticket' mapped_object_field = method("mapping_#{local_object.downcase}_field").call( zendesk_object_field.type ) @@ -472,13 +467,7 @@ module Import::Zendesk def import_groups @zendesk_group_mapping = {} - zendesk_groups = [] @client.groups.all { |zendesk_group| - zendesk_groups.push(zendesk_group) - } - - zendesk_groups.each { |zendesk_group| - local_group = Group.create_if_not_exists( name: zendesk_group.name, active: !zendesk_group.deleted, @@ -526,12 +515,7 @@ module Import::Zendesk role_agent = Role.lookup(name: 'Agent') role_customer = Role.lookup(name: 'Customer') - zendesk_users = [] @client.users.all { |zendesk_user| - zendesk_users.push(zendesk_user) - } - - zendesk_users.each { |zendesk_user| local_user_fields = { login: zendesk_user.id.to_s, # Zendesk users may have no other identifier than the ID, e.g. twitter users @@ -602,12 +586,7 @@ module Import::Zendesk @zendesk_user_group_mapping = {} - zendesk_group_memberships = [] @client.group_memberships.all { |zendesk_group_membership| - zendesk_group_memberships.push(zendesk_group_membership) - } - - zendesk_group_memberships.each { |zendesk_group_membership| @zendesk_user_group_mapping[ zendesk_group_membership.user_id ] ||= [] @zendesk_user_group_mapping[ zendesk_group_membership.user_id ].push( zendesk_group_membership.group_id ) @@ -641,12 +620,7 @@ module Import::Zendesk article_type_facebook_feed_post = Ticket::Article::Type.lookup(name: 'facebook feed post') article_type_facebook_feed_comment = Ticket::Article::Type.lookup(name: 'facebook feed comment') - zendesk_tickets = [] @client.tickets.all { |zendesk_ticket| - zendesk_tickets.push(zendesk_ticket) - } - - zendesk_tickets.each { |zendesk_ticket| zendesk_ticket_fields = {} zendesk_ticket.custom_fields.each { |zendesk_ticket_field| @@ -840,12 +814,7 @@ module Import::Zendesk # https://developer.zendesk.com/rest_api/docs/core/macros def import_macros - zendesk_macros = [] @client.macros.all { |zendesk_macro| - zendesk_macros.push(zendesk_macro) - } - - zendesk_macros.each { |zendesk_macro| # TODO next if !zendesk_macro.active @@ -897,12 +866,7 @@ module Import::Zendesk # https://developer.zendesk.com/rest_api/docs/core/views def import_views - zendesk_views = [] @client.views.all { |zendesk_view| - zendesk_views.push(zendesk_view) - } - - zendesk_views.each { |zendesk_view| # "url" => "https://example.zendesk.com/api/v2/views/59511071.json" # "id" => 59511071 @@ -1031,12 +995,7 @@ module Import::Zendesk # https://developer.zendesk.com/rest_api/docs/core/automations def import_automations - zendesk_automations = [] @client.automations.all { |zendesk_automation| - zendesk_automations.push(zendesk_automation) - } - - zendesk_automations.each { |zendesk_automation| # "url" => "https://example.zendesk.com/api/v2/automations/60037892.json" # "id" => 60037892