From 0bdb3b3335f5bc09836f6241dd43ff4e7a075489 Mon Sep 17 00:00:00 2001 From: Henriette Darge Date: Thu, 28 Nov 2024 09:30:31 +0100 Subject: [PATCH] Show correct related WorkPackage in the relation dialog --- .../work_package_relation_form_component.rb | 7 ++++ .../relations/primerized_relations_spec.rb | 23 +++++++++++++ .../components/work_packages/relations.rb | 32 ++++++++----------- 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/app/components/work_package_relations_tab/work_package_relation_form_component.rb b/app/components/work_package_relations_tab/work_package_relation_form_component.rb index 7dd778e13ac7..6a1d8af9fa61 100644 --- a/app/components/work_package_relations_tab/work_package_relation_form_component.rb +++ b/app/components/work_package_relations_tab/work_package_relation_form_component.rb @@ -48,6 +48,13 @@ def initialize(work_package:, relation:, base_errors: nil) def related_work_package @related_work_package ||= @relation.to + + # We cannot rely on the related WorkPackage being the "to", depending on the relation it can also be "from" + if @related_work_package.id == @work_package.id + @related_work_package = @relation.from + end + + @related_work_package end def submit_url_options diff --git a/spec/features/work_packages/details/relations/primerized_relations_spec.rb b/spec/features/work_packages/details/relations/primerized_relations_spec.rb index 29e0ed75821c..56bc66d3699e 100644 --- a/spec/features/work_packages/details/relations/primerized_relations_spec.rb +++ b/spec/features/work_packages/details/relations/primerized_relations_spec.rb @@ -170,6 +170,29 @@ def label_for_relation_type(relation_type) expect(page).to have_no_css("[data-test-selector='op-relation-row-#{child_wp.id}-edit-button']") end end + + context "with the shown WorkPackage being the 'to' relation part" do + let(:another_wp) { create(:work_package, type: type2, subject: "related to main") } + + let(:relation_to) do + create(:relation, + from: another_wp, + to: work_package, + relation_type: Relation::TYPE_FOLLOWS) + end + + it "shows the correct related WorkPackage in the dialog (regression #59771)" do + scroll_to_element relations_panel + + relations_tab.open_relation_dialog(relation_to) + + within "##{WorkPackageRelationsTab::WorkPackageRelationDialogComponent::DIALOG_ID}" do + expect(page).to have_field("Work package", + readonly: true, + with: "#{another_wp.type.name.upcase} ##{another_wp.id} - #{another_wp.subject}") + end + end + end end describe "creating a relation" do diff --git a/spec/support/components/work_packages/relations.rb b/spec/support/components/work_packages/relations.rb index 48369bf45d42..2c992d574349 100644 --- a/spec/support/components/work_packages/relations.rb +++ b/spec/support/components/work_packages/relations.rb @@ -169,15 +169,7 @@ def add_relation(type:, relatable:, description: nil) end def add_description_to_relation(relatable, description) - actual_relatable = find_relatable(relatable) - relation_row = find_row(actual_relatable) - - within relation_row do - page.find_test_selector("op-relation-row-#{actual_relatable.id}-action-menu").click - page.find_test_selector("op-relation-row-#{actual_relatable.id}-edit-button").click - end - - wait_for_reload if using_cuprite? + open_relation_dialog(relatable) within "##{WorkPackageRelationsTab::WorkPackageRelationDialogComponent::DIALOG_ID}" do expect(page).to have_field("Work package", readonly: true) @@ -192,15 +184,7 @@ def add_description_to_relation(relatable, description) end def edit_relation_description(relatable, description) - actual_relatable = find_relatable(relatable) - relation_row = find_row(actual_relatable) - - within relation_row do - page.find_test_selector("op-relation-row-#{actual_relatable.id}-action-menu").click - page.find_test_selector("op-relation-row-#{actual_relatable.id}-edit-button").click - end - - wait_for_reload if using_cuprite? + open_relation_dialog(relatable) within "##{WorkPackageRelationsTab::WorkPackageRelationDialogComponent::DIALOG_ID}" do expect(page).to have_field("Work package", readonly: true) @@ -214,6 +198,18 @@ def edit_relation_description(relatable, description) end end + def open_relation_dialog(relatable) + actual_relatable = find_relatable(relatable) + relation_row = find_row(actual_relatable) + + within relation_row do + page.find_test_selector("op-relation-row-#{actual_relatable.id}-action-menu").click + page.find_test_selector("op-relation-row-#{actual_relatable.id}-edit-button").click + end + + wait_for_reload if using_cuprite? + end + def expect_relation(relatable) find_row(relatable) end