Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-11-24 00:10:58 +0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-11-24 00:10:58 +0400
commit4a1dc7326479d8fe54f888f5622c0d2a56bca8ad (patch)
treeaed06ad1307b7698a08fc209f4e4e0af13e90c62 /spec
parentabc5edab55ca46657e4ccea552838b9b8d96757f (diff)
parentb76948e6c92ce445249116ef86dbbd4d0b57573a (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.rb77
-rw-r--r--spec/features/issues_spec.rb83
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