From e8b906c1cf7a1b4c8615ee438ef15c2461b11005 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Thu, 19 May 2016 16:06:47 +0200 Subject: [PATCH] Improved zendesk field migration, mapped checkbox to boolean. --- .../20160506000002_email_ticket_cc_remove.rb | 9 +++- lib/import/zendesk.rb | 43 +++++++------------ test/integration/zendesk_import_test.rb | 18 ++++---- test/unit/object_manager_test.rb | 8 ++++ 4 files changed, 41 insertions(+), 37 deletions(-) diff --git a/db/migrate/20160506000002_email_ticket_cc_remove.rb b/db/migrate/20160506000002_email_ticket_cc_remove.rb index 96c5e1dde..d86334dcc 100644 --- a/db/migrate/20160506000002_email_ticket_cc_remove.rb +++ b/db/migrate/20160506000002_email_ticket_cc_remove.rb @@ -1,6 +1,13 @@ class EmailTicketCcRemove < ActiveRecord::Migration def up - ObjectManager::Attribute.remove(object: 'Ticket', name: 'cc', force: true) + # return if it's a new setup + return if !Setting.find_by(name: 'system_init_done') + object_lookup_id = ObjectLookup.by_name('Ticket') + record = ObjectManager::Attribute.find_by( + object_lookup_id: object_lookup_id, + name: 'cc', + ) + record.destroy if record end end diff --git a/lib/import/zendesk.rb b/lib/import/zendesk.rb index b8b1ead3c..44655f1e9 100644 --- a/lib/import/zendesk.rb +++ b/lib/import/zendesk.rb @@ -343,63 +343,51 @@ module Import::Zendesk } if zendesk_field.type == 'date' - data_option = { future: true, past: true, diff: 0, - }.merge( data_option ) - + }.merge(data_option) elsif zendesk_field.type == 'checkbox' - - data_type = 'checkbox' + data_type = 'boolean' data_option = { - type: zendesk_field.type, - default: '', - options: {}, - }.merge( data_option ) - + default: false, + options: { + true => 'yes', + false => 'no', + }, + }.merge(data_option) elsif zendesk_field.type == 'regexp' - data_type = 'input' data_option = { type: 'text', maxlength: 255, regex: zendesk_field.regexp_for_validation, - }.merge( data_option ) - + }.merge(data_option) elsif zendesk_field.type == 'decimal' - data_type = 'input' data_option = { type: 'text', maxlength: 255, - }.merge( data_option ) - + }.merge(data_option) elsif zendesk_field.type == 'integer' - data_type = 'integer' data_option = { min: 0, max: 999_999_999, - }.merge( data_option ) - + }.merge(data_option) elsif zendesk_field.type == 'text' - data_type = 'input' data_option = { type: zendesk_field.type, maxlength: 255, - }.merge( data_option ) - + }.merge(data_option) elsif zendesk_field.type == 'textarea' - data_type = 'input' data_option = { type: zendesk_field.type, maxlength: 255, - }.merge( data_option ) - + }.merge(data_option) elsif zendesk_field.type == 'tagger' || zendesk_field.type == 'dropdown' # \"custom_field_options\"=>[{\"id\"=>28353445 @@ -432,7 +420,7 @@ module Import::Zendesk data_option = { default: '', options: options, - }.merge( data_option ) + }.merge(data_option) end screens = { @@ -1064,10 +1052,11 @@ module Import::Zendesk custom_fields.each { |custom_field| field_name = @zendesk_field_mapping[ custom_field['id'] ].gsub(/\s/, '_') field_value = custom_field['value'] + next if field_value.nil? # ignore nil values if @zendesk_ticket_field_value_mapping[ field_name ] field_value = @zendesk_ticket_field_value_mapping[ field_name ][ field_value ] end - fields[ field_name ] = field_value + fields[ field_name.to_sym ] = field_value } fields end diff --git a/test/integration/zendesk_import_test.rb b/test/integration/zendesk_import_test.rb index 64ef28755..2e2648b6a 100644 --- a/test/integration/zendesk_import_test.rb +++ b/test/integration/zendesk_import_test.rb @@ -288,11 +288,11 @@ class ZendeskImportTest < ActiveSupport::TestCase owner_id: 1, customer_id: 6, organization_id: 2, - test_checkbox: 'f', + test_checkbox: true, custom_integer: 999, custom_dropdown: 'key2', - custom_decimal: '1.6', - not_existing: nil, + custom_decimal: '1.6', + not_existing: nil, }, }, { @@ -310,12 +310,12 @@ If you\'re reading this message in your email, click the ticket number link that priority_id: 1, owner_id: 1, customer_id: 7, - organization_id: nil, - test_checkbox: 'f', - custom_integer: nil, - custom_dropdown: '', - custom_decimal: nil, - not_existing: nil, + organization_id: nil, + test_checkbox: false, + custom_integer: nil, + custom_dropdown: '', + custom_decimal: nil, + not_existing: nil, }, }, { diff --git a/test/unit/object_manager_test.rb b/test/unit/object_manager_test.rb index a71f852d0..532d09027 100644 --- a/test/unit/object_manager_test.rb +++ b/test/unit/object_manager_test.rb @@ -10,6 +10,8 @@ class ObjectManagerTest < ActiveSupport::TestCase list_objects = ObjectManager.list_frontend_objects assert_equal(%w(Ticket User Organization Group), list_objects) + assert_equal(false, ObjectManager::Attribute.pending_migration?) + # create simple attribute attribute1 = ObjectManager::Attribute.add( object: 'Ticket', @@ -55,6 +57,12 @@ class ObjectManagerTest < ActiveSupport::TestCase name: 'test1', ) + attribute1 = ObjectManager::Attribute.get( + object: 'Ticket', + name: 'test1', + ) + assert_not(attribute1) + assert_equal(false, ObjectManager::Attribute.pending_migration?) assert(ObjectManager::Attribute.migration_execute)