Skip to content

Commit

Permalink
Validation NeTEx: seules les erreurs XSD (#4172)
Browse files Browse the repository at this point in the history
Les autres erreurs de validation sont dégradées en `warning`.
  • Loading branch information
ptitfred authored Sep 10, 2024
1 parent 16801f4 commit 1509c0a
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 10 deletions.
20 changes: 18 additions & 2 deletions apps/transport/lib/validators/netex_validator.ex
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ defmodule Transport.Validators.NeTEx do
resource_history.id,
result_url,
%{elapsed_seconds: elapsed_seconds, retries: retries},
errors
demote_non_xsd_errors(errors)
)

:ok
Expand Down Expand Up @@ -76,7 +76,7 @@ defmodule Transport.Validators.NeTEx do
# result_url in metadata?
{:ok,
%{
"validations" => index_messages(errors),
"validations" => errors |> demote_non_xsd_errors() |> index_messages(),
"metadata" => %{elapsed_seconds: elapsed_seconds, retries: retries}
}}

Expand Down Expand Up @@ -344,4 +344,20 @@ defmodule Transport.Validators.NeTEx do
defp client do
Transport.EnRouteChouetteValidClient.Wrapper.impl()
end

defp demote_non_xsd_errors(errors), do: Enum.map(errors, &demote_non_xsd_error(&1))

defp demote_non_xsd_error(%{"criticity" => criticity, "code" => code} = error) do
criticity =
if String.starts_with?(code, "xsd-") do
criticity
else
case criticity do
"error" -> "warning"
_ -> criticity
end
end

Map.update!(error, "criticity", fn _ -> criticity end)
end
end
39 changes: 31 additions & 8 deletions apps/transport/test/transport/validators/netex_validator_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ defmodule Transport.Validators.NeTExTest do
setup :verify_on_exit!

@sample_error_messages [
%{
"code" => "xsd-1871",
"criticity" => "error",
"message" =>
"Element '{http://www.netex.org.uk/netex}OppositeDIrectionRef': This element is not expected. Expected is ( {http://www.netex.org.uk/netex}OppositeDirectionRef )."
},
%{
"code" => "uic-operating-period",
"message" => "Resource 23504000009 hasn't expected class but Netex::OperatingPeriod",
Expand Down Expand Up @@ -70,18 +76,26 @@ defmodule Transport.Validators.NeTExTest do
assert multi_validation.metadata.metadata == %{"retries" => 0, "elapsed_seconds" => 31}

assert multi_validation.result == %{
"xsd-1871" => [
%{
"code" => "xsd-1871",
"criticity" => "error",
"message" =>
"Element '{http://www.netex.org.uk/netex}OppositeDIrectionRef': This element is not expected. Expected is ( {http://www.netex.org.uk/netex}OppositeDirectionRef )."
}
],
"uic-operating-period" => [
%{
"code" => "uic-operating-period",
"message" => "Resource 23504000009 hasn't expected class but Netex::OperatingPeriod",
"criticity" => "error"
"criticity" => "warning"
}
],
"valid-day-bits" => [
%{
"code" => "valid-day-bits",
"message" => "Mandatory attribute valid_day_bits not found",
"criticity" => "error"
"criticity" => "warning"
}
],
"frame-arret-resources" => [
Expand Down Expand Up @@ -121,18 +135,26 @@ defmodule Transport.Validators.NeTExTest do
expect_get_messages(validation_id, @sample_error_messages)

validation_result = %{
"xsd-1871" => [
%{
"code" => "xsd-1871",
"criticity" => "error",
"message" =>
"Element '{http://www.netex.org.uk/netex}OppositeDIrectionRef': This element is not expected. Expected is ( {http://www.netex.org.uk/netex}OppositeDirectionRef )."
}
],
"uic-operating-period" => [
%{
"code" => "uic-operating-period",
"message" => "Resource 23504000009 hasn't expected class but Netex::OperatingPeriod",
"criticity" => "error"
"criticity" => "warning"
}
],
"valid-day-bits" => [
%{
"code" => "valid-day-bits",
"message" => "Mandatory attribute valid_day_bits not found",
"criticity" => "error"
"criticity" => "warning"
}
],
"frame-arret-resources" => [
Expand Down Expand Up @@ -160,11 +182,12 @@ defmodule Transport.Validators.NeTExTest do
expect_get_messages(validation_id, @sample_error_message)

validation_result = %{
"uic-operating-period" => [
"xsd-1871" => [
%{
"code" => "uic-operating-period",
"message" => "Resource 23504000009 hasn't expected class but Netex::OperatingPeriod",
"criticity" => "error"
"code" => "xsd-1871",
"criticity" => "error",
"message" =>
"Element '{http://www.netex.org.uk/netex}OppositeDIrectionRef': This element is not expected. Expected is ( {http://www.netex.org.uk/netex}OppositeDirectionRef )."
}
]
}
Expand Down

0 comments on commit 1509c0a

Please sign in to comment.