diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-19 08:27:35 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-19 08:27:35 +0000 |
commit | 7e9c479f7de77702622631cff2628a9c8dcbc627 (patch) | |
tree | c8f718a08e110ad7e1894510980d2155a6549197 /spec/lib/gitlab/import_export/project/sample | |
parent | e852b0ae16db4052c1c567d9efa4facc81146e88 (diff) | |
download | gitlab-ce-13.6.0-rc42.tar.gz |
Add latest changes from gitlab-org/gitlab@13-6-stable-eev13.6.0-rc42
Diffstat (limited to 'spec/lib/gitlab/import_export/project/sample')
-rw-r--r-- | spec/lib/gitlab/import_export/project/sample/date_calculator_spec.rb | 2 | ||||
-rw-r--r-- | spec/lib/gitlab/import_export/project/sample/relation_factory_spec.rb | 168 | ||||
-rw-r--r-- | spec/lib/gitlab/import_export/project/sample/relation_tree_restorer_spec.rb (renamed from spec/lib/gitlab/import_export/project/sample/sample_data_relation_tree_restorer_spec.rb) | 23 |
3 files changed, 187 insertions, 6 deletions
diff --git a/spec/lib/gitlab/import_export/project/sample/date_calculator_spec.rb b/spec/lib/gitlab/import_export/project/sample/date_calculator_spec.rb index 82f59245519..645242c6f05 100644 --- a/spec/lib/gitlab/import_export/project/sample/date_calculator_spec.rb +++ b/spec/lib/gitlab/import_export/project/sample/date_calculator_spec.rb @@ -13,7 +13,7 @@ RSpec.describe Gitlab::ImportExport::Project::Sample::DateCalculator do end context 'when dates are not empty' do - let(:dates) { [[nil, '2020-01-01 00:00:00 +0000'], [nil, '2021-01-01 00:00:00 +0000'], [nil, '2022-01-01 23:59:59 +0000']] } + let(:dates) { [nil, '2020-01-01 00:00:00 +0000', '2021-01-01 00:00:00 +0000', nil, '2022-01-01 23:59:59 +0000'] } it { is_expected.to eq(Time.zone.parse('2021-01-01 00:00:00 +0000')) } end diff --git a/spec/lib/gitlab/import_export/project/sample/relation_factory_spec.rb b/spec/lib/gitlab/import_export/project/sample/relation_factory_spec.rb new file mode 100644 index 00000000000..86d5f2402f8 --- /dev/null +++ b/spec/lib/gitlab/import_export/project/sample/relation_factory_spec.rb @@ -0,0 +1,168 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::ImportExport::Project::Sample::RelationFactory do + let(:group) { create(:group) } + let(:project) { create(:project, :repository, group: group) } + let(:members_mapper) { double('members_mapper').as_null_object } + let(:admin) { create(:admin) } + let(:importer_user) { admin } + let(:excluded_keys) { [] } + let(:date_calculator) { instance_double(Gitlab::ImportExport::Project::Sample::DateCalculator) } + let(:original_project_id) { 8 } + let(:start_date) { Time.current - 30.days } + let(:due_date) { Time.current - 20.days } + let(:created_object) do + described_class.create( # rubocop:disable Rails/SaveBang + relation_sym: relation_sym, + relation_hash: relation_hash, + object_builder: Gitlab::ImportExport::Project::ObjectBuilder, + members_mapper: members_mapper, + user: importer_user, + importable: project, + excluded_keys: excluded_keys, + date_calculator: date_calculator + ) + end + + context 'issue object' do + let(:relation_sym) { :issues } + let(:id) { 999 } + + let(:relation_hash) do + { + 'id' => id, + 'title' => 'Necessitatibus magnam qui at velit consequatur perspiciatis.', + 'project_id' => original_project_id, + 'created_at' => '2016-08-12T09:41:03.462Z', + 'updated_at' => '2016-08-12T09:41:03.462Z', + 'description' => 'Molestiae corporis magnam et fugit aliquid nulla quia.', + 'state' => 'closed', + 'position' => 0, + 'confidential' => false, + 'due_date' => due_date + } + end + + before do + allow(date_calculator).to receive(:closest_date_to_average) { Time.current - 10.days } + allow(date_calculator).to receive(:calculate_by_closest_date_to_average) + end + + it 'correctly updated due date', :aggregate_failures do + expect(date_calculator).to receive(:calculate_by_closest_date_to_average) + .with(relation_hash['due_date']).and_return(due_date - 10.days) + + expect(created_object.due_date).to eq((due_date - 10.days).to_date) + end + end + + context 'milestone object' do + let(:relation_sym) { :milestones } + let(:id) { 1001 } + + let(:relation_hash) do + { + 'id' => id, + 'title' => 'v3.0', + 'project_id' => original_project_id, + 'created_at' => '2016-08-12T09:41:03.462Z', + 'updated_at' => '2016-08-12T09:41:03.462Z', + 'description' => 'Rerum at autem exercitationem ea voluptates harum quam placeat.', + 'state' => 'closed', + 'start_date' => start_date, + 'due_date' => due_date + } + end + + before do + allow(date_calculator).to receive(:closest_date_to_average).twice { Time.current - 10.days } + allow(date_calculator).to receive(:calculate_by_closest_date_to_average).twice + end + + it 'correctly updated due date', :aggregate_failures do + expect(date_calculator).to receive(:calculate_by_closest_date_to_average) + .with(relation_hash['due_date']).and_return(due_date - 10.days) + + expect(created_object.due_date).to eq((due_date - 10.days).to_date) + end + + it 'correctly updated start date', :aggregate_failures do + expect(date_calculator).to receive(:calculate_by_closest_date_to_average) + .with(relation_hash['start_date']).and_return(start_date - 20.days) + + expect(created_object.start_date).to eq((start_date - 20.days).to_date) + end + end + + context 'milestone object' do + let(:relation_sym) { :milestones } + let(:id) { 1001 } + + let(:relation_hash) do + { + 'id' => id, + 'title' => 'v3.0', + 'project_id' => original_project_id, + 'created_at' => '2016-08-12T09:41:03.462Z', + 'updated_at' => '2016-08-12T09:41:03.462Z', + 'description' => 'Rerum at autem exercitationem ea voluptates harum quam placeat.', + 'state' => 'closed', + 'start_date' => start_date, + 'due_date' => due_date + } + end + + before do + allow(date_calculator).to receive(:closest_date_to_average).twice { Time.current - 10.days } + allow(date_calculator).to receive(:calculate_by_closest_date_to_average).twice + end + + it 'correctly updated due date', :aggregate_failures do + expect(date_calculator).to receive(:calculate_by_closest_date_to_average) + .with(relation_hash['due_date']).and_return(due_date - 10.days) + + expect(created_object.due_date).to eq((due_date - 10.days).to_date) + end + + it 'correctly updated start date', :aggregate_failures do + expect(date_calculator).to receive(:calculate_by_closest_date_to_average) + .with(relation_hash['start_date']).and_return(start_date - 20.days) + + expect(created_object.start_date).to eq((start_date - 20.days).to_date) + end + end + + context 'hook object' do + let(:relation_sym) { :hooks } + let(:id) { 999 } + let(:service_id) { 99 } + let(:token) { 'secret' } + + let(:relation_hash) do + { + 'id' => id, + 'url' => 'https://example.json', + 'project_id' => original_project_id, + 'created_at' => '2016-08-12T09:41:03.462Z', + 'updated_at' => '2016-08-12T09:41:03.462Z', + 'service_id' => service_id, + 'push_events' => true, + 'issues_events' => false, + 'confidential_issues_events' => false, + 'merge_requests_events' => true, + 'tag_push_events' => false, + 'note_events' => true, + 'enable_ssl_verification' => true, + 'job_events' => false, + 'wiki_page_events' => true, + 'token' => token + } + end + + it 'does not calculate the closest date to average' do + expect(date_calculator).not_to receive(:calculate_by_closest_date_to_average) + end + end +end diff --git a/spec/lib/gitlab/import_export/project/sample/sample_data_relation_tree_restorer_spec.rb b/spec/lib/gitlab/import_export/project/sample/relation_tree_restorer_spec.rb index f173345a4c6..f87f79d4462 100644 --- a/spec/lib/gitlab/import_export/project/sample/sample_data_relation_tree_restorer_spec.rb +++ b/spec/lib/gitlab/import_export/project/sample/relation_tree_restorer_spec.rb @@ -9,7 +9,7 @@ require 'spec_helper' -RSpec.describe Gitlab::ImportExport::Project::Sample::SampleDataRelationTreeRestorer do +RSpec.describe Gitlab::ImportExport::Project::Sample::RelationTreeRestorer do include_context 'relation tree restorer shared context' let(:sample_data_relation_tree_restorer) do @@ -74,13 +74,26 @@ RSpec.describe Gitlab::ImportExport::Project::Sample::SampleDataRelationTreeRest let(:importable_name) { 'project' } let(:importable_path) { 'project' } let(:object_builder) { Gitlab::ImportExport::Project::ObjectBuilder } - let(:relation_factory) { Gitlab::ImportExport::Project::RelationFactory } + let(:relation_factory) { Gitlab::ImportExport::Project::Sample::RelationFactory } let(:reader) { Gitlab::ImportExport::Reader.new(shared: shared) } + let(:path) { 'spec/fixtures/lib/gitlab/import_export/sample_data/tree' } + let(:relation_reader) { Gitlab::ImportExport::JSON::NdjsonReader.new(path) } - context 'using ndjson reader' do - let(:path) { 'spec/fixtures/lib/gitlab/import_export/sample_data/tree' } - let(:relation_reader) { Gitlab::ImportExport::JSON::NdjsonReader.new(path) } + it 'initializes relation_factory with date_calculator as parameter' do + expect(Gitlab::ImportExport::Project::Sample::RelationFactory).to receive(:create).with(hash_including(:date_calculator)).at_least(:once).times + + subject + end + + context 'when relation tree restorer is initialized' do + it 'initializes date calculator with due dates' do + expect(Gitlab::ImportExport::Project::Sample::DateCalculator).to receive(:new).with(Array) + sample_data_relation_tree_restorer + end + end + + context 'using ndjson reader' do it_behaves_like 'import project successfully' end end |