Skip to content
Snippets Groups Projects
Verified Commit 345b3d4b authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

Update tests and fix Finders readme

parent 645e8d47
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -3,7 +3,7 @@
This type of classes responsible for collectiong items based on different conditions.
To prevent lookup methods in models like this:
 
```
```ruby
class Project
def issues_for_user_filtered_by(user, filter)
# A lot of logic not related to project model itself
Loading
Loading
@@ -15,10 +15,8 @@ issues = project.issues_for_user_filtered_by(user, params)
 
Better use this:
 
```
selector = Finders::Issues.new
issues = selector.execute(project, user, filter)
```ruby
issues = IssuesFinder.new.execute(project, user, filter)
```
 
It will help keep models thiner
require 'spec_helper'
 
describe FilteringService do
describe IssuesFinder do
let(:user) { create :user }
let(:user2) { create :user }
let(:project1) { create(:project) }
let(:project2) { create(:project) }
let(:merge_request1) { create(:merge_request, author: user, source_project: project1, target_project: project2) }
let(:merge_request2) { create(:merge_request, author: user, source_project: project2, target_project: project1) }
let(:merge_request3) { create(:merge_request, author: user, source_project: project2, target_project: project2) }
let(:issue1) { create(:issue, assignee: user, project: project1) }
let(:issue2) { create(:issue, assignee: user, project: project2) }
let(:issue3) { create(:issue, assignee: user2, project: project2) }
Loading
Loading
@@ -18,27 +15,7 @@ describe FilteringService do
project2.team << [user2, :developer]
end
 
describe 'merge requests' do
before :each do
merge_request1
merge_request2
merge_request3
end
it 'should filter by scope' do
params = { scope: 'authored', state: 'opened' }
merge_requests = FilteringService.new.execute(MergeRequest, user, params)
merge_requests.size.should == 3
end
it 'should filter by project' do
params = { project_id: project1.id, scope: 'authored', state: 'opened' }
merge_requests = FilteringService.new.execute(MergeRequest, user, params)
merge_requests.size.should == 1
end
end
describe 'issues' do
describe :execute do
before :each do
issue1
issue2
Loading
Loading
@@ -47,31 +24,31 @@ describe FilteringService do
 
it 'should filter by all' do
params = { scope: "all", state: 'opened' }
issues = FilteringService.new.execute(Issue, user, params)
issues = IssuesFinder.new.execute(user, params)
issues.size.should == 3
end
 
it 'should filter by assignee' do
params = { scope: "assigned-to-me", state: 'opened' }
issues = FilteringService.new.execute(Issue, user, params)
issues = IssuesFinder.new.execute(user, params)
issues.size.should == 2
end
 
it 'should filter by project' do
params = { scope: "assigned-to-me", state: 'opened', project_id: project1.id }
issues = FilteringService.new.execute(Issue, user, params)
issues = IssuesFinder.new.execute(user, params)
issues.size.should == 1
end
 
it 'should be empty for unauthorized user' do
params = { scope: "all", state: 'opened' }
issues = FilteringService.new.execute(Issue, nil, params)
issues = IssuesFinder.new.execute(nil, params)
issues.size.should be_zero
end
 
it 'should not include unauthorized issues' do
params = { scope: "all", state: 'opened' }
issues = FilteringService.new.execute(Issue, user2, params)
issues = IssuesFinder.new.execute(user2, params)
issues.size.should == 2
issues.should_not include(issue1)
issues.should include(issue2)
Loading
Loading
require 'spec_helper'
describe MergeRequestsFinder do
let(:user) { create :user }
let(:user2) { create :user }
let(:project1) { create(:project) }
let(:project2) { create(:project) }
let(:merge_request1) { create(:merge_request, author: user, source_project: project1, target_project: project2) }
let(:merge_request2) { create(:merge_request, author: user, source_project: project2, target_project: project1) }
let(:merge_request3) { create(:merge_request, author: user, source_project: project2, target_project: project2) }
before do
project1.team << [user, :master]
project2.team << [user, :developer]
project2.team << [user2, :developer]
end
describe :execute do
before :each do
merge_request1
merge_request2
merge_request3
end
it 'should filter by scope' do
params = { scope: 'authored', state: 'opened' }
merge_requests = MergeRequestsFinder.new.execute(user, params)
merge_requests.size.should == 3
end
it 'should filter by project' do
params = { project_id: project1.id, scope: 'authored', state: 'opened' }
merge_requests = MergeRequestsFinder.new.execute(user, params)
merge_requests.size.should == 1
end
end
end
require 'spec_helper'
 
describe Projects::CollectService do
describe ProjectsFinder do
let(:user) { create :user }
let(:group) { create :group }
 
Loading
Loading
@@ -10,7 +10,7 @@ describe Projects::CollectService do
let(:project4) { create(:empty_project, group: group, visibility_level: Project::PRIVATE) }
 
context 'non authenticated' do
subject { Projects::CollectService.new.execute(nil, group: group) }
subject { ProjectsFinder.new.execute(nil, group: group) }
 
it { should include(project1) }
it { should_not include(project2) }
Loading
Loading
@@ -19,7 +19,7 @@ describe Projects::CollectService do
end
 
context 'authenticated' do
subject { Projects::CollectService.new.execute(user, group: group) }
subject { ProjectsFinder.new.execute(user, group: group) }
 
it { should include(project1) }
it { should include(project2) }
Loading
Loading
@@ -30,7 +30,7 @@ describe Projects::CollectService do
context 'authenticated, project member' do
before { project3.team << [user, :developer] }
 
subject { Projects::CollectService.new.execute(user, group: group) }
subject { ProjectsFinder.new.execute(user, group: group) }
 
it { should include(project1) }
it { should include(project2) }
Loading
Loading
@@ -41,7 +41,7 @@ describe Projects::CollectService do
context 'authenticated, group member' do
before { group.add_user(user, Gitlab::Access::DEVELOPER) }
 
subject { Projects::CollectService.new.execute(user, group: group) }
subject { ProjectsFinder.new.execute(user, group: group) }
 
it { should include(project1) }
it { should include(project2) }
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment