From 8de3beb10a043d2f1090fa8742f8e73a74011f64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Menou?= Date: Thu, 6 Mar 2025 16:12:43 +0100 Subject: [PATCH] =?UTF-8?q?GTFS=20diff=20par=20URLs=20:=20t=C3=A9l=C3=A9ch?= =?UTF-8?q?arger=20les=20sources?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/transport/lib/jobs/gtfs_diff_job.ex | 27 +++++-- .../live/gtfs_diff_select_live.ex | 10 +-- .../live/gtfs_diff_select_live/results.ex | 78 +++++++++++++------ .../gettext/en/LC_MESSAGES/validations.po | 8 ++ .../gettext/fr/LC_MESSAGES/validations.po | 8 ++ apps/transport/priv/gettext/validations.pot | 8 ++ .../transport/jobs/gtfs_diff_job_test.exs | 37 +++++++-- 7 files changed, 133 insertions(+), 43 deletions(-) diff --git a/apps/transport/lib/jobs/gtfs_diff_job.ex b/apps/transport/lib/jobs/gtfs_diff_job.ex index 7843522fac..cdc475a120 100644 --- a/apps/transport/lib/jobs/gtfs_diff_job.ex +++ b/apps/transport/lib/jobs/gtfs_diff_job.ex @@ -9,11 +9,26 @@ defmodule Transport.Jobs.GTFSDiff do Oban.Notifier.notify(Oban, :gossip, %{started: job.id}) case args do - %{"gtfs_object_1" => gtfs_object_1, "gtfs_object_2" => gtfs_object_2} -> - process_s3_objects(job.id, gtfs_object_1, gtfs_object_2, args) + %{ + "gtfs_object_1" => gtfs_object_1, + "gtfs_object_2" => gtfs_object_2, + "gtfs_original_file_name_1" => gtfs_original_file_name_1, + "gtfs_original_file_name_2" => gtfs_original_file_name_2 + } -> + context = %{ + "gtfs_original_file_name_1" => gtfs_original_file_name_1, + "gtfs_original_file_name_2" => gtfs_original_file_name_2 + } + + process_s3_objects(job.id, gtfs_object_1, gtfs_object_2, Map.merge(args, %{"context" => context})) %{"gtfs_url_1" => gtfs_url_1, "gtfs_url_2" => gtfs_url_2} -> - process_urls(job.id, gtfs_url_1, gtfs_url_2, args) + context = %{ + "gtfs_url_1" => gtfs_url_1, + "gtfs_url_2" => gtfs_url_2 + } + + process_urls(job.id, gtfs_url_1, gtfs_url_2, Map.merge(args, %{"context" => context})) end :ok @@ -80,8 +95,7 @@ defmodule Transport.Jobs.GTFSDiff do end defp process_diff(job_id, unzip_1, unzip_2, %{ - "gtfs_original_file_name_1" => gtfs_original_file_name_1, - "gtfs_original_file_name_2" => gtfs_original_file_name_2, + "context" => context, "profile" => profile, "locale" => locale }) do @@ -104,8 +118,7 @@ defmodule Transport.Jobs.GTFSDiff do Oban.Notifier.notify(Oban, :gossip, %{ complete: job_id, diff_file_url: Transport.S3.permanent_url(:gtfs_diff, diff_file_name), - gtfs_original_file_name_1: gtfs_original_file_name_1, - gtfs_original_file_name_2: gtfs_original_file_name_2 + context: context }) after File.rm(filepath) diff --git a/apps/transport/lib/transport_web/live/gtfs_diff_select_live.ex b/apps/transport/lib/transport_web/live/gtfs_diff_select_live.ex index b5f29e07f7..df4221b89a 100644 --- a/apps/transport/lib/transport_web/live/gtfs_diff_select_live.ex +++ b/apps/transport/lib/transport_web/live/gtfs_diff_select_live.ex @@ -152,8 +152,7 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive do %{ "complete" => job_id, "diff_file_url" => diff_file_url, - "gtfs_original_file_name_1" => gtfs_original_file_name_1, - "gtfs_original_file_name_2" => gtfs_original_file_name_2 + "context" => context }, job_id, socket @@ -162,7 +161,7 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive do unlisten_job_notifications() socket - |> present_results(diff_file_url, gtfs_original_file_name_1, gtfs_original_file_name_2) + |> present_results(diff_file_url, context) |> scroll_to_steps() end @@ -266,11 +265,10 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive do end end - defp present_results(socket, diff_file_url, gtfs_original_file_name_1, gtfs_original_file_name_2) do + defp present_results(socket, diff_file_url, context) do updates = [ set(:diff_file_url, diff_file_url), - set(:gtfs_original_file_name_1, gtfs_original_file_name_1), - set(:gtfs_original_file_name_2, gtfs_original_file_name_2) + set(:context, context) ] socket diff --git a/apps/transport/lib/transport_web/live/gtfs_diff_select_live/results.ex b/apps/transport/lib/transport_web/live/gtfs_diff_select_live/results.ex index 24260a9e8b..b3dcbd39a6 100644 --- a/apps/transport/lib/transport_web/live/gtfs_diff_select_live/results.ex +++ b/apps/transport/lib/transport_web/live/gtfs_diff_select_live/results.ex @@ -13,8 +13,7 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive.Results do diff_file_url={@results[:diff_file_url]} diff_summary={@results[:diff_summary]} files_with_changes={@results[:files_with_changes]} - gtfs_original_file_name_1={@results[:gtfs_original_file_name_1]} - gtfs_original_file_name_2={@results[:gtfs_original_file_name_2]} + context={@results[:context]} selected_file={@results[:selected_file]} error_msg={@error_msg} profile={@profile} @@ -29,8 +28,7 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive.Results do diff_summary: _, error_msg: _, files_with_changes: _, - gtfs_original_file_name_1: _, - gtfs_original_file_name_2: _, + context: _, profile: _, selected_file: _ } = assigns @@ -54,18 +52,15 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive.Results do ) %>. <%= if @diff_summary do %>
- <%= if @diff_summary == %{} do %> - <%= similar_files(@gtfs_original_file_name_1, @gtfs_original_file_name_2) %> - <% else %> - <%= different_files(@gtfs_original_file_name_1, @gtfs_original_file_name_2) %> - <.diff_summaries - diff_explanations={@diff_explanations} - diff_summary={@diff_summary} - files_with_changes={@files_with_changes} - selected_file={@selected_file} - profile={@profile} - /> - <% end %> + <%= display_context(@diff_summary, @context) |> raw() %> + <.diff_summaries + :if={@diff_summary != %{}} + diff_explanations={@diff_explanations} + diff_summary={@diff_summary} + files_with_changes={@files_with_changes} + selected_file={@selected_file} + profile={@profile} + />
<% else %> <%= if @error_msg do %> @@ -261,24 +256,59 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive.Results do """ end - defp similar_files(file1, file2) do + defp display_context(diff_summary, %{ + "gtfs_original_file_name_1" => file_name_1, + "gtfs_original_file_name_2" => file_name_2 + }) do + if diff_summary == %{} do + similar_files(file_name_1, file_name_2) + else + different_files(file_name_1, file_name_2) + end + end + + defp display_context(diff_summary, %{"gtfs_url_1" => url_1, "gtfs_url_2" => url_2}) do + if diff_summary == %{} do + similar_urls(url_1, url_2) + else + different_urls(url_1, url_2) + end + end + + defp similar_files(file_1, file_2) do dgettext( "validations", "The GTFS files %{gtfs_original_file_name_2} and %{gtfs_original_file_name_1} are similar.", - gtfs_original_file_name_1: file1, - gtfs_original_file_name_2: file2 + gtfs_original_file_name_1: file_1, + gtfs_original_file_name_2: file_2 ) - |> raw() end - defp different_files(file1, file2) do + defp different_files(file_1, file_2) do dgettext( "validations", "The GTFS file %{gtfs_original_file_name_2} has differences with the GTFS file %{gtfs_original_file_name_1}, as summarized below:", - gtfs_original_file_name_1: file1, - gtfs_original_file_name_2: file2 + gtfs_original_file_name_1: file_1, + gtfs_original_file_name_2: file_2 + ) + end + + defp similar_urls(url_1, url_2) do + dgettext( + "validations", + "The modified GTFS file (source) and the reference GTFS file (source) are similar.", + gtfs_url_1: url_1, + gtfs_url_2: url_2 + ) + end + + defp different_urls(url_1, url_2) do + dgettext( + "validations", + "The modified GTFS file (source) has differences with the reference GTFS file (source), as summarized below:", + gtfs_url_1: url_1, + gtfs_url_2: url_2 ) - |> raw() end defp validation_error(%{error_msg: _} = assigns) do diff --git a/apps/transport/priv/gettext/en/LC_MESSAGES/validations.po b/apps/transport/priv/gettext/en/LC_MESSAGES/validations.po index 15a206df6c..3b5edff7f9 100644 --- a/apps/transport/priv/gettext/en/LC_MESSAGES/validations.po +++ b/apps/transport/priv/gettext/en/LC_MESSAGES/validations.po @@ -472,6 +472,14 @@ msgstr "" msgid "The GTFS files %{gtfs_original_file_name_2} and %{gtfs_original_file_name_1} are similar." msgstr "" +#, elixir-autogen, elixir-format +msgid "The modified GTFS file (source) has differences with the reference GTFS file (source), as summarized below:" +msgstr "" + +#, elixir-autogen, elixir-format +msgid "The modified GTFS file (source) and the reference GTFS file (source) are similar." +msgstr "" + #, elixir-autogen, elixir-format msgid "Modified GTFS" msgstr "" diff --git a/apps/transport/priv/gettext/fr/LC_MESSAGES/validations.po b/apps/transport/priv/gettext/fr/LC_MESSAGES/validations.po index 8fb33e3648..bbec12fb35 100644 --- a/apps/transport/priv/gettext/fr/LC_MESSAGES/validations.po +++ b/apps/transport/priv/gettext/fr/LC_MESSAGES/validations.po @@ -472,6 +472,14 @@ msgstr "Le fichier GTFS %{gtfs_original_file_name_2} comporte les d msgid "The GTFS files %{gtfs_original_file_name_2} and %{gtfs_original_file_name_1} are similar." msgstr "Les fichier GTFS %{gtfs_original_file_name_2} et %{gtfs_original_file_name_1} sont similaires." +#, elixir-autogen, elixir-format +msgid "The modified GTFS file (source) has differences with the reference GTFS file (source), as summarized below:" +msgstr "Le fichier GTFS modifié (source) comporte les différences ci-dessous par rapport au fichier GTFS de référence (source) :" + +#, elixir-autogen, elixir-format +msgid "The modified GTFS file (source) and the reference GTFS file (source) are similar." +msgstr "Le fichier GTFS modifié (source) et le fichier GTFS de référence (source) sont similaires." + #, elixir-autogen, elixir-format msgid "Modified GTFS" msgstr "GTFS modifié" diff --git a/apps/transport/priv/gettext/validations.pot b/apps/transport/priv/gettext/validations.pot index aec962c041..738ef7e81c 100644 --- a/apps/transport/priv/gettext/validations.pot +++ b/apps/transport/priv/gettext/validations.pot @@ -470,6 +470,14 @@ msgstr "" msgid "The GTFS files %{gtfs_original_file_name_2} and %{gtfs_original_file_name_1} are similar." msgstr "" +#, elixir-autogen, elixir-format +msgid "The modified GTFS file (source) has differences with the reference GTFS file (source), as summarized below:" +msgstr "" + +#, elixir-autogen, elixir-format +msgid "The modified GTFS file (source) and the reference GTFS file (source) are similar." +msgstr "" + #, elixir-autogen, elixir-format msgid "Modified GTFS" msgstr "" diff --git a/apps/transport/test/transport/jobs/gtfs_diff_job_test.exs b/apps/transport/test/transport/jobs/gtfs_diff_job_test.exs index c7a9ae7850..50ad1f3bfd 100644 --- a/apps/transport/test/transport/jobs/gtfs_diff_job_test.exs +++ b/apps/transport/test/transport/jobs/gtfs_diff_job_test.exs @@ -50,7 +50,7 @@ defmodule Transport.Jobs.GTFSDiffTest do enqueue_job(%{"gtfs_url_1" => base_gtfs_url, "gtfs_url_2" => modified_gtfs_url}) - expect_various_notifications() + expect_various_notifications(base_gtfs_url, modified_gtfs_url) end) end end @@ -93,13 +93,24 @@ defmodule Transport.Jobs.GTFSDiffTest do end defp expect_various_notifications do - job_id = expect_start_notification() + expect_start_notification() + |> expect_running_notifications() + |> expect_completion_notification_for_files() + end + + defp expect_various_notifications(base_url, modified_url) do + expect_start_notification() + |> expect_running_notifications() + |> expect_completion_notification_for_urls(base_url, modified_url) + end + + defp expect_running_notifications(job_id) do expect_running_notification(job_id, "Calcul des différences pour agency.txt") expect_running_notification(job_id, "Calcul des différences pour calendar.txt") expect_running_notification(job_id, "Calcul des différences pour routes.txt") expect_running_notification(job_id, "Calcul des différences pour stops.txt") expect_running_notification(job_id, "Calcul des différences pour trips.txt") - expect_completion_notification(job_id) + job_id end defp expect_start_notification do @@ -112,13 +123,27 @@ defmodule Transport.Jobs.GTFSDiffTest do assert_receive {:notification, :gossip, %{"running" => ^job_id, "log" => ^msg}} end - defp expect_completion_notification(job_id) do + defp expect_completion_notification_for_files(job_id) do + assert_receive {:notification, :gossip, + %{ + "complete" => ^job_id, + "diff_file_url" => _, + "context" => %{ + "gtfs_original_file_name_1" => "base.zip", + "gtfs_original_file_name_2" => "modified.zip" + } + }} + end + + defp expect_completion_notification_for_urls(job_id, base_url, modified_url) do assert_receive {:notification, :gossip, %{ "complete" => ^job_id, "diff_file_url" => _, - "gtfs_original_file_name_1" => "base.zip", - "gtfs_original_file_name_2" => "modified.zip" + "context" => %{ + "gtfs_url_1" => ^base_url, + "gtfs_url_2" => ^modified_url + } }} end