diff options
Diffstat (limited to 'spec/models/project_spec.rb')
-rw-r--r-- | spec/models/project_spec.rb | 108 |
1 files changed, 52 insertions, 56 deletions
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 75887e49dc9..8cccc9ad83e 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -38,6 +38,7 @@ RSpec.describe Project, factory_default: :keep do it { is_expected.to have_many(:hooks) } it { is_expected.to have_many(:protected_branches) } it { is_expected.to have_many(:exported_protected_branches) } + it { is_expected.to have_one(:wiki_repository).class_name('Projects::WikiRepository').inverse_of(:project) } it { is_expected.to have_one(:slack_integration) } it { is_expected.to have_one(:microsoft_teams_integration) } it { is_expected.to have_one(:mattermost_integration) } @@ -597,7 +598,7 @@ RSpec.describe Project, factory_default: :keep do end it 'contains errors related to the project being deleted' do - expect(new_project.errors.full_messages.first).to eq(_('The project is still being deleted. Please try again later.')) + expect(new_project.errors.full_messages).to include(_('The project is still being deleted. Please try again later.')) end end @@ -862,6 +863,7 @@ RSpec.describe Project, factory_default: :keep do it { is_expected.to delegate_method(:environments_access_level).to(:project_feature) } it { is_expected.to delegate_method(:feature_flags_access_level).to(:project_feature) } it { is_expected.to delegate_method(:releases_access_level).to(:project_feature) } + it { is_expected.to delegate_method(:infrastructure_access_level).to(:project_feature) } it { is_expected.to delegate_method(:maven_package_requests_forwarding).to(:namespace) } it { is_expected.to delegate_method(:pypi_package_requests_forwarding).to(:namespace) } it { is_expected.to delegate_method(:npm_package_requests_forwarding).to(:namespace) } @@ -1352,7 +1354,7 @@ RSpec.describe Project, factory_default: :keep do end end - describe '#open_issues_count', :aggregate_failures do + describe '#open_issues_count' do let(:project) { build(:project) } it 'provides the issue count' do @@ -1657,6 +1659,33 @@ RSpec.describe Project, factory_default: :keep do expect(project.reload.star_count).to eq(0) end + it 'does not count stars from blocked users' do + user1 = create(:user) + user2 = create(:user) + project = create(:project, :public) + + expect(project.star_count).to eq(0) + + user1.toggle_star(project) + expect(project.reload.star_count).to eq(1) + + user2.toggle_star(project) + project.reload + expect(project.reload.star_count).to eq(2) + + user1.block + project.reload + expect(project.reload.star_count).to eq(1) + + user2.block + project.reload + expect(project.reload.star_count).to eq(0) + + user1.activate + project.reload + expect(project.reload.star_count).to eq(1) + end + it 'counts stars on the right project' do user = create(:user) project1 = create(:project, :public) @@ -2981,44 +3010,6 @@ RSpec.describe Project, factory_default: :keep do end end - describe '#uses_external_project_ci_config?' do - subject(:uses_external_project_ci_config) { project.uses_external_project_ci_config? } - - let(:project) { build(:project) } - - context 'when ci_config_path is configured with external project' do - before do - project.ci_config_path = '.gitlab-ci.yml@hello/world' - end - - it { is_expected.to eq(true) } - end - - context 'when ci_config_path is nil' do - before do - project.ci_config_path = nil - end - - it { is_expected.to eq(false) } - end - - context 'when ci_config_path is configured with a file in the project' do - before do - project.ci_config_path = 'hello/world/gitlab-ci.yml' - end - - it { is_expected.to eq(false) } - end - - context 'when ci_config_path is configured with remote file' do - before do - project.ci_config_path = 'https://example.org/file.yml' - end - - it { is_expected.to eq(false) } - end - end - describe '#latest_successful_build_for_ref' do let_it_be(:project) { create(:project, :repository) } let_it_be(:pipeline) { create_pipeline(project) } @@ -4507,7 +4498,7 @@ RSpec.describe Project, factory_default: :keep do project_2 = create(:project, :public, :merge_requests_disabled) project_3 = create(:project, :public, :issues_disabled) project_4 = create(:project, :public) - project_4.project_feature.update!(issues_access_level: ProjectFeature::PRIVATE, merge_requests_access_level: ProjectFeature::PRIVATE ) + project_4.project_feature.update!(issues_access_level: ProjectFeature::PRIVATE, merge_requests_access_level: ProjectFeature::PRIVATE) project_ids = described_class.ids_with_issuables_available_for(user).pluck(:id) @@ -5798,7 +5789,7 @@ RSpec.describe Project, factory_default: :keep do end describe '#has_active_integrations?' do - let_it_be(:project) { create(:project) } + let_it_be_with_refind(:project) { create(:project) } it { expect(project.has_active_integrations?).to eq(false) } @@ -5808,6 +5799,20 @@ RSpec.describe Project, factory_default: :keep do expect(project.has_active_integrations?(:merge_request_hooks)).to eq(false) expect(project.has_active_integrations?).to eq(true) end + + it 'caches matching integrations' do + create(:custom_issue_tracker_integration, push_events: true, merge_requests_events: false, project: project) + + expect(project.has_active_integrations?(:merge_request_hooks)).to eq(false) + expect(project.has_active_integrations?).to eq(true) + + count = ActiveRecord::QueryRecorder.new do + expect(project.has_active_integrations?(:merge_request_hooks)).to eq(false) + expect(project.has_active_integrations?).to eq(true) + end.count + + expect(count).to eq(0) + end end describe '#badges' do @@ -7074,7 +7079,7 @@ RSpec.describe Project, factory_default: :keep do subject { project.self_monitoring? } - context 'when the project is instance self monitoring' do + context 'when the project is instance self-monitoring' do before do stub_application_setting(self_monitoring_project_id: project.id) end @@ -7082,7 +7087,7 @@ RSpec.describe Project, factory_default: :keep do it { is_expected.to be true } end - context 'when the project is not self monitoring' do + context 'when the project is not self-monitoring' do it { is_expected.to be false } end end @@ -7124,7 +7129,7 @@ RSpec.describe Project, factory_default: :keep do describe '#export_in_progress?' do let(:project) { build(:project) } - let!(:project_export_job ) { create(:project_export_job, project: project) } + let!(:project_export_job) { create(:project_export_job, project: project) } context 'when project export is enqueued' do it { expect(project.export_in_progress?).to be false } @@ -7149,7 +7154,7 @@ RSpec.describe Project, factory_default: :keep do describe '#export_status' do let(:project) { build(:project) } - let!(:project_export_job ) { create(:project_export_job, project: project) } + let!(:project_export_job) { create(:project_export_job, project: project) } context 'when project export is enqueued' do it { expect(project.export_status).to eq :queued } @@ -7173,7 +7178,7 @@ RSpec.describe Project, factory_default: :keep do end context 'when project export is being regenerated' do - let!(:new_project_export_job ) { create(:project_export_job, project: project) } + let!(:new_project_export_job) { create(:project_export_job, project: project) } before do finish_job(project_export_job) @@ -7475,15 +7480,6 @@ RSpec.describe Project, factory_default: :keep do end end - describe '#ci_config_external_project' do - subject(:ci_config_external_project) { project.ci_config_external_project } - - let(:other_project) { create(:project) } - let(:project) { build(:project, ci_config_path: ".gitlab-ci.yml@#{other_project.full_path}") } - - it { is_expected.to eq(other_project) } - end - describe '#enabled_group_deploy_keys' do let_it_be(:project) { create(:project) } |