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