##// END OF EJS Templates
Adds estimated hours to issue filters (#1678)....
Jean-Philippe Lang -
r1687:6ddea3396b6b
parent child
Show More
@@ -88,7 +88,7 class Query < ActiveRecord::Base
88 :date_past => [ ">t-", "<t-", "t-", "t", "w" ],
88 :date_past => [ ">t-", "<t-", "t-", "t", "w" ],
89 :string => [ "=", "~", "!", "!~" ],
89 :string => [ "=", "~", "!", "!~" ],
90 :text => [ "~", "!~" ],
90 :text => [ "~", "!~" ],
91 :integer => [ "=", ">=", "<=" ] }
91 :integer => [ "=", ">=", "<=", "!*", "*" ] }
92
92
93 cattr_reader :operators_by_filter_type
93 cattr_reader :operators_by_filter_type
94
94
@@ -152,7 +152,8 class Query < ActiveRecord::Base
152 "updated_on" => { :type => :date_past, :order => 10 },
152 "updated_on" => { :type => :date_past, :order => 10 },
153 "start_date" => { :type => :date, :order => 11 },
153 "start_date" => { :type => :date, :order => 11 },
154 "due_date" => { :type => :date, :order => 12 },
154 "due_date" => { :type => :date, :order => 12 },
155 "done_ratio" => { :type => :integer, :order => 13 }}
155 "estimated_hours" => { :type => :integer, :order => 13 },
156 "done_ratio" => { :type => :integer, :order => 14 }}
156
157
157 user_values = []
158 user_values = []
158 user_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
159 user_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
@@ -26,11 +26,17 class QueryTest < Test::Unit::TestCase
26 assert !query.available_filters.has_key?('cf_3')
26 assert !query.available_filters.has_key?('cf_3')
27 end
27 end
28
28
29 def find_issues_with_query(query)
30 Issue.find :all,
31 :include => [ :assigned_to, :status, :tracker, :project, :priority ],
32 :conditions => query.statement
33 end
34
29 def test_query_with_multiple_custom_fields
35 def test_query_with_multiple_custom_fields
30 query = Query.find(1)
36 query = Query.find(1)
31 assert query.valid?
37 assert query.valid?
32 assert query.statement.include?("#{CustomValue.table_name}.value IN ('MySQL')")
38 assert query.statement.include?("#{CustomValue.table_name}.value IN ('MySQL')")
33 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
39 issues = find_issues_with_query(query)
34 assert_equal 1, issues.length
40 assert_equal 1, issues.length
35 assert_equal Issue.find(3), issues.first
41 assert_equal Issue.find(3), issues.first
36 end
42 end
@@ -41,72 +47,80 class QueryTest < Test::Unit::TestCase
41 query.add_filter('cf_1', '!*', [''])
47 query.add_filter('cf_1', '!*', [''])
42 assert query.statement.include?("#{Issue.table_name}.fixed_version_id IS NULL")
48 assert query.statement.include?("#{Issue.table_name}.fixed_version_id IS NULL")
43 assert query.statement.include?("#{CustomValue.table_name}.value IS NULL OR #{CustomValue.table_name}.value = ''")
49 assert query.statement.include?("#{CustomValue.table_name}.value IS NULL OR #{CustomValue.table_name}.value = ''")
44 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
50 find_issues_with_query(query)
45 end
51 end
46
52
53 def test_operator_none_for_integer
54 query = Query.new(:project => Project.find(1), :name => '_')
55 query.add_filter('estimated_hours', '!*', [''])
56 issues = find_issues_with_query(query)
57 assert !issues.empty?
58 assert issues.all? {|i| !i.estimated_hours}
59 end
60
47 def test_operator_all
61 def test_operator_all
48 query = Query.new(:project => Project.find(1), :name => '_')
62 query = Query.new(:project => Project.find(1), :name => '_')
49 query.add_filter('fixed_version_id', '*', [''])
63 query.add_filter('fixed_version_id', '*', [''])
50 query.add_filter('cf_1', '*', [''])
64 query.add_filter('cf_1', '*', [''])
51 assert query.statement.include?("#{Issue.table_name}.fixed_version_id IS NOT NULL")
65 assert query.statement.include?("#{Issue.table_name}.fixed_version_id IS NOT NULL")
52 assert query.statement.include?("#{CustomValue.table_name}.value IS NOT NULL AND #{CustomValue.table_name}.value <> ''")
66 assert query.statement.include?("#{CustomValue.table_name}.value IS NOT NULL AND #{CustomValue.table_name}.value <> ''")
53 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
67 find_issues_with_query(query)
54 end
68 end
55
69
56 def test_operator_greater_than
70 def test_operator_greater_than
57 query = Query.new(:project => Project.find(1), :name => '_')
71 query = Query.new(:project => Project.find(1), :name => '_')
58 query.add_filter('done_ratio', '>=', ['40'])
72 query.add_filter('done_ratio', '>=', ['40'])
59 assert query.statement.include?("#{Issue.table_name}.done_ratio >= 40")
73 assert query.statement.include?("#{Issue.table_name}.done_ratio >= 40")
60 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
74 find_issues_with_query(query)
61 end
75 end
62
76
63 def test_operator_in_more_than
77 def test_operator_in_more_than
64 query = Query.new(:project => Project.find(1), :name => '_')
78 query = Query.new(:project => Project.find(1), :name => '_')
65 query.add_filter('due_date', '>t+', ['15'])
79 query.add_filter('due_date', '>t+', ['15'])
66 assert query.statement.include?("#{Issue.table_name}.due_date >=")
80 assert query.statement.include?("#{Issue.table_name}.due_date >=")
67 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
81 find_issues_with_query(query)
68 end
82 end
69
83
70 def test_operator_in_less_than
84 def test_operator_in_less_than
71 query = Query.new(:project => Project.find(1), :name => '_')
85 query = Query.new(:project => Project.find(1), :name => '_')
72 query.add_filter('due_date', '<t+', ['15'])
86 query.add_filter('due_date', '<t+', ['15'])
73 assert query.statement.include?("#{Issue.table_name}.due_date BETWEEN")
87 assert query.statement.include?("#{Issue.table_name}.due_date BETWEEN")
74 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
88 find_issues_with_query(query)
75 end
89 end
76
90
77 def test_operator_today
91 def test_operator_today
78 query = Query.new(:project => Project.find(1), :name => '_')
92 query = Query.new(:project => Project.find(1), :name => '_')
79 query.add_filter('due_date', 't', [''])
93 query.add_filter('due_date', 't', [''])
80 assert query.statement.include?("#{Issue.table_name}.due_date BETWEEN")
94 assert query.statement.include?("#{Issue.table_name}.due_date BETWEEN")
81 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
95 find_issues_with_query(query)
82 end
96 end
83
97
84 def test_operator_this_week_on_date
98 def test_operator_this_week_on_date
85 query = Query.new(:project => Project.find(1), :name => '_')
99 query = Query.new(:project => Project.find(1), :name => '_')
86 query.add_filter('due_date', 'w', [''])
100 query.add_filter('due_date', 'w', [''])
87 assert query.statement.include?("#{Issue.table_name}.due_date BETWEEN")
101 assert query.statement.include?("#{Issue.table_name}.due_date BETWEEN")
88 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
102 find_issues_with_query(query)
89 end
103 end
90
104
91 def test_operator_this_week_on_datetime
105 def test_operator_this_week_on_datetime
92 query = Query.new(:project => Project.find(1), :name => '_')
106 query = Query.new(:project => Project.find(1), :name => '_')
93 query.add_filter('created_on', 'w', [''])
107 query.add_filter('created_on', 'w', [''])
94 assert query.statement.include?("#{Issue.table_name}.created_on BETWEEN")
108 assert query.statement.include?("#{Issue.table_name}.created_on BETWEEN")
95 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
109 find_issues_with_query(query)
96 end
110 end
97
111
98 def test_operator_contains
112 def test_operator_contains
99 query = Query.new(:project => Project.find(1), :name => '_')
113 query = Query.new(:project => Project.find(1), :name => '_')
100 query.add_filter('subject', '~', ['string'])
114 query.add_filter('subject', '~', ['string'])
101 assert query.statement.include?("#{Issue.table_name}.subject LIKE '%string%'")
115 assert query.statement.include?("#{Issue.table_name}.subject LIKE '%string%'")
102 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
116 find_issues_with_query(query)
103 end
117 end
104
118
105 def test_operator_does_not_contains
119 def test_operator_does_not_contains
106 query = Query.new(:project => Project.find(1), :name => '_')
120 query = Query.new(:project => Project.find(1), :name => '_')
107 query.add_filter('subject', '!~', ['string'])
121 query.add_filter('subject', '!~', ['string'])
108 assert query.statement.include?("#{Issue.table_name}.subject NOT LIKE '%string%'")
122 assert query.statement.include?("#{Issue.table_name}.subject NOT LIKE '%string%'")
109 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
123 find_issues_with_query(query)
110 end
124 end
111
125
112 def test_default_columns
126 def test_default_columns
General Comments 0
You need to be logged in to leave comments. Login now