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/project_spec.rb')
-rw-r--r--spec/models/project_spec.rb101
1 files changed, 65 insertions, 36 deletions
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index fe971832695..53a213891e9 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -72,6 +72,7 @@ RSpec.describe Project do
it { is_expected.to have_one(:last_event).class_name('Event') }
it { is_expected.to have_one(:forked_from_project).through(:fork_network_member) }
it { is_expected.to have_one(:auto_devops).class_name('ProjectAutoDevops') }
+ it { is_expected.to have_one(:tracing_setting).class_name('ProjectTracingSetting') }
it { is_expected.to have_one(:error_tracking_setting).class_name('ErrorTracking::ProjectErrorTrackingSetting') }
it { is_expected.to have_one(:project_setting) }
it { is_expected.to have_one(:alerting_setting).class_name('Alerting::ProjectAlertingSetting') }
@@ -116,6 +117,7 @@ RSpec.describe Project do
it { is_expected.to have_many(:prometheus_alert_events) }
it { is_expected.to have_many(:self_managed_prometheus_alert_events) }
it { is_expected.to have_many(:alert_management_alerts) }
+ it { is_expected.to have_many(:alert_management_http_integrations) }
it { is_expected.to have_many(:jira_imports) }
it { is_expected.to have_many(:metrics_users_starred_dashboards).inverse_of(:project) }
it { is_expected.to have_many(:repository_storage_moves) }
@@ -123,6 +125,7 @@ RSpec.describe Project do
it { is_expected.to have_many(:packages).class_name('Packages::Package') }
it { is_expected.to have_many(:package_files).class_name('Packages::PackageFile') }
it { is_expected.to have_many(:pipeline_artifacts) }
+ it { is_expected.to have_many(:terraform_states).class_name('Terraform::State').inverse_of(:project) }
# GitLab Pages
it { is_expected.to have_many(:pages_domains) }
@@ -133,6 +136,7 @@ RSpec.describe Project do
let_it_be(:container) { create(:project, :repository, path: 'somewhere') }
let(:stubbed_container) { build_stubbed(:project) }
let(:expected_full_path) { "#{container.namespace.full_path}/somewhere" }
+ let(:expected_lfs_enabled) { true }
end
it_behaves_like 'model with wiki' do
@@ -4329,7 +4333,7 @@ RSpec.describe Project do
end
it 'schedules HashedStorage::ProjectMigrateWorker with delayed start when the wiki repo is in use' do
- Gitlab::ReferenceCounter.new(Gitlab::GlRepository::WIKI.identifier_for_container(project)).increase
+ Gitlab::ReferenceCounter.new(Gitlab::GlRepository::WIKI.identifier_for_container(project.wiki)).increase
expect(HashedStorage::ProjectMigrateWorker).to receive(:perform_in)
@@ -4975,15 +4979,21 @@ RSpec.describe Project do
context "with an empty repository" do
let_it_be(:project) { create(:project_empty_repo) }
- context "Gitlab::CurrentSettings.default_branch_name is unavailable" do
+ context "group.default_branch_name is available" do
+ let(:project_group) { create(:group) }
+ let(:project) { create(:project, path: 'avatar', namespace: project_group) }
+
before do
expect(Gitlab::CurrentSettings)
+ .not_to receive(:default_branch_name)
+
+ expect(project.group)
.to receive(:default_branch_name)
- .and_return(nil)
+ .and_return('example_branch')
end
- it "returns that value" do
- expect(project.default_branch).to be_nil
+ it "returns the group default value" do
+ expect(project.default_branch).to eq("example_branch")
end
end
@@ -4991,11 +5001,23 @@ RSpec.describe Project do
before do
expect(Gitlab::CurrentSettings)
.to receive(:default_branch_name)
- .and_return('example_branch')
+ .and_return(example_branch_name)
end
- it "returns that value" do
- expect(project.default_branch).to eq("example_branch")
+ context "is missing or nil" do
+ let(:example_branch_name) { nil }
+
+ it "returns nil" do
+ expect(project.default_branch).to be_nil
+ end
+ end
+
+ context "is present" do
+ let(:example_branch_name) { "example_branch_name" }
+
+ it "returns the expected branch name" do
+ expect(project.default_branch).to eq(example_branch_name)
+ end
end
end
end
@@ -5487,12 +5509,13 @@ RSpec.describe Project do
describe '#find_or_initialize_services' do
it 'returns only enabled services' do
allow(Service).to receive(:available_services_names).and_return(%w[prometheus pushover teamcity])
+ allow(Service).to receive(:project_specific_services_names).and_return(%w[asana])
allow(subject).to receive(:disabled_services).and_return(%w[prometheus])
services = subject.find_or_initialize_services
- expect(services.count).to eq(2)
- expect(services.map(&:title)).to eq(['JetBrains TeamCity CI', 'Pushover'])
+ expect(services.count).to eq(3)
+ expect(services.map(&:title)).to eq(['Asana', 'JetBrains TeamCity CI', 'Pushover'])
end
end
@@ -5563,32 +5586,6 @@ RSpec.describe Project do
end
end
- describe '.for_repository_storage' do
- it 'returns the projects for a given repository storage' do
- stub_storage_settings('test_second_storage' => {
- 'path' => TestEnv::SECOND_STORAGE_PATH,
- 'gitaly_address' => Gitlab.config.repositories.storages.default.gitaly_address
- })
- expected_project = create(:project, repository_storage: 'default')
- create(:project, repository_storage: 'test_second_storage')
-
- expect(described_class.for_repository_storage('default')).to eq([expected_project])
- end
- end
-
- describe '.excluding_repository_storage' do
- it 'returns the projects excluding the given repository storage' do
- stub_storage_settings('test_second_storage' => {
- 'path' => TestEnv::SECOND_STORAGE_PATH,
- 'gitaly_address' => Gitlab.config.repositories.storages.default.gitaly_address
- })
- expected_project = create(:project, repository_storage: 'test_second_storage')
- create(:project, repository_storage: 'default')
-
- expect(described_class.excluding_repository_storage('default')).to eq([expected_project])
- end
- end
-
describe '.deployments' do
subject { project.deployments }
@@ -5812,6 +5809,38 @@ RSpec.describe Project do
end
end
+ describe 'validation #changing_shared_runners_enabled_is_allowed' do
+ using RSpec::Parameterized::TableSyntax
+
+ where(:shared_runners_setting, :project_shared_runners_enabled, :valid_record) do
+ 'enabled' | true | true
+ 'enabled' | false | true
+ 'disabled_with_override' | true | true
+ 'disabled_with_override' | false | true
+ 'disabled_and_unoverridable' | true | false
+ 'disabled_and_unoverridable' | false | true
+ end
+
+ with_them do
+ let(:group) { create(:group) }
+ let(:project) { build(:project, namespace: group, shared_runners_enabled: project_shared_runners_enabled) }
+
+ before do
+ allow_next_found_instance_of(Group) do |group|
+ allow(group).to receive(:shared_runners_setting).and_return(shared_runners_setting)
+ end
+ end
+
+ it 'validates the configuration' do
+ expect(project.valid?).to eq(valid_record)
+
+ unless valid_record
+ expect(project.errors[:shared_runners_enabled]).to contain_exactly('cannot be enabled because parent group does not allow it')
+ end
+ end
+ end
+ end
+
describe '#mark_pages_as_deployed' do
let(:project) { create(:project) }
let(:artifacts_archive) { create(:ci_job_artifact, project: project) }