From a758e12376d43ef42da8f86b07a676460427488e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Menou?= Date: Mon, 30 Sep 2024 10:26:24 +0200 Subject: [PATCH] Validation NeTEx : statistiques dans les cartes de ressources NeTEx d'un dataset (#4227) * Validations summary for NeTEx resources * Avoid relying on magic values --- .../controllers/dataset_controller.ex | 3 +- .../templates/dataset/_resource.html.heex | 30 +++++++++---------- ...resource_validation_summary_gtfs.html.heex | 16 ++++++++++ ...esource_validation_summary_netex.html.heex | 14 +++++++++ .../lib/transport_web/views/dataset_view.ex | 1 + .../validators/gtfs_transport_validator.ex | 2 ++ .../lib/validators/netex_validator.ex | 2 ++ .../controllers/dataset_controller_test.exs | 24 +++++++++++++++ 8 files changed, 75 insertions(+), 17 deletions(-) create mode 100644 apps/transport/lib/transport_web/templates/dataset/_resource_validation_summary_gtfs.html.heex create mode 100644 apps/transport/lib/transport_web/templates/dataset/_resource_validation_summary_netex.html.heex diff --git a/apps/transport/lib/transport_web/controllers/dataset_controller.ex b/apps/transport/lib/transport_web/controllers/dataset_controller.ex index 3b5a0de4f6..b0f6dc00b5 100644 --- a/apps/transport/lib/transport_web/controllers/dataset_controller.ex +++ b/apps/transport/lib/transport_web/controllers/dataset_controller.ex @@ -140,7 +140,8 @@ defmodule TransportWeb.DatasetController do Transport.Validators.GTFSRT, Transport.Validators.TableSchema, Transport.Validators.EXJSONSchema, - Transport.Validators.GBFSValidator + Transport.Validators.GBFSValidator, + Transport.Validators.NeTEx ] def resources_infos(dataset) do diff --git a/apps/transport/lib/transport_web/templates/dataset/_resource.html.heex b/apps/transport/lib/transport_web/templates/dataset/_resource.html.heex index 4e712e2f74..a49bdc5cde 100644 --- a/apps/transport/lib/transport_web/templates/dataset/_resource.html.heex +++ b/apps/transport/lib/transport_web/templates/dataset/_resource.html.heex @@ -98,24 +98,22 @@ <% end %> <%= if Resource.gtfs?(@resource) do %> - <%= if GTFSTransport.mine?(validation) do %> -
- "#validation-report"}> - <% {severity, count} = GTFSTransport.count_max_severity(validation.result) %> - - <%= if severity == "NoError" do %> - <%= dgettext("page-dataset-details", "No error detected") %> - <% else %> - <%= "#{count} #{String.downcase(GTFSTransport.severity(severity)[:text])}" %> - <% end %> - - - <%= dgettext("page-dataset-details", "during validation") %> -
- <% end %> + <%= render(TransportWeb.DatasetView, "_resource_validation_summary_gtfs.html", + conn: @conn, + resource: @resource, + validation: validation + ) %> + <% end %> + + <%= if Resource.netex?(@resource) do %> + <%= render(TransportWeb.DatasetView, "_resource_validation_summary_netex.html", + conn: @conn, + resource: @resource, + validation: validation + ) %> <% end %> - <%= unless Resource.gtfs?(@resource) do %> + <%= unless Resource.gtfs?(@resource) or Resource.netex?(@resource) do %> <%= if multi_validation_performed?(validation) do %> <% nb_warnings = warnings_count(validation) %> <% nb_errors = errors_count(validation) %> diff --git a/apps/transport/lib/transport_web/templates/dataset/_resource_validation_summary_gtfs.html.heex b/apps/transport/lib/transport_web/templates/dataset/_resource_validation_summary_gtfs.html.heex new file mode 100644 index 0000000000..c9b52f6f83 --- /dev/null +++ b/apps/transport/lib/transport_web/templates/dataset/_resource_validation_summary_gtfs.html.heex @@ -0,0 +1,16 @@ +<%= if GTFSTransport.mine?(@validation) do %> +
+ <% link = resource_path(@conn, :details, @resource.id) <> "#validation-report" %> + <% {severity, count} = GTFSTransport.count_max_severity(@validation.result) %> + + + <%= if GTFSTransport.no_error?(severity) do %> + <%= dgettext("page-dataset-details", "No error detected") %> + <% else %> + <%= "#{count} #{String.downcase(GTFSTransport.severity(severity)[:text])}" %> + <% end %> + + + <%= dgettext("page-dataset-details", "during validation") %> +
+<% end %> diff --git a/apps/transport/lib/transport_web/templates/dataset/_resource_validation_summary_netex.html.heex b/apps/transport/lib/transport_web/templates/dataset/_resource_validation_summary_netex.html.heex new file mode 100644 index 0000000000..4412cf714c --- /dev/null +++ b/apps/transport/lib/transport_web/templates/dataset/_resource_validation_summary_netex.html.heex @@ -0,0 +1,14 @@ +
+ <% link = resource_path(@conn, :details, @resource.id) <> "#validation-report" %> + <% {severity, count} = NeTEx.count_max_severity(@validation.result) %> + + + <%= if NeTEx.no_error?(severity) do %> + <%= dgettext("page-dataset-details", "No error detected") %> + <% else %> + <%= "#{count} #{String.downcase(NeTEx.severity(severity)[:text])}" %> + <% end %> + + + <%= dgettext("page-dataset-details", "during validation") %> +
diff --git a/apps/transport/lib/transport_web/views/dataset_view.ex b/apps/transport/lib/transport_web/views/dataset_view.ex index 8d07657bf2..f9d2552def 100644 --- a/apps/transport/lib/transport_web/views/dataset_view.ex +++ b/apps/transport/lib/transport_web/views/dataset_view.ex @@ -11,6 +11,7 @@ defmodule TransportWeb.DatasetView do import DB.MultiValidation, only: [get_metadata_info: 2, get_metadata_info: 3] alias Shared.DateTimeDisplay alias Transport.Validators.GTFSTransport + alias Transport.Validators.NeTEx @gtfs_rt_validator_name Transport.Validators.GTFSRT.validator_name() diff --git a/apps/transport/lib/validators/gtfs_transport_validator.ex b/apps/transport/lib/validators/gtfs_transport_validator.ex index 66f37f7933..a44f2a27d1 100644 --- a/apps/transport/lib/validators/gtfs_transport_validator.ex +++ b/apps/transport/lib/validators/gtfs_transport_validator.ex @@ -174,6 +174,8 @@ defmodule Transport.Validators.GTFSTransport do |> Enum.min_by(fn {severity, _count} -> severity |> severity() |> Map.get(:level) end) end + def no_error?(severity), do: @no_error == severity + @spec mine?(any) :: boolean() def mine?(%{validator: validator}), do: validator == validator_name() def mine?(_), do: false diff --git a/apps/transport/lib/validators/netex_validator.ex b/apps/transport/lib/validators/netex_validator.ex index cc7bb0fa9d..ae2e5b69bd 100644 --- a/apps/transport/lib/validators/netex_validator.ex +++ b/apps/transport/lib/validators/netex_validator.ex @@ -179,6 +179,8 @@ defmodule Transport.Validators.NeTEx do |> Enum.min_by(fn {severity, _count} -> severity |> severity() |> Map.get(:level) end) end + def no_error?(severity), do: @no_error == severity + @spec severities_map() :: map() def severities_map, do: %{ diff --git a/apps/transport/test/transport_web/controllers/dataset_controller_test.exs b/apps/transport/test/transport_web/controllers/dataset_controller_test.exs index 46d10ad2c4..171530ef9f 100644 --- a/apps/transport/test/transport_web/controllers/dataset_controller_test.exs +++ b/apps/transport/test/transport_web/controllers/dataset_controller_test.exs @@ -401,6 +401,30 @@ defmodule TransportWeb.DatasetControllerTest do assert conn |> html_response(200) =~ "1 erreur" end + test "show NeTEx number of errors", %{conn: conn} do + %{id: dataset_id} = insert(:dataset, %{slug: slug = "dataset-slug", aom: build(:aom)}) + + %{id: resource_id} = insert(:resource, %{dataset_id: dataset_id, format: "NeTEx", url: "url"}) + + %{id: resource_history_id} = insert(:resource_history, %{resource_id: resource_id}) + + insert(:multi_validation, %{ + resource_history_id: resource_history_id, + validator: Transport.Validators.NeTEx.validator_name(), + result: %{"xsd-1871" => [%{"criticity" => "error"}]}, + metadata: %DB.ResourceMetadata{ + metadata: %{"elapsed_seconds" => 42}, + modes: [], + features: [] + } + }) + + mock_empty_history_resources() + + conn = conn |> get(dataset_path(conn, :details, slug)) + assert conn |> html_response(200) =~ "1 erreurs" + end + test "GTFS-RT without validation", %{conn: conn} do %{id: dataset_id} = insert(:dataset, %{slug: slug = "dataset-slug"}) insert(:resource, %{dataset_id: dataset_id, format: "gtfs-rt", url: "url"})