From 63866407f123f0f991c164d5e715e3fbbcdf53df Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 7 Nov 2010 15:38:51 +0000 Subject: [PATCH] Fixed: unchecking status filter on the issue list has no effect (#6844). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4387 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/helpers/queries_helper.rb | 7 +++-- app/models/query.rb | 6 +++-- app/views/queries/_filters.rhtml | 1 + test/functional/issues_controller_test.rb | 33 ++++++++++++++++++++++- 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/app/helpers/queries_helper.rb b/app/helpers/queries_helper.rb index 26be63693..e9ab3769f 100644 --- a/app/helpers/queries_helper.rb +++ b/app/helpers/queries_helper.rb @@ -78,10 +78,9 @@ module QueriesHelper # Give it a name, required to be valid @query = Query.new(:name => "_") @query.project = @project - if params[:fields] and params[:fields].is_a? Array - params[:fields].each do |field| - @query.add_filter(field, params[:operators][field], params[:values][field]) - end + if params[:fields] + @query.filters = {} + @query.add_filters(params[:fields], params[:operators], params[:values]) else @query.available_filters.keys.each do |field| @query.add_short_filter(field, params[field]) if params[field] diff --git a/app/models/query.rb b/app/models/query.rb index 638cc8226..7c246f9ae 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -258,8 +258,10 @@ class Query < ActiveRecord::Base # Add multiple filters using +add_filter+ def add_filters(fields, operators, values) - fields.each do |field| - add_filter(field, operators[field], values[field]) + if fields.is_a?(Array) && operators.is_a?(Hash) && values.is_a?(Hash) + fields.each do |field| + add_filter(field, operators[field], values[field]) + end end end diff --git a/app/views/queries/_filters.rhtml b/app/views/queries/_filters.rhtml index 20640eb8d..29f916eb7 100644 --- a/app/views/queries/_filters.rhtml +++ b/app/views/queries/_filters.rhtml @@ -114,3 +114,4 @@ Event.observe(document,"dom:loaded", apply_filters_observer); +<%= hidden_field_tag 'fields[]', '' %> diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 1fdff9214..e81556d5f 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -125,11 +125,42 @@ class IssuesControllerTest < ActionController::TestCase assert_tag :tag => 'a', :content => /Issue of a private subproject/ end - def test_index_with_project_and_filter + def test_index_with_project_and_default_filter get :index, :project_id => 1, :set_filter => 1 assert_response :success assert_template 'index.rhtml' assert_not_nil assigns(:issues) + + query = assigns(:query) + assert_not_nil query + # default filter + assert_equal({'status_id' => {:operator => 'o', :values => ['']}}, query.filters) + end + + def test_index_with_project_and_filter + get :index, :project_id => 1, :set_filter => 1, + :fields => ['tracker_id'], + :operators => {'tracker_id' => '='}, + :values => {'tracker_id' => ['1']} + assert_response :success + assert_template 'index.rhtml' + assert_not_nil assigns(:issues) + + query = assigns(:query) + assert_not_nil query + assert_equal({'tracker_id' => {:operator => '=', :values => ['1']}}, query.filters) + end + + def test_index_with_project_and_empty_filters + get :index, :project_id => 1, :set_filter => 1, :fields => [''] + assert_response :success + assert_template 'index.rhtml' + assert_not_nil assigns(:issues) + + query = assigns(:query) + assert_not_nil query + # no filter + assert_equal({}, query.filters) end def test_index_with_query