diff options
Diffstat (limited to 'spec/models/project_spec.rb')
-rw-r--r-- | spec/models/project_spec.rb | 101 |
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) } |