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 | 42 |
1 files changed, 40 insertions, 2 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 68e37171ea2..593670ac4b8 100644 --- a/spec/support/shared_examples/work_item_base_types_importer.rb +++ b/spec/support/shared_examples/work_item_base_types_importer.rb @@ -1,10 +1,48 @@ # frozen_string_literal: true RSpec.shared_examples 'work item base types importer' do - it 'creates all base work item types' do - # Fixtures need to run on a pristine DB, but the test suite preloads the base types before(:suite) + it "creates all base work item types if they don't exist" do WorkItems::Type.delete_all expect { subject }.to change(WorkItems::Type, :count).from(0).to(WorkItems::Type::BASE_TYPES.count) + + types_in_db = WorkItems::Type.all.map { |type| type.slice(:base_type, :icon_name, :name).symbolize_keys } + expected_types = WorkItems::Type::BASE_TYPES.map do |type, attributes| + attributes.slice(:icon_name, :name).merge(base_type: type.to_s) + end + + expect(types_in_db).to match_array(expected_types) + expect(WorkItems::Type.all).to all(be_valid) + end + + it 'upserts base work item types if they already exist' do + first_type = WorkItems::Type.first + original_name = first_type.name + + first_type.update!(name: original_name.upcase) + + expect do + subject + first_type.reload + end.to not_change(WorkItems::Type, :count).and( + change(first_type, :name).from(original_name.upcase).to(original_name) + ) + end + + it 'executes a single INSERT query' do + expect { subject }.to make_queries_matching(/INSERT/, 1) + end + + context 'when some base types exist' do + before do + WorkItems::Type.limit(1).delete_all + end + + it 'inserts all types and does nothing if some already existed' do + expect { subject }.to make_queries_matching(/INSERT/, 1).and( + change(WorkItems::Type, :count).by(1) + ) + expect(WorkItems::Type.count).to eq(WorkItems::Type::BASE_TYPES.count) + end end end |