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 Feb 26, 2019 by Yorick Peterse
Assignee Loading
Time tracking Loading