Commit 438d7da6 authored by Peter Leitzen's avatar Peter Leitzen

Speed project policy specs for both FOSS and EE

Reuse factories (already `let_it_be`) from shared context where
feasible.
parent 49c6e0a7
...@@ -5,16 +5,9 @@ require 'spec_helper' ...@@ -5,16 +5,9 @@ require 'spec_helper'
RSpec.describe ProjectPolicy do RSpec.describe ProjectPolicy do
include ExternalAuthorizationServiceHelpers include ExternalAuthorizationServiceHelpers
include AdminModeHelper include AdminModeHelper
include_context 'ProjectPolicy context'
let_it_be(:owner) { create(:user) } let(:project) { public_project }
let_it_be(:admin) { create(:admin) }
let_it_be(:maintainer) { create(:user) }
let_it_be(:developer) { create(:user) }
let_it_be(:reporter) { create(:user) }
let_it_be(:guest) { create(:user) }
let_it_be(:non_member) { create(:user) }
let_it_be(:project, refind: true) { create(:project, :public, namespace: owner.namespace) }
let_it_be(:private_project, refind: true) { create(:project, :private, namespace: owner.namespace) }
subject { described_class.new(current_user, project) } subject { described_class.new(current_user, project) }
...@@ -22,21 +15,7 @@ RSpec.describe ProjectPolicy do ...@@ -22,21 +15,7 @@ RSpec.describe ProjectPolicy do
stub_licensed_features(license_scanning: true) stub_licensed_features(license_scanning: true)
end end
before_all do
project.add_maintainer(maintainer)
project.add_developer(developer)
project.add_reporter(reporter)
project.add_guest(guest)
private_project.add_maintainer(maintainer)
private_project.add_developer(developer)
private_project.add_reporter(reporter)
private_project.add_guest(guest)
end
context 'basic permissions' do context 'basic permissions' do
include_context 'ProjectPolicy context'
let(:additional_reporter_permissions) do let(:additional_reporter_permissions) do
%i[read_software_license_policy] %i[read_software_license_policy]
end end
...@@ -178,7 +157,7 @@ RSpec.describe ProjectPolicy do ...@@ -178,7 +157,7 @@ RSpec.describe ProjectPolicy do
end end
context 'when user is logged out' do context 'when user is logged out' do
let(:current_user) { nil } let(:current_user) { anonymous }
it { is_expected.to be_allowed(:read_iteration) } it { is_expected.to be_allowed(:read_iteration) }
it { is_expected.to be_disallowed(:create_iteration, :admin_iteration) } it { is_expected.to be_disallowed(:create_iteration, :admin_iteration) }
...@@ -194,7 +173,7 @@ RSpec.describe ProjectPolicy do ...@@ -194,7 +173,7 @@ RSpec.describe ProjectPolicy do
end end
context 'when user is logged out' do context 'when user is logged out' do
let(:current_user) { nil } let(:current_user) { anonymous }
it { is_expected.to be_disallowed(:read_iteration, :create_iteration, :admin_iteration) } it { is_expected.to be_disallowed(:read_iteration, :create_iteration, :admin_iteration) }
end end
...@@ -207,8 +186,7 @@ RSpec.describe ProjectPolicy do ...@@ -207,8 +186,7 @@ RSpec.describe ProjectPolicy do
context 'when the feature is disabled' do context 'when the feature is disabled' do
before do before do
project.issues_enabled = false project.update!(issues_enabled: false)
project.save!
end end
it 'disables boards permissions' do it 'disables boards permissions' do
...@@ -512,7 +490,7 @@ RSpec.describe ProjectPolicy do ...@@ -512,7 +490,7 @@ RSpec.describe ProjectPolicy do
end end
context 'with anonymous' do context 'with anonymous' do
let(:current_user) { nil } let(:current_user) { anonymous }
it { is_expected.to be_disallowed(permission) } it { is_expected.to be_disallowed(permission) }
end end
...@@ -595,7 +573,7 @@ RSpec.describe ProjectPolicy do ...@@ -595,7 +573,7 @@ RSpec.describe ProjectPolicy do
end end
context 'with anonymous' do context 'with anonymous' do
let(:current_user) { nil } let(:current_user) { anonymous }
it { is_expected.to be_disallowed(:read_threat_monitoring) } it { is_expected.to be_disallowed(:read_threat_monitoring) }
end end
...@@ -735,7 +713,7 @@ RSpec.describe ProjectPolicy do ...@@ -735,7 +713,7 @@ RSpec.describe ProjectPolicy do
end end
context 'with anonymous' do context 'with anonymous' do
let(:current_user) { nil } let(:current_user) { anonymous }
it { is_expected.to be_disallowed(:admin_software_license_policy) } it { is_expected.to be_disallowed(:admin_software_license_policy) }
end end
...@@ -763,7 +741,7 @@ RSpec.describe ProjectPolicy do ...@@ -763,7 +741,7 @@ RSpec.describe ProjectPolicy do
let(:current_user) { create(:user) } let(:current_user) { create(:user) }
context 'with public access to repository' do context 'with public access to repository' do
let(:project) { create(:project, :public) } let(:project) { public_project }
it { is_expected.to be_allowed(:read_dependencies) } it { is_expected.to be_allowed(:read_dependencies) }
end end
...@@ -827,7 +805,7 @@ RSpec.describe ProjectPolicy do ...@@ -827,7 +805,7 @@ RSpec.describe ProjectPolicy do
end end
context 'with anonymous' do context 'with anonymous' do
let(:current_user) { nil } let(:current_user) { anonymous }
it { is_expected.to be_disallowed(:read_dependencies) } it { is_expected.to be_disallowed(:read_dependencies) }
end end
...@@ -887,7 +865,7 @@ RSpec.describe ProjectPolicy do ...@@ -887,7 +865,7 @@ RSpec.describe ProjectPolicy do
end end
context 'with anonymous' do context 'with anonymous' do
let(:current_user) { nil } let(:current_user) { anonymous }
it { is_expected.to be_disallowed(:read_licenses) } it { is_expected.to be_disallowed(:read_licenses) }
end end
...@@ -906,7 +884,6 @@ RSpec.describe ProjectPolicy do ...@@ -906,7 +884,6 @@ RSpec.describe ProjectPolicy do
end end
describe 'publish_status_page' do describe 'publish_status_page' do
let(:anonymous) { nil }
let(:feature) { :status_page } let(:feature) { :status_page }
let(:policy) { :publish_status_page } let(:policy) { :publish_status_page }
...@@ -1152,7 +1129,7 @@ RSpec.describe ProjectPolicy do ...@@ -1152,7 +1129,7 @@ RSpec.describe ProjectPolicy do
end end
context 'with anonymous' do context 'with anonymous' do
let(:current_user) { nil } let(:current_user) { anonymous }
it { is_expected.to be_disallowed(:read_group_timelogs) } it { is_expected.to be_disallowed(:read_group_timelogs) }
end end
......
This diff is collapsed.
# frozen_string_literal: true # frozen_string_literal: true
RSpec.shared_context 'ProjectPolicy context' do RSpec.shared_context 'ProjectPolicy context' do
let_it_be(:anonymous) { nil }
let_it_be(:guest) { create(:user) } let_it_be(:guest) { create(:user) }
let_it_be(:reporter) { create(:user) } let_it_be(:reporter) { create(:user) }
let_it_be(:developer) { create(:user) } let_it_be(:developer) { create(:user) }
let_it_be(:maintainer) { create(:user) } let_it_be(:maintainer) { create(:user) }
let_it_be(:owner) { create(:user) } let_it_be(:owner) { create(:user) }
let_it_be(:admin) { create(:admin) } let_it_be(:admin) { create(:admin) }
let(:project) { create(:project, :public, namespace: owner.namespace) } let_it_be(:non_member) { create(:user) }
let_it_be_with_refind(:private_project) { create(:project, :private, namespace: owner.namespace) }
let_it_be_with_refind(:internal_project) { create(:project, :internal, namespace: owner.namespace) }
let_it_be_with_refind(:public_project) { create(:project, :public, namespace: owner.namespace) }
let(:base_guest_permissions) do let(:base_guest_permissions) do
%i[ %i[
...@@ -86,10 +90,12 @@ RSpec.shared_context 'ProjectPolicy context' do ...@@ -86,10 +90,12 @@ RSpec.shared_context 'ProjectPolicy context' do
let(:maintainer_permissions) { base_maintainer_permissions + additional_maintainer_permissions } let(:maintainer_permissions) { base_maintainer_permissions + additional_maintainer_permissions }
let(:owner_permissions) { base_owner_permissions + additional_owner_permissions } let(:owner_permissions) { base_owner_permissions + additional_owner_permissions }
before do before_all do
project.add_guest(guest) [private_project, internal_project, public_project].each do |project|
project.add_maintainer(maintainer) project.add_guest(guest)
project.add_developer(developer) project.add_reporter(reporter)
project.add_reporter(reporter) project.add_developer(developer)
project.add_maintainer(maintainer)
end
end end
end end
...@@ -59,8 +59,7 @@ RSpec.shared_examples 'project policies as anonymous' do ...@@ -59,8 +59,7 @@ RSpec.shared_examples 'project policies as anonymous' do
let(:project) { create(:project, :public, namespace: group) } let(:project) { create(:project, :public, namespace: group) }
let(:user_permissions) { [:create_merge_request_in, :create_project, :create_issue, :create_note, :upload_file, :award_emoji] } let(:user_permissions) { [:create_merge_request_in, :create_project, :create_issue, :create_note, :upload_file, :award_emoji] }
let(:anonymous_permissions) { guest_permissions - user_permissions } let(:anonymous_permissions) { guest_permissions - user_permissions }
let(:current_user) { anonymous }
subject { described_class.new(nil, project) }
before do before do
create(:group_member, :invited, group: group) create(:group_member, :invited, group: group)
...@@ -78,9 +77,8 @@ RSpec.shared_examples 'project policies as anonymous' do ...@@ -78,9 +77,8 @@ RSpec.shared_examples 'project policies as anonymous' do
end end
context 'abilities for non-public projects' do context 'abilities for non-public projects' do
let(:project) { create(:project, namespace: owner.namespace) } let(:project) { private_project }
let(:current_user) { anonymous }
subject { described_class.new(nil, project) }
it { is_expected.to be_banned } it { is_expected.to be_banned }
end end
...@@ -109,10 +107,10 @@ RSpec.shared_examples 'deploy token does not get confused with user' do ...@@ -109,10 +107,10 @@ RSpec.shared_examples 'deploy token does not get confused with user' do
end end
RSpec.shared_examples 'project policies as guest' do RSpec.shared_examples 'project policies as guest' do
subject { described_class.new(guest, project) }
context 'abilities for non-public projects' do context 'abilities for non-public projects' do
let(:project) { create(:project, namespace: owner.namespace) } let(:project) { private_project }
let(:current_user) { guest }
let(:reporter_public_build_permissions) do let(:reporter_public_build_permissions) do
reporter_permissions - [:read_build, :read_pipeline] reporter_permissions - [:read_build, :read_pipeline]
end end
...@@ -167,9 +165,8 @@ end ...@@ -167,9 +165,8 @@ end
RSpec.shared_examples 'project policies as reporter' do RSpec.shared_examples 'project policies as reporter' do
context 'abilities for non-public projects' do context 'abilities for non-public projects' do
let(:project) { create(:project, namespace: owner.namespace) } let(:project) { private_project }
let(:current_user) { reporter }
subject { described_class.new(reporter, project) }
it do it do
expect_allowed(*guest_permissions) expect_allowed(*guest_permissions)
...@@ -192,9 +189,8 @@ end ...@@ -192,9 +189,8 @@ end
RSpec.shared_examples 'project policies as developer' do RSpec.shared_examples 'project policies as developer' do
context 'abilities for non-public projects' do context 'abilities for non-public projects' do
let(:project) { create(:project, namespace: owner.namespace) } let(:project) { private_project }
let(:current_user) { developer }
subject { described_class.new(developer, project) }
it do it do
expect_allowed(*guest_permissions) expect_allowed(*guest_permissions)
...@@ -217,9 +213,8 @@ end ...@@ -217,9 +213,8 @@ end
RSpec.shared_examples 'project policies as maintainer' do RSpec.shared_examples 'project policies as maintainer' do
context 'abilities for non-public projects' do context 'abilities for non-public projects' do
let(:project) { create(:project, namespace: owner.namespace) } let(:project) { private_project }
let(:current_user) { maintainer }
subject { described_class.new(maintainer, project) }
it do it do
expect_allowed(*guest_permissions) expect_allowed(*guest_permissions)
...@@ -242,9 +237,8 @@ end ...@@ -242,9 +237,8 @@ end
RSpec.shared_examples 'project policies as owner' do RSpec.shared_examples 'project policies as owner' do
context 'abilities for non-public projects' do context 'abilities for non-public projects' do
let(:project) { create(:project, namespace: owner.namespace) } let(:project) { private_project }
let(:current_user) { owner }
subject { described_class.new(owner, project) }
it do it do
expect_allowed(*guest_permissions) expect_allowed(*guest_permissions)
...@@ -267,9 +261,8 @@ end ...@@ -267,9 +261,8 @@ end
RSpec.shared_examples 'project policies as admin with admin mode' do RSpec.shared_examples 'project policies as admin with admin mode' do
context 'abilities for non-public projects', :enable_admin_mode do context 'abilities for non-public projects', :enable_admin_mode do
let(:project) { create(:project, namespace: owner.namespace) } let(:project) { private_project }
let(:current_user) { admin }
subject { described_class.new(admin, project) }
it do it do
expect_allowed(*guest_permissions) expect_allowed(*guest_permissions)
...@@ -316,9 +309,8 @@ end ...@@ -316,9 +309,8 @@ end
RSpec.shared_examples 'project policies as admin without admin mode' do RSpec.shared_examples 'project policies as admin without admin mode' do
context 'abilities for non-public projects' do context 'abilities for non-public projects' do
let(:project) { create(:project, namespace: owner.namespace) } let(:project) { private_project }
let(:current_user) { admin }
subject { described_class.new(admin, project) }
it { is_expected.to be_banned } it { is_expected.to be_banned }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment