Update tests and fix Finders readme
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
645e8d4705
commit
345b3d4b72
4 changed files with 52 additions and 40 deletions
|
@ -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
|
||||
|
@ -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
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
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) }
|
||||
|
@ -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
|
||||
|
@ -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)
|
37
spec/finders/merge_requests_finder_spec.rb
Normal file
37
spec/finders/merge_requests_finder_spec.rb
Normal file
|
@ -0,0 +1,37 @@
|
|||
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
|
|
@ -1,6 +1,6 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Projects::CollectService do
|
||||
describe ProjectsFinder do
|
||||
let(:user) { create :user }
|
||||
let(:group) { create :group }
|
||||
|
||||
|
@ -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) }
|
||||
|
@ -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) }
|
||||
|
@ -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) }
|
||||
|
@ -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…
Reference in a new issue