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:
authorJason Blanchard <jas.blanchard@gmail.com>2013-11-21 02:59:50 +0400
committerJason Blanchard <jas.blanchard@gmail.com>2013-11-24 00:04:50 +0400
commitb76948e6c92ce445249116ef86dbbd4d0b57573a (patch)
treebd731e10171339dc4e3ee8f09ee0673c0c22c469 /spec
parent983bf359945bc9d4ec1e9581e6bc35dac65e3a3b (diff)
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