Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models')
-rw-r--r--spec/models/ci/group_variable_spec.rb2
-rw-r--r--spec/models/ci/variable_spec.rb2
-rw-r--r--spec/models/concerns/ci/has_variable_spec.rb (renamed from spec/models/concerns/has_variable_spec.rb)2
-rw-r--r--spec/models/concerns/ci/maskable_spec.rb (renamed from spec/models/concerns/maskable_spec.rb)4
-rw-r--r--spec/models/jira_import_data_spec.rb134
-rw-r--r--spec/models/project_spec.rb57
6 files changed, 196 insertions, 5 deletions
diff --git a/spec/models/ci/group_variable_spec.rb b/spec/models/ci/group_variable_spec.rb
index 406a69f3bbc..610db9bf0e5 100644
--- a/spec/models/ci/group_variable_spec.rb
+++ b/spec/models/ci/group_variable_spec.rb
@@ -8,7 +8,7 @@ describe Ci::GroupVariable do
it_behaves_like "CI variable"
it { is_expected.to include_module(Presentable) }
- it { is_expected.to include_module(Maskable) }
+ it { is_expected.to include_module(Ci::Maskable) }
it { is_expected.to validate_uniqueness_of(:key).scoped_to(:group_id).with_message(/\(\w+\) has already been taken/) }
describe '.unprotected' do
diff --git a/spec/models/ci/variable_spec.rb b/spec/models/ci/variable_spec.rb
index 3ff547456c6..810a0ddfd2e 100644
--- a/spec/models/ci/variable_spec.rb
+++ b/spec/models/ci/variable_spec.rb
@@ -9,7 +9,7 @@ describe Ci::Variable do
describe 'validations' do
it { is_expected.to include_module(Presentable) }
- it { is_expected.to include_module(Maskable) }
+ it { is_expected.to include_module(Ci::Maskable) }
it { is_expected.to include_module(HasEnvironmentScope) }
it { is_expected.to validate_uniqueness_of(:key).scoped_to(:project_id, :environment_scope).with_message(/\(\w+\) has already been taken/) }
end
diff --git a/spec/models/concerns/has_variable_spec.rb b/spec/models/concerns/ci/has_variable_spec.rb
index 2bb21d7934e..c132fe47c3c 100644
--- a/spec/models/concerns/has_variable_spec.rb
+++ b/spec/models/concerns/ci/has_variable_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe HasVariable do
+describe Ci::HasVariable do
subject { build(:ci_variable) }
it { is_expected.to validate_presence_of(:key) }
diff --git a/spec/models/concerns/maskable_spec.rb b/spec/models/concerns/ci/maskable_spec.rb
index aeba7ad862f..22ffb294819 100644
--- a/spec/models/concerns/maskable_spec.rb
+++ b/spec/models/concerns/ci/maskable_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Maskable do
+describe Ci::Maskable do
let(:variable) { build(:ci_variable) }
describe 'masked value validations' do
@@ -34,7 +34,7 @@ describe Maskable do
end
describe 'REGEX' do
- subject { Maskable::REGEX }
+ subject { Ci::Maskable::REGEX }
it 'does not match strings shorter than 8 letters' do
expect(subject.match?('hello')).to eq(false)
diff --git a/spec/models/jira_import_data_spec.rb b/spec/models/jira_import_data_spec.rb
new file mode 100644
index 00000000000..ad7a704236b
--- /dev/null
+++ b/spec/models/jira_import_data_spec.rb
@@ -0,0 +1,134 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe JiraImportData do
+ let(:symbol_keys_project) do
+ { key: 'AA', scheduled_at: 2.days.ago.strftime('%Y-%m-%d %H:%M:%S'), scheduled_by: { 'user_id' => 1, 'name' => 'tester1' } }
+ end
+
+ let(:string_keys_project) do
+ { 'key': 'BB', 'scheduled_at': 1.hour.ago.strftime('%Y-%m-%d %H:%M:%S'), 'scheduled_by': { 'user_id': 2, 'name': 'tester2' } }
+ end
+
+ let(:jira_project_details) do
+ JiraImportData::JiraProjectDetails.new('CC', 1.day.ago.strftime('%Y-%m-%d %H:%M:%S'), { user_id: 3, name: 'tester3' })
+ end
+
+ describe '#projects' do
+ it 'returns empty array if no data' do
+ expect(described_class.new.projects).to eq([])
+ end
+
+ it 'returns empty array if no projects' do
+ import_data = described_class.new(data: { 'some-key' => 10 })
+ expect(import_data.projects).to eq([])
+ end
+
+ it 'returns JiraProjectDetails sorted by scheduled_at time' do
+ import_data = described_class.new(data: { jira: { projects: [symbol_keys_project, string_keys_project, jira_project_details] } })
+
+ expect(import_data.projects.size).to eq 3
+ expect(import_data.projects.map(&:key)).to eq(%w(AA CC BB))
+ expect(import_data.projects.map(&:scheduled_by).map {|e| e['name']}).to eq %w(tester1 tester3 tester2)
+ expect(import_data.projects.map(&:scheduled_by).map {|e| e['user_id']}).to eq [1, 3, 2]
+ end
+ end
+
+ describe 'add projects' do
+ it 'adds project when data is nil' do
+ import_data = described_class.new
+ expect(import_data.data).to be nil
+
+ import_data << string_keys_project
+
+ expect(import_data.data).to eq({ 'jira' => { 'projects' => [string_keys_project] } })
+ end
+
+ it 'adds project when data has some random info' do
+ import_data = described_class.new(data: { 'one-key': 10 })
+ expect(import_data.data).to eq({ 'one-key' => 10 })
+
+ import_data << string_keys_project
+
+ expect(import_data.data).to eq({ 'one-key' => 10, 'jira' => { 'projects' => [string_keys_project] } })
+ end
+
+ it 'adds project when data already has some jira projects' do
+ import_data = described_class.new(data: { jira: { projects: [symbol_keys_project] } })
+ expect(import_data.projects.map(&:to_h)).to eq [symbol_keys_project]
+
+ import_data << string_keys_project
+
+ expect(import_data.data['jira']['projects'].size).to eq 2
+ expect(import_data.projects.map(&:key)).to eq(%w(AA BB))
+ expect(import_data.projects.map(&:scheduled_by).map {|e| e['name']}).to eq %w(tester1 tester2)
+ expect(import_data.projects.map(&:scheduled_by).map {|e| e['user_id']}).to eq [1, 2]
+ end
+ end
+
+ describe '#force_import!' do
+ it 'sets force import when data is nil' do
+ import_data = described_class.new
+
+ import_data.force_import!
+
+ expect(import_data.data['jira'][JiraImportData::FORCE_IMPORT_KEY]).to be true
+ expect(import_data.force_import?).to be false
+ end
+
+ it 'sets force import when data is present but no jira key' do
+ import_data = described_class.new(data: { 'some-key': 'some-data' })
+
+ import_data.force_import!
+
+ expect(import_data.data['jira'][JiraImportData::FORCE_IMPORT_KEY]).to be true
+ expect(import_data.data).to eq({ 'some-key' => 'some-data', 'jira' => { JiraImportData::FORCE_IMPORT_KEY => true } })
+ expect(import_data.force_import?).to be false
+ end
+
+ it 'sets force import when data and jira keys exist' do
+ import_data = described_class.new(data: { 'some-key': 'some-data', 'jira': {} })
+
+ import_data.force_import!
+
+ expect(import_data.data['jira'][JiraImportData::FORCE_IMPORT_KEY]).to be true
+ expect(import_data.data).to eq({ 'some-key' => 'some-data', 'jira' => { JiraImportData::FORCE_IMPORT_KEY => true } })
+ expect(import_data.force_import?).to be false
+ end
+
+ it 'sets force import when data and jira project data exist' do
+ import_data = described_class.new(data: { jira: { projects: [symbol_keys_project], JiraImportData::FORCE_IMPORT_KEY => false }, 'some-key': 'some-data' })
+
+ import_data.force_import!
+
+ expect(import_data.data['jira'][JiraImportData::FORCE_IMPORT_KEY]).to be true
+ expect(import_data.data).to eq({ 'some-key' => 'some-data', 'jira' => { 'projects' => [symbol_keys_project.deep_stringify_keys!], JiraImportData::FORCE_IMPORT_KEY => true } })
+ expect(import_data.force_import?).to be true
+ end
+ end
+
+ describe '#force_import?' do
+ it 'returns false when data blank' do
+ expect(described_class.new.force_import?).to be false
+ end
+
+ it 'returns false if there is no project data present' do
+ import_data = described_class.new(data: { jira: { JiraImportData::FORCE_IMPORT_KEY => true }, 'one-key': 10 })
+
+ expect(import_data.force_import?).to be false
+ end
+
+ it 'returns false when force import set to false' do
+ import_data = described_class.new(data: { jira: { projects: [symbol_keys_project], JiraImportData::FORCE_IMPORT_KEY => false }, 'one-key': 10 })
+
+ expect(import_data.force_import?).to be false
+ end
+
+ it 'returns true when force import set to true' do
+ import_data = described_class.new(data: { jira: { projects: [symbol_keys_project], JiraImportData::FORCE_IMPORT_KEY => true } })
+
+ expect(import_data.force_import?).to be true
+ end
+ end
+end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index ae97e5340e2..15b409b2dcf 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -2353,6 +2353,63 @@ describe Project do
expect(project.add_import_job).to eq(import_jid)
end
end
+
+ context 'jira import' do
+ it 'schedules a jira import job' do
+ project = create(:project, import_type: 'jira')
+
+ expect(Gitlab::JiraImport::Stage::StartImportWorker).to receive(:perform_async).with(project.id).and_return(import_jid)
+ expect(project.add_import_job).to eq(import_jid)
+ end
+ end
+ end
+
+ describe '#jira_import?' do
+ subject(:project) { build(:project, import_type: 'jira') }
+
+ it { expect(project.jira_import?).to be true }
+ it { expect(project.import?).to be true }
+ end
+
+ describe '#jira_force_import?' do
+ let(:imported_jira_project) do
+ JiraImportData::JiraProjectDetails.new('xx', Time.now.strftime('%Y-%m-%d %H:%M:%S'), { user_id: 1, name: 'root' })
+ end
+ let(:jira_import_data) do
+ data = JiraImportData.new
+ data << imported_jira_project
+ data.force_import!
+ data
+ end
+
+ subject(:project) { build(:project, import_type: 'jira', import_data: jira_import_data) }
+
+ it { expect(project.jira_force_import?).to be true }
+ end
+
+ describe '#remove_import_data' do
+ let(:import_data) { ProjectImportData.new(data: { 'test' => 'some data' }) }
+
+ context 'when jira import' do
+ let!(:project) { create(:project, import_type: 'jira', import_data: import_data) }
+
+ it 'does not remove import data' do
+ expect(project.mirror?).to be false
+ expect(project.jira_import?).to be true
+ expect { project.remove_import_data }.not_to change { ProjectImportData.count }
+ end
+ end
+
+ context 'when not mirror neither jira import' do
+ let(:user) { create(:user) }
+ let!(:project) { create(:project, import_type: 'github', import_data: import_data) }
+
+ it 'removes import data' do
+ expect(project.mirror?).to be false
+ expect(project.jira_import?).to be false
+ expect { project.remove_import_data }.to change { ProjectImportData.count }.by(-1)
+ end
+ end
end
describe '#gitlab_project_import?' do