From d2aa87fdd2c342d4c944456817d209a78b5457c8 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Tue, 22 Feb 2011 09:10:15 -0800 Subject: [PATCH] [#5482] Add issue grouping by deliverable --- init.rb | 2 +- lib/redmine_contracts/patches/query_patch.rb | 15 +++++++ test/integration/issue_filtering_test.rb | 45 ++++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 test/integration/issue_filtering_test.rb diff --git a/init.rb b/init.rb index 6dd2fac..d9edd6b 100644 --- a/init.rb +++ b/init.rb @@ -89,7 +89,7 @@ Dispatcher.to_prepare :redmine_contracts do end unless Query.available_columns.collect(&:name).include?(:deliverable_title) - Query.add_available_column(QueryColumn.new(:deliverable_title, :sortable => "#{Deliverable.table_name}.title")) + Query.add_available_column(QueryColumn.new(:deliverable_title, :sortable => "#{Deliverable.table_name}.title", :groupable => 'deliverable')) end unless Query.available_columns.collect(&:name).include?(:contract_name) diff --git a/lib/redmine_contracts/patches/query_patch.rb b/lib/redmine_contracts/patches/query_patch.rb index d5f4a91..fa8819a 100644 --- a/lib/redmine_contracts/patches/query_patch.rb +++ b/lib/redmine_contracts/patches/query_patch.rb @@ -12,6 +12,8 @@ module RedmineContracts alias_method_chain :available_filters, :contract alias_method_chain :sql_for_field, :contract + + alias_method_chain :issues, :deliverable end end @@ -83,6 +85,19 @@ module RedmineContracts end end + # Add the deliverables into the includes + # + # Used with grouping + def issues_with_deliverable(options={}) + options[:include] ||= [] + options[:include] << :deliverable + + issues_without_deliverable(options) + end + + # TODO: core bug: Query#issue_count_by_group doesn't allow setting + # options like Query#issue does. + end end end diff --git a/test/integration/issue_filtering_test.rb b/test/integration/issue_filtering_test.rb new file mode 100644 index 0000000..b831092 --- /dev/null +++ b/test/integration/issue_filtering_test.rb @@ -0,0 +1,45 @@ +require 'test_helper' + +class IssueFilteringTest < ActionController::IntegrationTest + include Redmine::I18n + + def setup + @project = Project.generate!(:identifier => 'main') + @contract = Contract.generate!(:project => @project) + @manager = User.generate! + @deliverable = FixedDeliverable.generate!(:contract => @contract, :manager => @manager) + @user = User.generate_user_with_permission_to_manage_budget(:project => @project).reload + @user.admin = true # Getting odd permissions issues + @user.save + @issue1 = Issue.generate_for_project!(@project) + @issue2 = Issue.generate_for_project!(@project, :deliverable => @deliverable) + assert_equal @deliverable, @issue2.deliverable + + login_as(@user.login, 'contracts') + end + + should "allow grouping issues by deliverable" do + visit_project(@project) + click_link "Issues" + + assert_select '#group_by' do + assert_select 'option', "Deliverable" + end + + select "Deliverable", :from => 'group_by' + + # Apply link is behind a JavaScript form + visit "/projects/#{@project.identifier}/issues/?set_filter&group_by=deliverable_title" + assert_response :success + + assert_select "tr.group" do + assert_select "td", :text => /None/ + end + + assert_select "tr.group" do + assert_select "td", :text => Regexp.new(@deliverable.title) + end + + end + +end