summaryrefslogtreecommitdiff
path: root/spec/support/shared_examples/work_item_base_types_importer.rb
diff options
context:
space:
mode:
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.rb60
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