123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- require 'rails_helper'
- RSpec.describe CheckForObjectAttributes, type: :db_migration do
- it 'performs no action for new systems', system_init_done: false do
- migrate do |instance|
- expect(instance).not_to receive(:attributes)
- end
- end
- context 'with a valid #data_option hash' do
- it 'does not change converted text attribute' do
- attribute = create(:object_manager_attribute_text)
- expect { migrate }
- .not_to change { attribute.reload.data_option }
- end
- it 'does not change select attribute' do
- attribute = create(:object_manager_attribute_select)
- expect { migrate }
- .not_to change { attribute.reload.data_option }
- end
- it 'does not change tree_select attribute' do
- attribute = create(:object_manager_attribute_tree_select)
- expect { migrate }
- .not_to change { attribute.reload.data_option }
- end
- it 'does not change multiselect attribute' do
- attribute = create(:object_manager_attribute_multiselect)
- expect { migrate }
- .not_to change { attribute.reload.data_option }
- end
- end
- context 'for #data_option key:' do
- context ':options' do
- it 'converts String to Hash' do
- wrong = {
- default: '',
- options: '',
- relation: '',
- type: 'text',
- maxlength: 255,
- null: true
- }
- attribute = create(:object_manager_attribute_text, data_option: wrong)
- migrate
- attribute.reload
- expect(attribute[:data_option][:options]).to be_a(Hash)
- expect(attribute[:data_option][:options]).to be_blank
- end
- end
- context ':relation' do
- it 'ensures an empty String' do
- wrong = {
- default: '',
- options: {},
- type: 'text',
- maxlength: 255,
- null: true
- }
- attribute = create(:object_manager_attribute_text, data_option: wrong)
- migrate
- attribute.reload
- expect(attribute[:data_option][:relation]).to be_a(String)
- end
- it 'converts Hash to String' do
- wrong = {
- default: '',
- options: {},
- relation: {},
- type: 'text',
- maxlength: 255,
- null: true
- }
- attribute = create(:object_manager_attribute_text, data_option: wrong)
- migrate
- attribute.reload
- expect(attribute[:data_option][:relation]).to be_a(String)
- expect(attribute[:data_option][:relation]).to be_blank
- end
- end
- # see https://github.com/zammad/zammad/issues/2159
- context ':null' do
- it 'does not fail on missing values' do
- wrong = {
- default: '',
- options: '', # <- this is not the attribute under test,
- relation: '', # but it must be invalid
- type: 'text', # to trigger a #save in the migration.
- maxlength: 255,
- }
- create(:object_manager_attribute_text)
- .update_columns(data_option: wrong)
- expect { migrate }.not_to raise_error
- end
- end
- end
- # regression test for issue #2318 - Upgrade to Zammad 2.7 was not possible (migration 20180220171219 CheckForObjectAttributes failed)
- context 'for interger attributes' do
- it 'missing :min and :max' do
- attribute = create(:object_manager_attribute_integer)
- attribute.update_columns(data_option: {})
- expect { migrate }.not_to raise_error
- attribute.reload
- expect(attribute[:data_option][:min]).to be_a(Integer)
- expect(attribute[:data_option][:max]).to be_a(Integer)
- end
- end
- end
|