Fixes #3310 - Zendesk import fails if fields with unsupported chars in its name are present.
This commit is contained in:
parent
eaa1f1f92b
commit
9c8cfd83dd
5 changed files with 48 additions and 7 deletions
|
@ -13,6 +13,8 @@ class Sequencer
|
||||||
# model_name
|
# model_name
|
||||||
# model_name
|
# model_name
|
||||||
# model_name
|
# model_name
|
||||||
|
# model_name_
|
||||||
|
# model_name
|
||||||
without_double_underscores.gsub(/_id(s?)$/, '_no\1')
|
without_double_underscores.gsub(/_id(s?)$/, '_no\1')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -22,16 +24,31 @@ class Sequencer
|
||||||
# model_name
|
# model_name
|
||||||
# model_name
|
# model_name
|
||||||
# model_name
|
# model_name
|
||||||
without_spaces_and_slashes.gsub(/_{2,}/, '_')
|
# model_name_
|
||||||
|
# model_name
|
||||||
|
only_supported_chars.gsub(/_{2,}/, '_')
|
||||||
end
|
end
|
||||||
|
|
||||||
def without_spaces_and_slashes
|
def only_supported_chars
|
||||||
# model_id
|
# model_id
|
||||||
# model_ids
|
# model_ids
|
||||||
# model___name
|
# model___name
|
||||||
# model_name
|
# model_name
|
||||||
|
# model__name
|
||||||
|
# model_name_
|
||||||
# model_name
|
# model_name
|
||||||
transliterated.gsub(%r{[\s/]}, '_').underscore
|
downcased.split('').map { |char| char.match?(/[a-z0-9_]/) ? char : '_' }.join
|
||||||
|
end
|
||||||
|
|
||||||
|
def downcased
|
||||||
|
# model id
|
||||||
|
# model ids
|
||||||
|
# model / name
|
||||||
|
# model name
|
||||||
|
# model::name
|
||||||
|
# model name?
|
||||||
|
# model name
|
||||||
|
transliterated.downcase
|
||||||
end
|
end
|
||||||
|
|
||||||
def transliterated
|
def transliterated
|
||||||
|
@ -39,6 +56,8 @@ class Sequencer
|
||||||
# Model IDs
|
# Model IDs
|
||||||
# Model / Name
|
# Model / Name
|
||||||
# Model Name
|
# Model Name
|
||||||
|
# Model::Name
|
||||||
|
# Model Name?
|
||||||
# Model Name
|
# Model Name
|
||||||
::ActiveSupport::Inflector.transliterate(unsanitized_name, '_'.freeze)
|
::ActiveSupport::Inflector.transliterate(unsanitized_name, '_'.freeze)
|
||||||
end
|
end
|
||||||
|
@ -48,6 +67,8 @@ class Sequencer
|
||||||
# Model IDs
|
# Model IDs
|
||||||
# Model / Name
|
# Model / Name
|
||||||
# Model Name
|
# Model Name
|
||||||
|
# Model::Name
|
||||||
|
# Model Name?
|
||||||
# rubocop:disable Style/AsciiComments
|
# rubocop:disable Style/AsciiComments
|
||||||
# Mödel Nâmé
|
# Mödel Nâmé
|
||||||
# rubocop:enable Style/AsciiComments
|
# rubocop:enable Style/AsciiComments
|
||||||
|
|
|
@ -14,6 +14,8 @@ class Sequencer
|
||||||
# Model IDs
|
# Model IDs
|
||||||
# Model / Name
|
# Model / Name
|
||||||
# Model Name
|
# Model Name
|
||||||
|
# Model Name?
|
||||||
|
# Model::Name
|
||||||
resource['key']
|
resource['key']
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,6 +17,8 @@ class Sequencer
|
||||||
# Model IDs
|
# Model IDs
|
||||||
# Model / Name
|
# Model / Name
|
||||||
# Model Name
|
# Model Name
|
||||||
|
# Model Name?
|
||||||
|
# Model::Name
|
||||||
resource.title
|
resource.title
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -48,7 +48,23 @@ RSpec.describe Sequencer::Unit::Import::Common::ObjectAttribute::SanitizedName,
|
||||||
allow(instance).to receive(:unsanitized_name).and_return('Ærøskøbing Ät Mödél')
|
allow(instance).to receive(:unsanitized_name).and_return('Ærøskøbing Ät Mödél')
|
||||||
end
|
end
|
||||||
|
|
||||||
expect(provided[:sanitized_name]).to eq('a_eroskobing_at_model')
|
expect(provided[:sanitized_name]).to eq('aeroskobing_at_model')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'replaces questionmark characters' do
|
||||||
|
provided = process do |instance|
|
||||||
|
allow(instance).to receive(:unsanitized_name).and_return('model?')
|
||||||
|
end
|
||||||
|
|
||||||
|
expect(provided[:sanitized_name]).to eq('model_')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'replaces colon characters' do
|
||||||
|
provided = process do |instance|
|
||||||
|
allow(instance).to receive(:unsanitized_name).and_return('mo::del')
|
||||||
|
end
|
||||||
|
|
||||||
|
expect(provided[:sanitized_name]).to eq('mo_del')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -340,7 +340,7 @@ class ZendeskImportTest < ActiveSupport::TestCase
|
||||||
organization_id: 2,
|
organization_id: 2,
|
||||||
test_checkbox: true,
|
test_checkbox: true,
|
||||||
custom_integer: 999,
|
custom_integer: 999,
|
||||||
custom_drop_down: 'key2',
|
custom_dropdown: 'key2',
|
||||||
custom_decimal: '1.6',
|
custom_decimal: '1.6',
|
||||||
not_existing: nil,
|
not_existing: nil,
|
||||||
},
|
},
|
||||||
|
@ -361,7 +361,7 @@ class ZendeskImportTest < ActiveSupport::TestCase
|
||||||
organization_id: nil,
|
organization_id: nil,
|
||||||
test_checkbox: false,
|
test_checkbox: false,
|
||||||
custom_integer: nil,
|
custom_integer: nil,
|
||||||
custom_drop_down: '',
|
custom_dropdown: '',
|
||||||
custom_decimal: nil,
|
custom_decimal: nil,
|
||||||
not_existing: nil,
|
not_existing: nil,
|
||||||
},
|
},
|
||||||
|
@ -538,7 +538,7 @@ class ZendeskImportTest < ActiveSupport::TestCase
|
||||||
custom_date
|
custom_date
|
||||||
custom_integer
|
custom_integer
|
||||||
custom_regex
|
custom_regex
|
||||||
custom_drop_down
|
custom_dropdown
|
||||||
]
|
]
|
||||||
|
|
||||||
assert_equal(copmare_fields, local_fields, 'ticket fields')
|
assert_equal(copmare_fields, local_fields, 'ticket fields')
|
||||||
|
|
Loading…
Reference in a new issue