summaryrefslogtreecommitdiff
path: root/spec/models/project_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/project_spec.rb')
-rw-r--r--spec/models/project_spec.rb310
1 files changed, 124 insertions, 186 deletions
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index a71b0eb842a..a2b51684d4d 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -127,6 +127,7 @@ RSpec.describe Project, factory_default: :keep do
it { is_expected.to have_many(:reviews).inverse_of(:project) }
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(:debian_distributions).class_name('Packages::Debian::ProjectDistribution').dependent(:destroy) }
it { is_expected.to have_many(:pipeline_artifacts) }
it { is_expected.to have_many(:terraform_states).class_name('Terraform::State').inverse_of(:project) }
@@ -1066,36 +1067,6 @@ RSpec.describe Project, factory_default: :keep do
end
end
- describe '#cache_has_external_wiki' do
- let_it_be(:project) { create(:project, has_external_wiki: nil) }
-
- it 'stores true if there is any external_wikis' do
- services = double(:service, external_wikis: [ExternalWikiService.new])
- expect(project).to receive(:services).and_return(services)
-
- expect do
- project.cache_has_external_wiki
- end.to change { project.has_external_wiki}.to(true)
- end
-
- it 'stores false if there is no external_wikis' do
- services = double(:service, external_wikis: [])
- expect(project).to receive(:services).and_return(services)
-
- expect do
- project.cache_has_external_wiki
- end.to change { project.has_external_wiki}.to(false)
- end
-
- it 'does not cache data when in a read-only GitLab instance' do
- allow(Gitlab::Database).to receive(:read_only?) { true }
-
- expect do
- project.cache_has_external_wiki
- end.not_to change { project.has_external_wiki }
- end
- end
-
describe '#has_wiki?' do
let(:no_wiki_project) { create(:project, :wiki_disabled, has_external_wiki: false) }
let(:wiki_enabled_project) { create(:project) }
@@ -1135,52 +1106,64 @@ RSpec.describe Project, factory_default: :keep do
describe '#external_wiki' do
let_it_be(:project) { create(:project) }
- context 'with an active external wiki' do
- before do
- create(:service, project: project, type: 'ExternalWikiService', active: true)
- project.external_wiki
- end
+ def subject
+ project.reload.external_wiki
+ end
- it 'sets :has_external_wiki as true' do
- expect(project.has_external_wiki).to be(true)
- end
+ it 'returns an active external wiki' do
+ create(:service, project: project, type: 'ExternalWikiService', active: true)
- it 'sets :has_external_wiki as false if an external wiki service is destroyed later' do
- expect(project.has_external_wiki).to be(true)
+ is_expected.to be_kind_of(ExternalWikiService)
+ end
- project.services.external_wikis.first.destroy
+ it 'does not return an inactive external wiki' do
+ create(:service, project: project, type: 'ExternalWikiService', active: false)
- expect(project.has_external_wiki).to be(false)
- end
+ is_expected.to eq(nil)
end
- context 'with an inactive external wiki' do
- before do
- create(:service, project: project, type: 'ExternalWikiService', active: false)
- end
+ it 'sets Project#has_external_wiki when it is nil' do
+ create(:service, project: project, type: 'ExternalWikiService', active: true)
+ project.update_column(:has_external_wiki, nil)
- it 'sets :has_external_wiki as false' do
- expect(project.has_external_wiki).to be(false)
- end
+ expect { subject }.to change { project.has_external_wiki }.from(nil).to(true)
end
+ end
- context 'with no external wiki' do
- before do
- project.external_wiki
- end
+ describe '#has_external_wiki' do
+ let_it_be(:project) { create(:project) }
- it 'sets :has_external_wiki as false' do
- expect(project.has_external_wiki).to be(false)
- end
+ def subject
+ project.reload.has_external_wiki
+ end
- it 'sets :has_external_wiki as true if an external wiki service is created later' do
- expect(project.has_external_wiki).to be(false)
+ specify { is_expected.to eq(false) }
+ context 'when there is an active external wiki service' do
+ let!(:service) do
create(:service, project: project, type: 'ExternalWikiService', active: true)
+ end
+
+ specify { is_expected.to eq(true) }
+
+ it 'becomes false if the external wiki service is destroyed' do
+ expect do
+ Service.find(service.id).delete
+ end.to change { subject }.to(false)
+ end
- expect(project.has_external_wiki).to be(true)
+ it 'becomes false if the external wiki service becomes inactive' do
+ expect do
+ service.update_column(:active, false)
+ end.to change { subject }.to(false)
end
end
+
+ it 'is false when external wiki service is not active' do
+ create(:service, project: project, type: 'ExternalWikiService', active: false)
+
+ is_expected.to eq(false)
+ end
end
describe '#star_count' do
@@ -1516,63 +1499,13 @@ RSpec.describe Project, factory_default: :keep do
allow(::Gitlab::ServiceDeskEmail).to receive(:config).and_return(config)
end
- context 'when service_desk_custom_address flag is enabled' do
- before do
- stub_feature_flags(service_desk_custom_address: true)
- end
-
- it 'returns custom address when project_key is set' do
- create(:service_desk_setting, project: project, project_key: 'key1')
-
- expect(subject).to eq("foo+#{project.full_path_slug}-key1@bar.com")
- end
+ it 'returns custom address when project_key is set' do
+ create(:service_desk_setting, project: project, project_key: 'key1')
- it_behaves_like 'with incoming email address'
+ expect(subject).to eq("foo+#{project.full_path_slug}-key1@bar.com")
end
- context 'when service_desk_custom_address flag is disabled' do
- before do
- stub_feature_flags(service_desk_custom_address: false)
- end
-
- it_behaves_like 'with incoming email address'
- end
- end
- end
-
- describe '.service_desk_custom_address_enabled?' do
- let_it_be(:project) { create(:project, service_desk_enabled: true) }
-
- subject(:address_enabled) { project.service_desk_custom_address_enabled? }
-
- context 'when service_desk_email is enabled' do
- before do
- allow(::Gitlab::ServiceDeskEmail).to receive(:enabled?).and_return(true)
- end
-
- it 'returns true' do
- expect(address_enabled).to be_truthy
- end
-
- context 'when service_desk_custom_address flag is disabled' do
- before do
- stub_feature_flags(service_desk_custom_address: false)
- end
-
- it 'returns false' do
- expect(address_enabled).to be_falsey
- end
- end
- end
-
- context 'when service_desk_email is disabled' do
- before do
- allow(::Gitlab::ServiceDeskEmail).to receive(:enabled?).and_return(false)
- end
-
- it 'returns false when service_desk_email is disabled' do
- expect(address_enabled).to be_falsey
- end
+ it_behaves_like 'with incoming email address'
end
end
@@ -3044,56 +2977,9 @@ RSpec.describe Project, factory_default: :keep do
end
end
- describe '#pushes_since_gc' do
- let(:project) { build_stubbed(:project) }
-
- after do
- project.reset_pushes_since_gc
- end
-
- context 'without any pushes' do
- it 'returns 0' do
- expect(project.pushes_since_gc).to eq(0)
- end
- end
-
- context 'with a number of pushes' do
- it 'returns the number of pushes' do
- 3.times { project.increment_pushes_since_gc }
-
- expect(project.pushes_since_gc).to eq(3)
- end
- end
- end
-
- describe '#increment_pushes_since_gc' do
- let(:project) { build_stubbed(:project) }
-
- after do
- project.reset_pushes_since_gc
- end
-
- it 'increments the number of pushes since the last GC' do
- 3.times { project.increment_pushes_since_gc }
-
- expect(project.pushes_since_gc).to eq(3)
- end
- end
-
- describe '#reset_pushes_since_gc' do
- let(:project) { build_stubbed(:project) }
-
- after do
- project.reset_pushes_since_gc
- end
-
- it 'resets the number of pushes since the last GC' do
- 3.times { project.increment_pushes_since_gc }
-
- project.reset_pushes_since_gc
-
- expect(project.pushes_since_gc).to eq(0)
- end
+ it_behaves_like 'can housekeep repository' do
+ let(:resource) { build_stubbed(:project) }
+ let(:resource_key) { 'projects' }
end
describe '#deployment_variables' do
@@ -4548,6 +4434,24 @@ RSpec.describe Project, factory_default: :keep do
end
end
+ describe '#predefined_project_variables' do
+ let_it_be(:project) { create(:project, :repository) }
+
+ subject { project.predefined_project_variables.to_runner_variables }
+
+ specify do
+ expect(subject).to include({ key: 'CI_PROJECT_CONFIG_PATH', value: Ci::Pipeline::DEFAULT_CONFIG_PATH, public: true, masked: false })
+ end
+
+ context 'when ci config path is overridden' do
+ before do
+ project.update!(ci_config_path: 'random.yml')
+ end
+
+ it { expect(subject).to include({ key: 'CI_PROJECT_CONFIG_PATH', value: 'random.yml', public: true, masked: false }) }
+ end
+ end
+
describe '#auto_devops_enabled?' do
before do
Feature.enable_percentage_of_actors(:force_autodevops_on_by_default, 0)
@@ -6002,6 +5906,43 @@ RSpec.describe Project, factory_default: :keep do
end
end
+ describe '#set_first_pages_deployment!' do
+ let(:project) { create(:project) }
+ let(:deployment) { create(:pages_deployment, project: project) }
+
+ it "creates new metadata record if none exists yet and sets deployment" do
+ project.pages_metadatum.destroy!
+ project.reload
+
+ project.set_first_pages_deployment!(deployment)
+
+ expect(project.pages_metadatum.reload.pages_deployment).to eq(deployment)
+ end
+
+ it "updates the existing metadara record with deployment" do
+ expect do
+ project.set_first_pages_deployment!(deployment)
+ end.to change { project.pages_metadatum.reload.pages_deployment }.from(nil).to(deployment)
+ end
+
+ it 'only updates metadata for this project' do
+ other_project = create(:project)
+
+ expect do
+ project.set_first_pages_deployment!(deployment)
+ end.not_to change { other_project.pages_metadatum.reload.pages_deployment }.from(nil)
+ end
+
+ it 'does nothing if metadata already references some deployment' do
+ existing_deployment = create(:pages_deployment, project: project)
+ project.set_first_pages_deployment!(existing_deployment)
+
+ expect do
+ project.set_first_pages_deployment!(deployment)
+ end.not_to change { project.pages_metadatum.reload.pages_deployment }.from(existing_deployment)
+ end
+ end
+
describe '#has_pool_repsitory?' do
it 'returns false when it does not have a pool repository' do
subject = create(:project, :repository)
@@ -6275,28 +6216,6 @@ RSpec.describe Project, factory_default: :keep do
end
end
- describe '#alerts_service_activated?' do
- let!(:project) { create(:project) }
-
- subject { project.alerts_service_activated? }
-
- context 'when project has an activated alerts service' do
- before do
- create(:alerts_service, project: project)
- end
-
- it { is_expected.to be_truthy }
- end
-
- context 'when project has an inactive alerts service' do
- before do
- create(:alerts_service, :inactive, project: project)
- end
-
- it { is_expected.to be_falsey }
- end
- end
-
describe '#prometheus_service_active?' do
let(:project) { create(:project) }
@@ -6456,6 +6375,25 @@ RSpec.describe Project, factory_default: :keep do
end
end
+ describe 'with Debian Distributions' do
+ subject { create(:project) }
+
+ let!(:distributions) { create_list(:debian_project_distribution, 2, :with_file, container: subject) }
+
+ it 'removes distribution files on removal' do
+ distribution_file_paths = distributions.map do |distribution|
+ distribution.file.path
+ end
+
+ expect { subject.destroy }
+ .to change {
+ distribution_file_paths.select do |path|
+ File.exist? path
+ end.length
+ }.from(distribution_file_paths.length).to(0)
+ end
+ end
+
describe '#environments_for_scope' do
let_it_be(:project, reload: true) { create(:project) }