From b28074da518796ec1c671b69539ef153d9d1062c Mon Sep 17 00:00:00 2001 From: Cristen Jones Date: Wed, 5 Feb 2025 14:49:03 -0500 Subject: [PATCH] feat(Live.TripPlanner): handle OTP timeouts (#2364) --- lib/dotcom_web/live/trip_planner.ex | 15 +++++++++++---- test/dotcom_web/live/trip_planner_test.exs | 6 +++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/dotcom_web/live/trip_planner.ex b/lib/dotcom_web/live/trip_planner.ex index e4117ef0e8..c1c99c122f 100644 --- a/lib/dotcom_web/live/trip_planner.ex +++ b/lib/dotcom_web/live/trip_planner.ex @@ -116,13 +116,19 @@ defmodule DotcomWeb.Live.TripPlanner do end @impl true - # Triggered when we cannot connect to OTP. + # Triggered when we cannot connect to OTP, or we receive a timeout error. def handle_async( "get_itinerary_groups", - {:ok, {:error, %Req.TransportError{reason: :econnrefused}}}, + {:ok, {:error, %Req.TransportError{reason: _reason}}}, socket ) do - message = "Cannot connect to OpenTripPlanner. Please try again later." + message = + Application.get_env( + :open_trip_planner_client, + :fallback_error_message, + "Cannot connect to OpenTripPlanner. Please try again later." + ) + new_socket = assign(socket, :results, Map.put(@state.results, :error, message)) {:noreply, new_socket} @@ -130,7 +136,8 @@ defmodule DotcomWeb.Live.TripPlanner do @impl true # Triggered by OTP errors, we combine them into a single error message and add it to the results state. - def handle_async("get_itinerary_groups", {:ok, {:error, errors}}, socket) do + def handle_async("get_itinerary_groups", {:ok, {:error, errors}}, socket) + when is_list(errors) do error = errors |> Enum.map_join(", ", &Map.get(&1, :message)) diff --git a/test/dotcom_web/live/trip_planner_test.exs b/test/dotcom_web/live/trip_planner_test.exs index 2ae926dfa2..4bf87ea9e3 100644 --- a/test/dotcom_web/live/trip_planner_test.exs +++ b/test/dotcom_web/live/trip_planner_test.exs @@ -203,7 +203,11 @@ defmodule DotcomWeb.Live.TripPlannerTest do document = render_async(view) - assert document =~ "Cannot connect to OpenTripPlanner. Please try again later." + assert document =~ + Application.get_env( + :open_trip_planner_client, + :fallback_error_message + ) end test "an OTP error shows up as an error message", %{view: view} do