summaryrefslogtreecommitdiff
path: root/spec/models/project_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/project_spec.rb')
-rw-r--r--spec/models/project_spec.rb132
1 files changed, 106 insertions, 26 deletions
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 3044150bca8..7a8dc59039e 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -209,9 +209,14 @@ describe Project do
it 'does not allow new projects beyond user limits' do
project2 = build(:project)
- allow(project2).to receive(:creator).and_return(double(can_create_project?: false, projects_limit: 0).as_null_object)
+
+ allow(project2)
+ .to receive(:creator)
+ .and_return(
+ double(can_create_project?: false, projects_limit: 0).as_null_object
+ )
+
expect(project2).not_to be_valid
- expect(project2.errors[:limit_reached].first).to match(/Personal project creation is not allowed/)
end
describe 'wiki path conflict' do
@@ -1413,6 +1418,24 @@ describe Project do
end
end
+ describe '#visibility_level' do
+ let(:project) { build(:project) }
+
+ subject { project.visibility_level }
+
+ context 'by default' do
+ it { is_expected.to eq(Gitlab::VisibilityLevel::PRIVATE) }
+ end
+
+ context 'when set to INTERNAL in application settings' do
+ before do
+ stub_application_setting(default_project_visibility: Gitlab::VisibilityLevel::INTERNAL)
+ end
+
+ it { is_expected.to eq(Gitlab::VisibilityLevel::INTERNAL) }
+ end
+ end
+
describe '#visibility_level_allowed?' do
let(:project) { create(:project, :internal) }
@@ -2026,29 +2049,6 @@ describe Project do
end
end
- describe '#get_build' do
- let(:project) { create(:project, :repository) }
- let(:ci_pipeline) { create(:ci_pipeline, project: project) }
-
- context 'when build exists' do
- context 'build is associated with project' do
- let(:build) { create(:ci_build, :success, pipeline: ci_pipeline) }
-
- it { expect(project.get_build(build.id)).to eq(build) }
- end
-
- context 'build is not associated with project' do
- let(:build) { create(:ci_build, :success) }
-
- it { expect(project.get_build(build.id)).to be_nil }
- end
- end
-
- context 'build does not exists' do
- it { expect(project.get_build(rand 100)).to be_nil }
- end
- end
-
describe '#import_status' do
context 'with import_state' do
it 'returns the right status' do
@@ -3092,7 +3092,7 @@ describe Project do
context 'when the project is in a subgroup' do
let(:group) { create(:group, :nested) }
- it { is_expected.to be(false) }
+ it { is_expected.to be(true) }
end
end
@@ -4425,6 +4425,86 @@ describe Project do
end
end
+ describe '#leave_pool_repository' do
+ let(:pool) { create(:pool_repository) }
+ let(:project) { create(:project, :repository, pool_repository: pool) }
+
+ it 'removes the membership' do
+ project.leave_pool_repository
+
+ expect(pool.member_projects.reload).not_to include(project)
+ end
+ end
+
+ describe '#check_personal_projects_limit' do
+ context 'when creating a project for a group' do
+ it 'does nothing' do
+ creator = build(:user)
+ project = build(:project, namespace: build(:group), creator: creator)
+
+ allow(creator)
+ .to receive(:can_create_project?)
+ .and_return(false)
+
+ project.check_personal_projects_limit
+
+ expect(project.errors).to be_empty
+ end
+ end
+
+ context 'when the user is not allowed to create a personal project' do
+ let(:user) { build(:user) }
+ let(:project) { build(:project, creator: user) }
+
+ before do
+ allow(user)
+ .to receive(:can_create_project?)
+ .and_return(false)
+ end
+
+ context 'when the project limit is zero' do
+ it 'adds a validation error' do
+ allow(user)
+ .to receive(:projects_limit)
+ .and_return(0)
+
+ project.check_personal_projects_limit
+
+ expect(project.errors[:limit_reached].first)
+ .to match(/Personal project creation is not allowed/)
+ end
+ end
+
+ context 'when the project limit is greater than zero' do
+ it 'adds a validation error' do
+ allow(user)
+ .to receive(:projects_limit)
+ .and_return(5)
+
+ project.check_personal_projects_limit
+
+ expect(project.errors[:limit_reached].first)
+ .to match(/Your project limit is 5 projects/)
+ end
+ end
+ end
+
+ context 'when the user is allowed to create personal projects' do
+ it 'does nothing' do
+ user = build(:user)
+ project = build(:project, creator: user)
+
+ allow(user)
+ .to receive(:can_create_project?)
+ .and_return(true)
+
+ project.check_personal_projects_limit
+
+ expect(project.errors).to be_empty
+ end
+ end
+ end
+
def rugged_config
rugged_repo(project.repository).config
end