summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Leonard <adamjamesleonard@gmail.com>2011-10-25 20:15:11 -0400
committerAdam Leonard <adamjamesleonard@gmail.com>2011-10-25 20:15:11 -0400
commit92f6de03703cb64fb5758c629a83522287af2d19 (patch)
tree7ffe6eacd1ad70f18d3e94120201eb5ba4818190
parent0955863489ee449389ec08afb498803bc6fbb59e (diff)
downloadgitlab-ce-92f6de03703cb64fb5758c629a83522287af2d19.tar.gz
If terms are removed show all results for current status
-rw-r--r--app/controllers/issues_controller.rb13
-rw-r--r--app/views/issues/index.html.haml31
-rw-r--r--spec/requests/issues_spec.rb37
3 files changed, 61 insertions, 20 deletions
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index 71338a6181d..93cf19b6033 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -79,8 +79,17 @@ class IssuesController < ApplicationController
end
def search
- @project = Project.find(params['project'])
- @issues = @project.issues.where("title LIKE ? OR content LIKE ?", "%#{params['terms']}%", "%#{params['terms']}%")
+ terms = params['terms']
+
+ @project = Project.find(params['project'])
+ @issues = case params[:status].to_i
+ when 1 then @project.issues
+ when 2 then @project.issues.closed
+ when 3 then @project.issues.opened.assigned(current_user)
+ else @project.issues.opened
+ end
+
+ @issues = @issues.where("title LIKE ? OR content LIKE ?", "%#{terms}%", "%#{terms}%") unless terms.blank?
render :partial => 'issues'
end
diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml
index 53c4fe668d2..7e4694efa4f 100644
--- a/app/views/issues/index.html.haml
+++ b/app/views/issues/index.html.haml
@@ -2,37 +2,44 @@
- if can? current_user, :write_issue, @project
.left
= form_tag search_project_issues_path(@project), :method => :get, :remote => true do
+ = hidden_field_tag :project_id, @project.id, { :id => 'project_id' }
= search_field_tag :issue_search, nil, { :placeholder => 'Search', :class => 'issue_search' }
= link_to 'New Issue', new_project_issue_path(@project), :remote => true, :class => "lbutton vm"
.right
= form_tag project_issues_path(@project), :method => :get do
.span-2
- = radio_button_tag :f, 0, (params[:f] || "0") == "0", :onclick => "this.form.submit()", :id => "open_issues"
+ = radio_button_tag :f, 0, (params[:f] || "0") == "0", :onclick => "this.form.submit()", :id => "open_issues", :class => "status"
= label_tag "open_issues","Open"
.span-2
- = radio_button_tag :f, 2, params[:f] == "2", :onclick => "this.form.submit()", :id => "closed_issues"
+ = radio_button_tag :f, 2, params[:f] == "2", :onclick => "this.form.submit()", :id => "closed_issues", :class => "status"
= label_tag "closed_issues","Closed"
.span-2
- = radio_button_tag :f, 3, params[:f] == "3", :onclick => "this.form.submit()", :id => "my_issues"
+ = radio_button_tag :f, 3, params[:f] == "3", :onclick => "this.form.submit()", :id => "my_issues", :class => "status"
= label_tag "my_issues","To Me"
-
.span-2
- = radio_button_tag :f, 1, params[:f] == "1", :onclick => "this.form.submit()", :id => "all_issues"
+ = radio_button_tag :f, 1, params[:f] == "1", :onclick => "this.form.submit()", :id => "all_issues", :class => "status"
= label_tag "all_issues","All"
#issues-table-holder= render "issues"
%br
:javascript
+ var href = $('.issue_search').parent().attr('action');
+ var last_terms = '';
+
$('.issue_search').keyup(function() {
- var terms = $(this).val();
- var project_id = 1;
+ var terms = $(this).val();
+ var project_id = $('#project_id').val();
+ var status = $('.status:checked').val();
+ if (terms != last_terms) {
+ last_terms = terms;
- if (terms.length >= 2) {
- $.get($(this).parent().attr('action'), { 'terms': terms, project: project_id }, function(response) {
- $('#issues-table').html(response);
- setSortable();
- });
+ if (terms.length >= 2 || terms.length == 0) {
+ $.get(href, { 'status': status, 'terms': terms, project: project_id }, function(response) {
+ $('#issues-table').html(response);
+ setSortable();
+ });
+ }
}
});
diff --git a/spec/requests/issues_spec.rb b/spec/requests/issues_spec.rb
index d3582d16794..b7f4d411287 100644
--- a/spec/requests/issues_spec.rb
+++ b/spec/requests/issues_spec.rb
@@ -149,21 +149,46 @@ describe "Issues" do
before do
['foobar', 'foobar2', 'gitlab'].each do |title|
@issue = Factory :issue,
- :author => @user,
+ :author => @user,
:assignee => @user,
- :project => project,
- :title => title
+ :project => project,
+ :title => title
@issue.save
end
end
- it "should search and return the correct results" do
+ it "should be able to search on different statuses" do
+ @issue = Issue.first
+ @issue.closed = true
+ @issue.save
+
visit project_issues_path(project)
- fill_in "issue_search", :with => "foobar"
+ choose 'closed_issues'
+ fill_in 'issue_search', :with => 'foobar'
+
+ page.should have_content 'foobar'
+ page.should_not have_content 'foobar2'
+ page.should_not have_content 'gitlab'
+ end
+
+ it "should search for term and return the correct results" do
+ visit project_issues_path(project)
+ fill_in 'issue_search', :with => 'foobar'
+
page.should have_content 'foobar'
page.should have_content 'foobar2'
page.should_not have_content 'gitlab'
end
- end
+ it "should return all results if term has been cleared" do
+ visit project_issues_path(project)
+ fill_in "issue_search", :with => "foobar"
+ # Because fill_in, :with => "" triggers nothing we need to trigger a keyup event
+ page.execute_script("$('.issue_search').val('').keyup();");
+
+ page.should have_content 'foobar'
+ page.should have_content 'foobar2'
+ page.should have_content 'gitlab'
+ end
+ end
end