diff --git a/elixir/lib/symphony_elixir/symphony_plus_plus/work_requests/delivery_board.ex b/elixir/lib/symphony_elixir/symphony_plus_plus/work_requests/delivery_board.ex index 73d4a230f3..9edfb1ed52 100644 --- a/elixir/lib/symphony_elixir/symphony_plus_plus/work_requests/delivery_board.ex +++ b/elixir/lib/symphony_elixir/symphony_plus_plus/work_requests/delivery_board.ex @@ -505,7 +505,7 @@ defmodule SymphonyElixir.SymphonyPlusPlus.WorkRequests.DeliveryBoard do raw_status: work_package.status, merge_required: merge_required?(work_package), pr_required: pr_required?(work_package), - pr: pr_summary(legacy_pr_metadata(metadata)), + pr: pr_summary(legacy_pr_metadata(metadata), nil), dependency_signal: Signals.dependency(work_package, context), blocker_state: Map.fetch!(activity, :blocker_state), runtime_state: Map.fetch!(activity, :runtime_state) @@ -562,7 +562,7 @@ defmodule SymphonyElixir.SymphonyPlusPlus.WorkRequests.DeliveryBoard do merge_required: merge_required?(work_package), pr_required: pr_required?(work_package), branch: branch_summary(map_value(metadata, "branch")), - pr: pr_summary(legacy_pr_metadata(metadata)), + pr: pr_summary(legacy_pr_metadata(metadata), delivery), review: review_summary(metadata), worker_signal: Map.get(activity, :worker_signal), pr_signal: Signals.pr(metadata, delivery), @@ -621,10 +621,10 @@ defmodule SymphonyElixir.SymphonyPlusPlus.WorkRequests.DeliveryBoard do |> non_empty_map() end - defp pr_summary(nil), do: nil - defp pr_summary(payload) when not is_map(payload), do: nil + defp pr_summary(nil, _delivery), do: nil + defp pr_summary(payload, _delivery) when not is_map(payload), do: nil - defp pr_summary(%{} = payload) do + defp pr_summary(%{} = payload, delivery) do %{ type: bounded_string(map_value(payload, "type")), source_tool: bounded_string(map_value(payload, "source_tool")), @@ -640,13 +640,15 @@ defmodule SymphonyElixir.SymphonyPlusPlus.WorkRequests.DeliveryBoard do status: bounded_string(map_value(payload, "status")), conclusion: bounded_string(map_value(payload, "conclusion")), stale: boolean_or_bounded_string(map_value(payload, "stale")), - merge_state: merge_state_summary(map_value(payload, "merge_state")) + merge_state: merge_state_summary(map_value(payload, "merge_state"), delivery) } |> reject_nil_values() |> non_empty_map() end - defp merge_state_summary(%{} = merge_state) do + defp merge_state_summary(_merge_state, %{outcome: "pr_merged"}), do: %{merged: true, status: "merged"} + + defp merge_state_summary(%{} = merge_state, _delivery) do %{ merged: boolean_or_bounded_string(map_value(merge_state, "merged")), state: bounded_string(map_value(merge_state, "state")), @@ -657,7 +659,7 @@ defmodule SymphonyElixir.SymphonyPlusPlus.WorkRequests.DeliveryBoard do |> non_empty_map() end - defp merge_state_summary(_merge_state), do: nil + defp merge_state_summary(_merge_state, _delivery), do: nil defp review_completion_summary(nil), do: nil defp review_completion_summary(payload) when not is_map(payload), do: nil diff --git a/elixir/test/symphony_elixir/symphony_plus_plus/dashboard/work_request_delivery_projection_test.exs b/elixir/test/symphony_elixir/symphony_plus_plus/dashboard/work_request_delivery_projection_test.exs index 4162be6f88..7cd4d500a3 100644 --- a/elixir/test/symphony_elixir/symphony_plus_plus/dashboard/work_request_delivery_projection_test.exs +++ b/elixir/test/symphony_elixir/symphony_plus_plus/dashboard/work_request_delivery_projection_test.exs @@ -52,6 +52,19 @@ defmodule SymphonyElixir.SymphonyPlusPlus.Dashboard.WorkRequestDeliveryProjectio assert {:ok, _dispatched_ready_merge} = CanonicalWorkPackageFixtures.dispatch_work_package(repo, work_request.id, ready_merge_slice.id, "approved", ready_merge_package.id) + assert {:ok, _ready_merge_pr} = + PlanningRepository.append_progress_event(repo, %{ + work_package_id: ready_merge_package.id, + summary: "PR attached", + status: "pr_attached", + payload: %{ + type: "pr", + source_tool: "attach_pr", + url: "https://github.com/nextide/symphony-plus-plus/pull/905", + merge_state: %{merged: false, status: "blocked"} + } + }) + ready_finish_slice = add_approved_slice!(repo, work_request, id: "WRS-DASH-READY-FINISH", kind: "investigation") ready_finish_package = @@ -127,7 +140,8 @@ defmodule SymphonyElixir.SymphonyPlusPlus.Dashboard.WorkRequestDeliveryProjectio url: "https://github.com/nextide/symphony-plus-plus/pull/904", number: 904, repository: "nextide/symphony-plus-plus", - check_summary: %{status: "completed", conclusion: "success", completed: 2, total: 2} + check_summary: %{status: "completed", conclusion: "success", completed: 2, total: 2}, + merge_state: %{merged: false, state: "open", status: "blocked", mergeable_state: "blocked"} } }) @@ -215,6 +229,16 @@ defmodule SymphonyElixir.SymphonyPlusPlus.Dashboard.WorkRequestDeliveryProjectio "checks" => %{"status" => "passing", "current" => 2, "total" => 2} } + assert get_in(slices_by_id, ["WRS-DASH-RECORDED-MERGED", "work_package", "pr", "merge_state"]) == %{ + "merged" => true, + "status" => "merged" + } + + assert get_in(slices_by_id, ["WRS-DASH-READY-MERGE", "work_package", "pr", "merge_state"]) == %{ + "merged" => false, + "status" => "blocked" + } + assert get_in(slices_by_id, ["WRS-DASH-RECORDED-MERGED", "operational_state", "key"]) == "delivered" assert get_in(slices_by_id, ["WRS-DASH-SUPERSEDED", "successor", "work_package", "id"]) == successor_package.id assert get_in(slices_by_id, ["WRS-DASH-FILTERED-SUCCESSOR", "successor", "work_package"]) == nil