Improved zendesk field migration, mapped checkbox to boolean.

This commit is contained in:
Martin Edenhofer 2016-05-19 16:06:47 +02:00
parent 5aa51f82a6
commit e8b906c1cf
4 changed files with 41 additions and 37 deletions

View file

@ -1,6 +1,13 @@
class EmailTicketCcRemove < ActiveRecord::Migration class EmailTicketCcRemove < ActiveRecord::Migration
def up 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
end end

View file

@ -343,63 +343,51 @@ module Import::Zendesk
} }
if zendesk_field.type == 'date' if zendesk_field.type == 'date'
data_option = { data_option = {
future: true, future: true,
past: true, past: true,
diff: 0, diff: 0,
}.merge( data_option ) }.merge(data_option)
elsif zendesk_field.type == 'checkbox' elsif zendesk_field.type == 'checkbox'
data_type = 'boolean'
data_type = 'checkbox'
data_option = { data_option = {
type: zendesk_field.type, default: false,
default: '', options: {
options: {}, true => 'yes',
}.merge( data_option ) false => 'no',
},
}.merge(data_option)
elsif zendesk_field.type == 'regexp' elsif zendesk_field.type == 'regexp'
data_type = 'input' data_type = 'input'
data_option = { data_option = {
type: 'text', type: 'text',
maxlength: 255, maxlength: 255,
regex: zendesk_field.regexp_for_validation, regex: zendesk_field.regexp_for_validation,
}.merge( data_option ) }.merge(data_option)
elsif zendesk_field.type == 'decimal' elsif zendesk_field.type == 'decimal'
data_type = 'input' data_type = 'input'
data_option = { data_option = {
type: 'text', type: 'text',
maxlength: 255, maxlength: 255,
}.merge( data_option ) }.merge(data_option)
elsif zendesk_field.type == 'integer' elsif zendesk_field.type == 'integer'
data_type = 'integer' data_type = 'integer'
data_option = { data_option = {
min: 0, min: 0,
max: 999_999_999, max: 999_999_999,
}.merge( data_option ) }.merge(data_option)
elsif zendesk_field.type == 'text' elsif zendesk_field.type == 'text'
data_type = 'input' data_type = 'input'
data_option = { data_option = {
type: zendesk_field.type, type: zendesk_field.type,
maxlength: 255, maxlength: 255,
}.merge( data_option ) }.merge(data_option)
elsif zendesk_field.type == 'textarea' elsif zendesk_field.type == 'textarea'
data_type = 'input' data_type = 'input'
data_option = { data_option = {
type: zendesk_field.type, type: zendesk_field.type,
maxlength: 255, maxlength: 255,
}.merge( data_option ) }.merge(data_option)
elsif zendesk_field.type == 'tagger' || zendesk_field.type == 'dropdown' elsif zendesk_field.type == 'tagger' || zendesk_field.type == 'dropdown'
# \"custom_field_options\"=>[{\"id\"=>28353445 # \"custom_field_options\"=>[{\"id\"=>28353445
@ -432,7 +420,7 @@ module Import::Zendesk
data_option = { data_option = {
default: '', default: '',
options: options, options: options,
}.merge( data_option ) }.merge(data_option)
end end
screens = { screens = {
@ -1064,10 +1052,11 @@ module Import::Zendesk
custom_fields.each { |custom_field| custom_fields.each { |custom_field|
field_name = @zendesk_field_mapping[ custom_field['id'] ].gsub(/\s/, '_') field_name = @zendesk_field_mapping[ custom_field['id'] ].gsub(/\s/, '_')
field_value = custom_field['value'] field_value = custom_field['value']
next if field_value.nil? # ignore nil values
if @zendesk_ticket_field_value_mapping[ field_name ] if @zendesk_ticket_field_value_mapping[ field_name ]
field_value = @zendesk_ticket_field_value_mapping[ field_name ][ field_value ] field_value = @zendesk_ticket_field_value_mapping[ field_name ][ field_value ]
end end
fields[ field_name ] = field_value fields[ field_name.to_sym ] = field_value
} }
fields fields
end end

View file

@ -288,11 +288,11 @@ class ZendeskImportTest < ActiveSupport::TestCase
owner_id: 1, owner_id: 1,
customer_id: 6, customer_id: 6,
organization_id: 2, organization_id: 2,
test_checkbox: 'f', test_checkbox: true,
custom_integer: 999, custom_integer: 999,
custom_dropdown: 'key2', custom_dropdown: 'key2',
custom_decimal: '1.6', custom_decimal: '1.6',
not_existing: nil, 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, priority_id: 1,
owner_id: 1, owner_id: 1,
customer_id: 7, customer_id: 7,
organization_id: nil, organization_id: nil,
test_checkbox: 'f', test_checkbox: false,
custom_integer: nil, custom_integer: nil,
custom_dropdown: '', custom_dropdown: '',
custom_decimal: nil, custom_decimal: nil,
not_existing: nil, not_existing: nil,
}, },
}, },
{ {

View file

@ -10,6 +10,8 @@ class ObjectManagerTest < ActiveSupport::TestCase
list_objects = ObjectManager.list_frontend_objects list_objects = ObjectManager.list_frontend_objects
assert_equal(%w(Ticket User Organization Group), list_objects) assert_equal(%w(Ticket User Organization Group), list_objects)
assert_equal(false, ObjectManager::Attribute.pending_migration?)
# create simple attribute # create simple attribute
attribute1 = ObjectManager::Attribute.add( attribute1 = ObjectManager::Attribute.add(
object: 'Ticket', object: 'Ticket',
@ -55,6 +57,12 @@ class ObjectManagerTest < ActiveSupport::TestCase
name: 'test1', name: 'test1',
) )
attribute1 = ObjectManager::Attribute.get(
object: 'Ticket',
name: 'test1',
)
assert_not(attribute1)
assert_equal(false, ObjectManager::Attribute.pending_migration?) assert_equal(false, ObjectManager::Attribute.pending_migration?)
assert(ObjectManager::Attribute.migration_execute) assert(ObjectManager::Attribute.migration_execute)