summaryrefslogtreecommitdiff
path: root/spec/lib/bulk_imports/groups/pipelines/group_attributes_pipeline_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/bulk_imports/groups/pipelines/group_attributes_pipeline_spec.rb')
-rw-r--r--spec/lib/bulk_imports/groups/pipelines/group_attributes_pipeline_spec.rb80
1 files changed, 80 insertions, 0 deletions
diff --git a/spec/lib/bulk_imports/groups/pipelines/group_attributes_pipeline_spec.rb b/spec/lib/bulk_imports/groups/pipelines/group_attributes_pipeline_spec.rb
new file mode 100644
index 00000000000..7ac417afa0b
--- /dev/null
+++ b/spec/lib/bulk_imports/groups/pipelines/group_attributes_pipeline_spec.rb
@@ -0,0 +1,80 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe BulkImports::Groups::Pipelines::GroupAttributesPipeline do
+ subject(:pipeline) { described_class.new(context) }
+
+ let_it_be(:user) { create(:user) }
+ let_it_be(:group) { create(:group) }
+ let_it_be(:bulk_import) { create(:bulk_import, user: user) }
+ let_it_be(:entity) { create(:bulk_import_entity, :group_entity, group: group, bulk_import: bulk_import) }
+ let_it_be(:tracker) { create(:bulk_import_tracker, entity: entity) }
+ let_it_be(:context) { BulkImports::Pipeline::Context.new(tracker) }
+
+ let(:group_attributes) do
+ {
+ 'id' => 1,
+ 'name' => 'Group name',
+ 'path' => 'group-path',
+ 'description' => 'description',
+ 'avatar' => {
+ 'url' => nil
+ },
+ 'membership_lock' => true,
+ 'traversal_ids' => [
+ 2
+ ]
+ }
+ end
+
+ describe '#run' do
+ before do
+ allow_next_instance_of(BulkImports::Common::Extractors::JsonExtractor) do |extractor|
+ allow(extractor).to receive(:extract).and_return(
+ BulkImports::Pipeline::ExtractedData.new(data: group_attributes)
+ )
+ end
+ end
+
+ it 'imports allowed group attributes' do
+ expect(Groups::UpdateService).to receive(:new).with(group, user, { membership_lock: true }).and_call_original
+
+ pipeline.run
+
+ expect(group).to have_attributes(membership_lock: true)
+ end
+ end
+
+ describe '#transform' do
+ it 'fetches only allowed attributes and symbolize keys' do
+ transformed_data = pipeline.transform(context, group_attributes)
+
+ expect(transformed_data).to eq({ membership_lock: true })
+ end
+
+ context 'when there is no data to transform' do
+ let(:group_attributes) { nil }
+
+ it do
+ transformed_data = pipeline.transform(context, group_attributes)
+
+ expect(transformed_data).to eq(nil)
+ end
+ end
+ end
+
+ describe '#after_run' do
+ it 'calls extractor#remove_tmpdir' do
+ expect_next_instance_of(BulkImports::Common::Extractors::JsonExtractor) do |extractor|
+ expect(extractor).to receive(:remove_tmpdir)
+ end
+
+ pipeline.after_run(nil)
+ end
+ end
+
+ describe '.relation' do
+ it { expect(described_class.relation).to eq('self') }
+ end
+end