diff --git a/app/views/issues/_edit_deliverable.html.erb b/app/views/issues/_edit_deliverable.html.erb new file mode 100644 index 0000000..7f519e4 --- /dev/null +++ b/app/views/issues/_edit_deliverable.html.erb @@ -0,0 +1,9 @@ +<% if project.module_enabled?(:contracts) %> +
+ <% options = project.contracts.inject([]) {|data, contract| + data << [contract.name, contract.deliverables.collect {|d| [d.title, d.id]} ] + } %> + <%= form.select(:deliverable_id, grouped_options_for_select(options, issue.deliverable_id), {:include_blank => true}) %> +
+<% end %> + diff --git a/lib/redmine_contracts/hooks/view_issues_form_details_bottom_hook.rb b/lib/redmine_contracts/hooks/view_issues_form_details_bottom_hook.rb index 65b1df1..ec3caae 100644 --- a/lib/redmine_contracts/hooks/view_issues_form_details_bottom_hook.rb +++ b/lib/redmine_contracts/hooks/view_issues_form_details_bottom_hook.rb @@ -1,9 +1,7 @@ module RedmineContracts module Hooks class ViewIssuesFormDetailsBottomHook < Redmine::Hook::ViewListener - def view_issues_form_details_bottom(context={}) - return '' - end + render_on(:view_issues_form_details_bottom, :partial => 'issues/edit_deliverable', :layout => false) end end end diff --git a/test/integration/redmine_contracts/hooks/view_issues_form_details_bottom_hook_test.rb b/test/integration/redmine_contracts/hooks/view_issues_form_details_bottom_hook_test.rb new file mode 100644 index 0000000..e6c9a4e --- /dev/null +++ b/test/integration/redmine_contracts/hooks/view_issues_form_details_bottom_hook_test.rb @@ -0,0 +1,52 @@ +require File.dirname(__FILE__) + '/../../../test_helper' + +class RedmineContracts::Hooks::ViewIssuesFormDetailsBottomTest < ActionController::IntegrationTest + include Redmine::Hook::Helper + + context "#view_issues_form_details_bottom" do + setup do + @project = Project.generate! + @issue = Issue.generate_for_project!(@project) + @contract1 = Contract.generate!(:project => @project) + @contract2 = Contract.generate!(:project => @project) + + @manager = User.generate!(:login => 'manager', :password => 'existing', :password_confirmation => 'existing') + @role = Role.generate!(:permissions => [:view_issues, :edit_issues]) + User.add_to_project(@manager, @project, @role) + @deliverable1 = FixedDeliverable.generate!(:contract => @contract1, :manager => @manager, :title => 'The Title') + @deliverable2 = FixedDeliverable.generate!(:contract => @contract2, :manager => @manager, :title => 'The Title') + @issue.deliverable = @deliverable1 + + login_as('manager', 'existing') + end + + context "with Contracts Enabled" do + setup do + visit_issue_page(@issue) + end + + should "render the a select field for the deliverables with all of the deliverables grouped by contract" do + assert_select "select#issue_deliverable_id" do + assert_select "optgroup[label=?]", @contract1.name do + assert_select "option", :text => /#{@deliverable1.title}/ + end + + assert_select "optgroup[label=?]", @contract2.name do + assert_select "option", :text => /#{@deliverable2.title}/ + end + end + end + end + + context "with Contracts Disabled" do + setup do + @project.enabled_modules.collect {|m| m.destroy if m.name == 'contracts' } + visit_issue_page(@issue) + end + + should "not render the deliverable select field" do + assert_select 'select#issue_deliverable_id', :count => 0 + end + end + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index 6663b9e..1b63235 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -71,6 +71,10 @@ module IntegrationTestHelper assert_template 'contracts/show' end + def visit_issue_page(issue) + visit '/issues/' + issue.id.to_s + end + def assert_forbidden assert_response :forbidden assert_template 'common/403' diff --git a/test/unit/lib/redmine_contracts/hooks/view_issues_form_details_bottom_hook_test.rb b/test/unit/lib/redmine_contracts/hooks/view_issues_form_details_bottom_hook_test.rb deleted file mode 100644 index d24e1fc..0000000 --- a/test/unit/lib/redmine_contracts/hooks/view_issues_form_details_bottom_hook_test.rb +++ /dev/null @@ -1,26 +0,0 @@ -require File.dirname(__FILE__) + '/../../../../test_helper' - -class RedmineContracts::Hooks::ViewIssuesFormDetailsBottomTest < ActionController::TestCase - include Redmine::Hook::Helper - - def controller - @controller ||= ApplicationController.new - @controller.response ||= ActionController::TestResponse.new - @controller - end - - def request - @request ||= ActionController::TestRequest.new - end - - def hook(args={}) - call_hook :view_issues_form_details_bottom, args - end - - context "#view_issues_form_details_bottom" do - should "return an empty string" do - @response.body = hook - assert @response.body.blank? - end - end -end