summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-02-25 14:36:36 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-02-25 14:36:36 +0200
commit75eed4eb834919a8cb5a47b8a05335fd2e74f99e (patch)
treea29861b4e0cae09fa644410c81862ebd9fb44100 /spec
parent9f20580ed7338e72ffeadff86c0d605a2802c957 (diff)
downloadgitlab-ce-75eed4eb834919a8cb5a47b8a05335fd2e74f99e.tar.gz
Implement project collection service
Main purpose is move big amount of methods from user, group, project models and place filtering logic in one place. It also fixes 500 error on group page for PostgreSQL Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'spec')
-rw-r--r--spec/services/projects_collect_service_spec.rb51
1 files changed, 51 insertions, 0 deletions
diff --git a/spec/services/projects_collect_service_spec.rb b/spec/services/projects_collect_service_spec.rb
new file mode 100644
index 00000000000..107c6dce7c0
--- /dev/null
+++ b/spec/services/projects_collect_service_spec.rb
@@ -0,0 +1,51 @@
+require 'spec_helper'
+
+describe Projects::CollectService do
+ let(:user) { create :user }
+ let(:group) { create :group }
+
+ let(:project1) { create(:empty_project, group: group, visibility_level: Project::PUBLIC) }
+ let(:project2) { create(:empty_project, group: group, visibility_level: Project::INTERNAL) }
+ let(:project3) { create(:empty_project, group: group, visibility_level: Project::PRIVATE) }
+ let(:project4) { create(:empty_project, group: group, visibility_level: Project::PRIVATE) }
+
+ context 'non authenticated' do
+ subject { Projects::CollectService.new.execute(nil, group: group) }
+
+ it { should include(project1) }
+ it { should_not include(project2) }
+ it { should_not include(project3) }
+ it { should_not include(project4) }
+ end
+
+ context 'authenticated' do
+ subject { Projects::CollectService.new.execute(user, group: group) }
+
+ it { should include(project1) }
+ it { should include(project2) }
+ it { should_not include(project3) }
+ it { should_not include(project4) }
+ end
+
+ context 'authenticated, project member' do
+ before { project3.team << [user, :developer] }
+
+ subject { Projects::CollectService.new.execute(user, group: group) }
+
+ it { should include(project1) }
+ it { should include(project2) }
+ it { should include(project3) }
+ it { should_not include(project4) }
+ end
+
+ context 'authenticated, group member' do
+ before { group.add_user(user, Gitlab::Access::DEVELOPER) }
+
+ subject { Projects::CollectService.new.execute(user, group: group) }
+
+ it { should include(project1) }
+ it { should include(project2) }
+ it { should include(project3) }
+ it { should include(project4) }
+ end
+end