diff options
Diffstat (limited to 'spec/support/shared_examples/work_item_base_types_importer.rb')
-rw-r--r-- | spec/support/shared_examples/work_item_base_types_importer.rb | 60 |
1 files changed, 57 insertions, 3 deletions
diff --git a/spec/support/shared_examples/work_item_base_types_importer.rb b/spec/support/shared_examples/work_item_base_types_importer.rb index b1011037584..1703d400aea 100644 --- a/spec/support/shared_examples/work_item_base_types_importer.rb +++ b/spec/support/shared_examples/work_item_base_types_importer.rb @@ -15,6 +15,22 @@ RSpec.shared_examples 'work item base types importer' do expect(WorkItems::Type.all).to all(be_valid) end + it 'creates all default widget definitions' do + WorkItems::WidgetDefinition.delete_all + widget_mapping = ::Gitlab::DatabaseImporters::WorkItems::BaseTypeImporter::WIDGETS_FOR_TYPE + + expect { subject }.to change { WorkItems::WidgetDefinition.count }.from(0).to(widget_mapping.values.flatten.count) + + created_widgets = WorkItems::WidgetDefinition.global.map do |widget| + { name: widget.work_item_type.name, type: widget.widget_type } + end + expected_widgets = widget_mapping.flat_map do |type_sym, widget_types| + widget_types.map { |type| { name: ::WorkItems::Type::TYPE_NAMES[type_sym], type: type.to_s } } + end + + expect(created_widgets).to match_array(expected_widgets) + end + it 'upserts base work item types if they already exist' do first_type = WorkItems::Type.first original_name = first_type.name @@ -29,8 +45,34 @@ RSpec.shared_examples 'work item base types importer' do ) end - it 'executes a single INSERT query' do - expect { subject }.to make_queries_matching(/INSERT/, 1) + it 'upserts default widget definitions if they already exist and type changes' do + widget = WorkItems::WidgetDefinition.global.find_by_widget_type(:labels) + + widget.update!(widget_type: :weight) + + expect do + subject + widget.reload + end.to not_change(WorkItems::WidgetDefinition, :count).and( + change { widget.widget_type }.from('weight').to('labels') + ) + end + + it 'does not change default widget definitions if they already exist with changed disabled status' do + widget = WorkItems::WidgetDefinition.global.find_by_widget_type(:labels) + + widget.update!(disabled: true) + + expect do + subject + widget.reload + end.to not_change(WorkItems::WidgetDefinition, :count).and( + not_change { widget.disabled } + ) + end + + it 'executes single INSERT query per types and widget definitions' do + expect { subject }.to make_queries_matching(/INSERT/, 2) end context 'when some base types exist' do @@ -39,10 +81,22 @@ RSpec.shared_examples 'work item base types importer' do end it 'inserts all types and does nothing if some already existed' do - expect { subject }.to make_queries_matching(/INSERT/, 1).and( + expect { subject }.to make_queries_matching(/INSERT/, 2).and( change { WorkItems::Type.count }.by(1) ) expect(WorkItems::Type.count).to eq(WorkItems::Type::BASE_TYPES.count) end end + + context 'when some widget definitions exist' do + before do + WorkItems::WidgetDefinition.limit(1).delete_all + end + + it 'inserts all widget definitions and does nothing if some already existed' do + expect { subject }.to make_queries_matching(/INSERT/, 2).and( + change { WorkItems::WidgetDefinition.count }.by(1) + ) + end + end end |