Extract EE specific files/lines for spec/models (harder but less)
We have the following files containing EE specific code. We should move them to ee/
spec/models/environment_spec.rb
diff --git a/spec/models/environment_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/models/environment_spec.rb
index 2d554326f05..042598ae3a9 100644
--- a/spec/models/environment_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/models/environment_spec.rb
@@ -533,6 +533,10 @@ describe Environment do
end
describe '#deployment_platform' do
+ before do
+ stub_licensed_features(multiple_clusters: true)
+ end
+
context 'when there is a deployment platform for environment' do
let!(:cluster) do
create(:cluster, :provided_by_gcp,
@@ -568,7 +572,7 @@ describe Environment do
shared_examples 'same behavior between KubernetesService and Platform::Kubernetes' do
it 'returns the terminals from the deployment service' do
- expect(project.deployment_platform)
+ expect(environment.deployment_platform)
.to receive(:terminals).with(environment)
.and_return(:fake_terminals)
@@ -599,6 +603,47 @@ describe Environment do
end
end
+ describe '#rollout_status' do
+ shared_examples 'same behavior between KubernetesService and Platform::Kubernetes' do
+ subject { environment.rollout_status }
+
+ context 'when the environment has rollout status' do
+ before do
+ allow(environment).to receive(:has_terminals?).and_return(true)
+ end
+
+ it 'returns the rollout status from the deployment service' do
+ expect(environment.deployment_platform)
+ .to receive(:rollout_status).with(environment)
+ .and_return(:fake_rollout_status)
+
+ is_expected.to eq(:fake_rollout_status)
+ end
+ end
+
+ context 'when the environment does not have rollout status' do
+ before do
+ allow(environment).to receive(:has_terminals?).and_return(false)
+ end
+
+ it { is_expected.to eq(nil) }
+ end
+ end
+
+ context 'when user configured kubernetes from Integration > Kubernetes' do
+ let(:project) { create(:kubernetes_project) }
+
+ it_behaves_like 'same behavior between KubernetesService and Platform::Kubernetes'
+ end
+
+ context 'when user configured kubernetes from CI/CD > Clusters' do
+ let!(:cluster) { create(:cluster, :project, :provided_by_gcp) }
+ let(:project) { cluster.project }
+
+ it_behaves_like 'same behavior between KubernetesService and Platform::Kubernetes'
+ end
+ end
+
describe '#has_metrics?' do
subject { environment.has_metrics? }
@@ -663,7 +708,7 @@ describe Environment do
let(:project) { create(:prometheus_project) }
subject { environment.additional_metrics }
- context 'when the environment has additional metrics' do
+ context 'when the environment has metrics' do
before do
allow(environment).to receive(:has_metrics?).and_return(true)
end
spec/models/namespace_spec.rb
diff --git a/spec/models/namespace_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/models/namespace_spec.rb
index 475fbe56e4d..f059d02b5f1 100644
--- a/spec/models/namespace_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/models/namespace_spec.rb
@@ -374,6 +374,18 @@ describe Namespace do
end
end
+ describe '#actual_size_limit' do
+ let(:namespace) { build(:namespace) }
+
+ before do
+ allow_any_instance_of(ApplicationSetting).to receive(:repository_size_limit).and_return(50)
+ end
+
+ it 'returns the correct size limit' do
+ expect(namespace.actual_size_limit).to eq(50)
+ end
+ end
+
describe '#rm_dir', 'callback' do
let(:repository_storage_path) do
Gitlab::GitalyClient::StorageSettings.allow_disk_access do
@@ -693,6 +705,118 @@ describe Namespace do
end
end
+ describe '#membership_lock with subgroups', :nested_groups do
+ context 'when creating a subgroup' do
+ let(:subgroup) { create(:group, parent: root_group) }
+
+ context 'under a parent with "Membership lock" enabled' do
+ let(:root_group) { create(:group, membership_lock: true) }
+
+ it 'enables "Membership lock" on the subgroup' do
+ expect(subgroup.membership_lock).to be_truthy
+ end
+ end
+
+ context 'under a parent with "Membership lock" disabled' do
+ let(:root_group) { create(:group) }
+
+ it 'does not enable "Membership lock" on the subgroup' do
+ expect(subgroup.membership_lock).to be_falsey
+ end
+ end
+
+ context 'when enabling the parent group "Membership lock"' do
+ let(:root_group) { create(:group) }
+ let!(:subgroup) { create(:group, parent: root_group) }
+
+ it 'the subgroup "Membership lock" not changed' do
+ root_group.update!(membership_lock: true)
+
+ expect(subgroup.reload.membership_lock).to be_falsey
+ end
+ end
+
+ context 'when disabling the parent group "Membership lock" (which was already enabled)' do
+ let(:root_group) { create(:group, membership_lock: true) }
+
+ context 'and the subgroup "Membership lock" is enabled' do
+ let(:subgroup) { create(:group, parent: root_group, membership_lock: true) }
+
+ it 'the subgroup "Membership lock" does not change' do
+ root_group.update!(membership_lock: false)
+
+ expect(subgroup.reload.membership_lock).to be_truthy
+ end
+ end
+
+ context 'but the subgroup "Membership lock" is disabled' do
+ let(:subgroup) { create(:group, parent: root_group) }
+
+ it 'the subgroup "Membership lock" does not change' do
+ root_group.update!(membership_lock: false)
+
+ expect(subgroup.reload.membership_lock?).to be_falsey
+ end
+ end
+ end
+ end
+
+ # Note: Group transfers are not yet implemented
+ context 'when a group is transferred into a root group' do
+ context 'when the root group "Membership lock" is enabled' do
+ let(:root_group) { create(:group, membership_lock: true) }
+
+ context 'when the subgroup "Membership lock" is enabled' do
+ let(:subgroup) { create(:group, membership_lock: true) }
+
+ it 'the subgroup "Membership lock" does not change' do
+ subgroup.parent = root_group
+ subgroup.save!
+
+ expect(subgroup.membership_lock).to be_truthy
+ end
+ end
+
+ context 'when the subgroup "Membership lock" is disabled' do
+ let(:subgroup) { create(:group) }
+
+ it 'the subgroup "Membership lock" not changed' do
+ subgroup.parent = root_group
+ subgroup.save!
+
+ expect(subgroup.membership_lock).to be_falsey
+ end
+ end
+ end
+
+ context 'when the root group "Membership lock" is disabled' do
+ let(:root_group) { create(:group) }
+
+ context 'when the subgroup "Membership lock" is enabled' do
+ let(:subgroup) { create(:group, membership_lock: true) }
+
+ it 'the subgroup "Membership lock" does not change' do
+ subgroup.parent = root_group
+ subgroup.save!
+
+ expect(subgroup.membership_lock).to be_truthy
+ end
+ end
+
+ context 'when the subgroup "Membership lock" is disabled' do
+ let(:subgroup) { create(:group) }
+
+ it 'the subgroup "Membership lock" does not change' do
+ subgroup.parent = root_group
+ subgroup.save!
+
+ expect(subgroup.membership_lock).to be_falsey
+ end
+ end
+ end
+ end
+ end
+
describe '#find_fork_of?' do
let(:project) { create(:project, :public) }
let!(:forked_project) { fork_project(project, namespace.owner, namespace: namespace) }
spec/models/user_spec.rb
diff --git a/spec/models/user_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/models/user_spec.rb
index 85b157a9435..cd0e96706f8 100644
--- a/spec/models/user_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/models/user_spec.rb
@@ -18,6 +18,10 @@ describe User do
describe 'delegations' do
it { is_expected.to delegate_method(:path).to(:namespace).with_prefix }
+
+ # EE
+ it { is_expected.to delegate_method(:shared_runners_minutes_limit).to(:namespace) }
+ it { is_expected.to delegate_method(:shared_runners_minutes_limit=).to(:namespace).with_arguments(133) }
end
describe 'associations' do
@@ -38,6 +42,7 @@ describe User do
it { is_expected.to have_many(:spam_logs).dependent(:destroy) }
it { is_expected.to have_many(:todos) }
it { is_expected.to have_many(:award_emoji).dependent(:destroy) }
+ it { is_expected.to have_many(:path_locks).dependent(:destroy) }
it { is_expected.to have_many(:triggers).dependent(:destroy) }
it { is_expected.to have_many(:builds).dependent(:nullify) }
it { is_expected.to have_many(:pipelines).dependent(:nullify) }
@@ -95,6 +100,10 @@ describe User do
end
end
+ describe 'nested attributes' do
+ it { is_expected.to respond_to(:namespace_attributes=) }
+ end
+
describe 'validations' do
describe 'username' do
it 'validates presence' do
@@ -377,6 +386,25 @@ describe User do
end
end
end
+
+ it 'does not allow a user to be both an auditor and an admin' do
+ user = build(:user, :admin, :auditor)
+
+ expect(user).to be_invalid
+ end
+ end
+
+ describe "non_ldap" do
+ it "retuns non-ldap user" do
+ described_class.delete_all
+ create :user
+ ldap_user = create :omniauth_user, provider: "ldapmain"
+ create :omniauth_user, provider: "gitlub"
+
+ users = described_class.non_ldap
+ expect(users.count).to eq 2
+ expect(users.detect { |user| user.username == ldap_user.username }).to be_nil
+ end
end
describe "scopes" do
@@ -2514,6 +2542,60 @@ describe User do
end
end
+ describe 'the GitLab_Auditor_User add-on' do
+ context 'creating an auditor user' do
+ it "does not allow creating an auditor user if the addon isn't enabled" do
+ stub_licensed_features(auditor_user: false)
+
+ expect(build(:user, :auditor)).to be_invalid
+ end
+
+ it "does not allow creating an auditor user if no license is present" do
+ allow(License).to receive(:current).and_return nil
+
+ expect(build(:user, :auditor)).to be_invalid
+ end
+
+ it "allows creating an auditor user if the addon is enabled" do
+ stub_licensed_features(auditor_user: true)
+
+ expect(build(:user, :auditor)).to be_valid
+ end
+
+ it "allows creating a regular user if the addon isn't enabled" do
+ stub_licensed_features(auditor_user: false)
+
+ expect(build(:user)).to be_valid
+ end
+ end
+
+ context '#auditor?' do
+ it "returns true for an auditor user if the addon is enabled" do
+ stub_licensed_features(auditor_user: true)
+
+ expect(build(:user, :auditor)).to be_auditor
+ end
+
+ it "returns false for an auditor user if the addon is not enabled" do
+ stub_licensed_features(auditor_user: false)
+
+ expect(build(:user, :auditor)).not_to be_auditor
+ end
+
+ it "returns false for an auditor user if a license is not present" do
+ stub_licensed_features(auditor_user: false)
+
+ expect(build(:user, :auditor)).not_to be_auditor
+ end
+
+ it "returns false for a non-auditor user even if the addon is present" do
+ stub_licensed_features(auditor_user: true)
+
+ expect(build(:user)).not_to be_auditor
+ end
+ end
+ end
+
describe '.ghost' do
it "creates a ghost user if one isn't already present" do
ghost = described_class.ghost
Edited by Yorick Peterse