diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-11-24 00:10:58 +0400 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-11-24 00:10:58 +0400 |
commit | 4a1dc7326479d8fe54f888f5622c0d2a56bca8ad (patch) | |
tree | aed06ad1307b7698a08fc209f4e4e0af13e90c62 /spec | |
parent | abc5edab55ca46657e4ccea552838b9b8d96757f (diff) | |
parent | b76948e6c92ce445249116ef86dbbd4d0b57573a (diff) |
Merge pull request #5661 from jasonblanchard/sorting-project-issues
Added sorting to project issues page
Diffstat (limited to 'spec')
-rw-r--r-- | spec/contexts/issues/list_context_spec.rb | 77 | ||||
-rw-r--r-- | spec/features/issues_spec.rb | 83 |
2 files changed, 160 insertions, 0 deletions
diff --git a/spec/contexts/issues/list_context_spec.rb b/spec/contexts/issues/list_context_spec.rb new file mode 100644 index 00000000000..63f2f3859fa --- /dev/null +++ b/spec/contexts/issues/list_context_spec.rb @@ -0,0 +1,77 @@ +require 'spec_helper' + +describe Issues::ListContext do + + let(:user) { create(:user) } + let(:project) { create(:project, creator: user) } + + titles = ['foo','bar','baz'] + titles.each_with_index do |title, index| + let!(title.to_sym) { create(:issue, title: title, project: project, created_at: Time.now - (index * 60)) } + end + + describe 'sorting' do + + it 'sorts by newest' do + params = {:sort => 'newest'} + + issues = Issues::ListContext.new(project, user, params).execute + issues.first.should eq foo + end + + it 'sorts by oldest' do + params = {:sort => 'oldest'} + + issues = Issues::ListContext.new(project, user, params).execute + issues.first.should eq baz + end + + it 'sorts by recently updated' do + params = {:sort => 'recently_updated'} + baz.updated_at = Time.now + 10 + baz.save + + issues = Issues::ListContext.new(project, user, params).execute + issues.first.should eq baz + end + + it 'sorts by least recently updated' do + params = {:sort => 'last_updated'} + bar.updated_at = Time.now - 10 + bar.save + + issues = Issues::ListContext.new(project, user, params).execute + issues.first.should eq bar + end + + describe 'sorting by milestone' do + + let(:newer_due_milestone) { create(:milestone, :due_date => '2013-12-11') } + let(:later_due_milestone) { create(:milestone, :due_date => '2013-12-12') } + + before :each do + foo.milestone = newer_due_milestone + foo.save + bar.milestone = later_due_milestone + bar.save + end + + it 'sorts by most recently due milestone' do + params = {:sort => 'milestone_due_soon'} + + issues = Issues::ListContext.new(project, user, params).execute + issues.first.should eq foo + + end + + it 'sorts by least recently due milestone' do + params = {:sort => 'milestone_due_later'} + + issues = Issues::ListContext.new(project, user, params).execute + issues.first.should eq bar + end + + end + end + +end diff --git a/spec/features/issues_spec.rb b/spec/features/issues_spec.rb index 8cb984946b4..5b1a14a1ca2 100644 --- a/spec/features/issues_spec.rb +++ b/spec/features/issues_spec.rb @@ -95,4 +95,87 @@ describe "Issues" do page.should have_content 'gitlab' end end + + describe 'filter issue' do + titles = ['foo','bar','baz'] + titles.each_with_index do |title, index| + let!(title.to_sym) { create(:issue, title: title, project: project, created_at: Time.now - (index * 60)) } + end + let(:newer_due_milestone) { create(:milestone, :due_date => '2013-12-11') } + let(:later_due_milestone) { create(:milestone, :due_date => '2013-12-12') } + + it 'sorts by newest' do + visit project_issues_path(project, sort: 'newest') + + page.should have_selector("ul.issues-list li:first-child", :text => 'foo') + page.should have_selector("ul.issues-list li:last-child", :text => 'baz') + end + + it 'sorts by oldest' do + visit project_issues_path(project, sort: 'oldest') + + page.should have_selector("ul.issues-list li:first-child", :text => 'baz') + page.should have_selector("ul.issues-list li:last-child", :text => 'foo') + end + + it 'sorts by most recently updated' do + baz.updated_at = Time.now + 100 + baz.save + visit project_issues_path(project, sort: 'recently_updated') + + page.should have_selector("ul.issues-list li:first-child", :text => 'baz') + end + + it 'sorts by least recently updated' do + baz.updated_at = Time.now - 100 + baz.save + visit project_issues_path(project, sort: 'last_updated') + + page.should have_selector("ul.issues-list li:first-child", :text => 'baz') + end + + describe 'sorting by milestone' do + + before :each do + foo.milestone = newer_due_milestone + foo.save + bar.milestone = later_due_milestone + bar.save + end + + it 'sorts by recently due milestone' do + visit project_issues_path(project, sort: 'milestone_due_soon') + + page.should have_selector("ul.issues-list li:first-child", :text => 'foo') + end + + it 'sorts by least recently due milestone' do + visit project_issues_path(project, sort: 'milestone_due_later') + + page.should have_selector("ul.issues-list li:first-child", :text => 'bar') + end + end + + describe 'combine filter and sort' do + + let(:user2) { create(:user) } + + before :each do + foo.assignee = user2 + foo.save + bar.assignee = user2 + bar.save + end + + it 'sorts with a filter applied' do + visit project_issues_path(project, sort: 'oldest', assignee_id: user2.id) + + page.should have_selector("ul.issues-list li:first-child", :text => 'bar') + page.should have_selector("ul.issues-list li:last-child", :text => 'foo') + page.should_not have_content 'baz' + + end + end + end + end |