Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/transport/lib/jobs/on_demand_netex_poller_job.ex
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ defmodule Transport.Jobs.OnDemandNeTExPollerJob do
unique: [fields: [:args, :worker]]

alias Transport.Jobs.OnDemandValidationHelpers, as: Helpers
alias Transport.Validators.NeTEx.ResultsAdapters.V0_2_0, as: ResultsAdapter
alias Transport.Validators.NeTEx.ResultsAdapters.V0_2_1, as: ResultsAdapter
alias Transport.Validators.NeTEx.Validator

# Override the backoff to play nice and avoiding falling in very slow retry
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ defmodule Transport.EnRouteChouetteValidClient.Wrapper do
Documentation: https://documenter.getpostman.com/view/9950294/2sA3e2gVEE
"""

@callback create_a_validation(Path.t()) :: binary()
@callback create_a_validation(filepath :: Path.t()) :: binary()
@callback create_a_validation(filepath :: Path.t(), rule_set :: binary()) :: binary()
@callback get_a_validation(binary()) ::
:pending
| {:successful, binary(), integer()}
Expand All @@ -25,11 +26,11 @@ defmodule Transport.EnRouteChouetteValidClient do
@base_url "https://chouette-valid.enroute.mobi/api/validations"

@impl Transport.EnRouteChouetteValidClient.Wrapper
def create_a_validation(filepath) do
def create_a_validation(filepath, rule_set \\ "enroute:starter-kit") do
form =
{:multipart,
[
{"validation[rule_set]", "enroute:starter-kit"},
{"validation[rule_set]", rule_set},
{"validation[include_schema]", "true"},
make_file_part("validation[file]", filepath)
]}
Expand Down
7 changes: 7 additions & 0 deletions apps/transport/lib/validators/netex/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,10 @@ without any specific inline documentation.
Categories are used to build the summary of a NeTEx validation. Each category
has a title, a description (providing links to any relevant documentation), and
some hints for usual errors (optional).

## 0.2.1

- Uses the profile `pan:french_profile:1` (which includes rules from
`enroute:starter-kit`)
- new rules introduced to check specific rules of the French profile
(mandatory attributes)
6 changes: 3 additions & 3 deletions apps/transport/lib/validators/netex/validator.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ defmodule Transport.Validators.NeTEx.Validator do

require Logger
alias Transport.Jobs.NeTExPollerJob, as: Poller
alias Transport.Validators.NeTEx.ResultsAdapters.V0_2_0, as: ResultsAdapter
alias Transport.Validators.NeTEx.ResultsAdapters.V0_2_1, as: ResultsAdapter

@behaviour Transport.Validators.Validator

Expand All @@ -32,7 +32,7 @@ defmodule Transport.Validators.NeTEx.Validator do
def validator_name, do: "enroute-chouette-netex-validator"

# This will change with an actual versioning of the validator
def validator_version, do: "0.2.0"
def validator_version, do: "0.2.1"

@impl Transport.Validators.Validator
def validate_and_save(%DB.ResourceHistory{} = resource_history) do
Expand Down Expand Up @@ -224,7 +224,7 @@ defmodule Transport.Validators.NeTEx.Validator do
setup_validation(filepath) |> poll_validation_results(0)
end

defp setup_validation(filepath), do: client().create_a_validation(filepath)
defp setup_validation(filepath), do: client().create_a_validation(filepath, "pan:french_profile:1")

def poll_validation_results(validation_id, retries) do
case client().get_a_validation(validation_id) do
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ defmodule Transport.Test.EnRouteChouetteValidClientHelpers do
"""
import Mox

def expect_create_validation do
def expect_create_validation(ruleset) do
validation_id = with_running_validation()

expect(Transport.EnRouteChouetteValidClient.Mock, :create_a_validation, fn _ -> validation_id end)
expect(Transport.EnRouteChouetteValidClient.Mock, :create_a_validation, fn _, ^ruleset -> validation_id end)

validation_id
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ defmodule Transport.Jobs.NeTExPollerJobTest do
import Mox
import Transport.Test.EnRouteChouetteValidClientHelpers

alias Transport.Validators.NeTEx.ResultsAdapters.V0_2_0, as: ResultsAdapter
alias Transport.Validators.NeTEx.ResultsAdapters.V0_2_1, as: ResultsAdapter
alias Transport.Validators.NeTEx.Validator

setup do
Expand Down Expand Up @@ -57,7 +57,7 @@ defmodule Transport.Jobs.NeTExPollerJobTest do

assert multi_validation.command == "http://localhost:9999/chouette-valid/#{validation_id}"
assert multi_validation.validator == "enroute-chouette-netex-validator"
assert multi_validation.validator_version == "0.2.0"
assert multi_validation.validator_version == "0.2.1"
assert multi_validation.result == %{}
assert multi_validation.digest == ResultsAdapter.digest(%{})
assert multi_validation.binary_result == ResultsAdapter.to_binary_result(%{})
Expand All @@ -80,7 +80,7 @@ defmodule Transport.Jobs.NeTExPollerJobTest do

assert multi_validation.command == "http://localhost:9999/chouette-valid/#{validation_id}/messages"
assert multi_validation.validator == "enroute-chouette-netex-validator"
assert multi_validation.validator_version == "0.2.0"
assert multi_validation.validator_version == "0.2.1"
assert multi_validation.metadata.metadata == %{"retries" => attempts, "elapsed_seconds" => duration}

assert multi_validation.result == %{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ defmodule Transport.Test.Transport.Jobs.OnDemandNeTExPollerJobTest do
import ExUnit.CaptureLog
import Mox
import Transport.Test.EnRouteChouetteValidClientHelpers
alias Transport.Validators.NeTEx.ResultsAdapters.V0_2_0, as: ResultsAdapter
alias Transport.Validators.NeTEx.ResultsAdapters.V0_2_1, as: ResultsAdapter
alias Transport.Validators.NeTEx.Validator

setup :verify_on_exit!
Expand Down Expand Up @@ -58,7 +58,7 @@ defmodule Transport.Test.Transport.Jobs.OnDemandNeTExPollerJobTest do
digest: nil,
validation_timestamp: date,
validator: "enroute-chouette-netex-validator",
validator_version: "0.2.0"
validator_version: "0.2.1"
} = validation |> reload_validation()

assert DateTime.diff(date, DateTime.utc_now()) <= 1
Expand All @@ -82,7 +82,7 @@ defmodule Transport.Test.Transport.Jobs.OnDemandNeTExPollerJobTest do
digest: digest,
validation_timestamp: date,
validator: "enroute-chouette-netex-validator",
validator_version: "0.2.0"
validator_version: "0.2.1"
} = validation |> reload_validation()

assert DateTime.diff(date, DateTime.utc_now()) <= 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -542,6 +542,7 @@ defmodule Transport.Test.Transport.Jobs.OnDemandValidationJobTest do
"stats" => %{"error" => 3, "warning" => 1},
"summary" => [
%{"category" => "xsd-schema", "stats" => %{"count" => 1, "criticity" => "error"}},
%{"category" => "french-profile", "stats" => %{"count" => 0, "criticity" => "NoError"}},
%{"category" => "base-rules", "stats" => %{"count" => 3, "criticity" => "error"}}
]
},
Expand Down Expand Up @@ -610,14 +611,14 @@ defmodule Transport.Test.Transport.Jobs.OnDemandValidationJobTest do
end

def expect_netex_with_errors(messages) do
validation_id = expect_create_validation()
validation_id = expect_create_validation("pan:french_profile:1")
expect_failed_validation(validation_id, 10)

expect_get_messages(validation_id, messages)
end

def expect_netex_long_lasting do
expect_create_validation() |> expect_pending_validation()
expect_create_validation("pan:french_profile:1") |> expect_pending_validation()
end

defp run_job(%DB.MultiValidation{} = validation) do
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ defmodule Transport.Validators.NeTEx.ValidatorTest do
import Mox
import Transport.Test.EnRouteChouetteValidClientHelpers

alias Transport.Validators.NeTEx.ResultsAdapters.V0_2_0, as: ResultsAdapter
alias Transport.Validators.NeTEx.ResultsAdapters.V0_2_1, as: ResultsAdapter
alias Transport.Validators.NeTEx.Validator

setup do
Expand Down Expand Up @@ -46,15 +46,15 @@ defmodule Transport.Validators.NeTEx.ValidatorTest do
test "valid NeTEx" do
resource_history = mk_netex_resource()

validation_id = expect_create_validation() |> expect_successful_validation(12)
validation_id = expect_create_validation("pan:french_profile:1") |> expect_successful_validation(12)

assert :ok == Validator.validate_and_save(resource_history)

multi_validation = load_multi_validation(resource_history.id)

assert multi_validation.command == "http://localhost:9999/chouette-valid/#{validation_id}"
assert multi_validation.validator == "enroute-chouette-netex-validator"
assert multi_validation.validator_version == "0.2.0"
assert multi_validation.validator_version == "0.2.1"
assert multi_validation.result == %{}
assert multi_validation.digest == ResultsAdapter.digest(%{})
assert multi_validation.binary_result == ResultsAdapter.to_binary_result(%{})
Expand All @@ -64,7 +64,7 @@ defmodule Transport.Validators.NeTEx.ValidatorTest do
test "pending validation" do
resource_history = mk_netex_resource()

validation_id = expect_create_validation() |> expect_pending_validation()
validation_id = expect_create_validation("pan:french_profile:1") |> expect_pending_validation()

assert :ok == Validator.validate_and_save(resource_history)

Expand All @@ -82,7 +82,7 @@ defmodule Transport.Validators.NeTEx.ValidatorTest do
test "invalid NeTEx" do
resource_history = mk_netex_resource()

validation_id = expect_create_validation() |> expect_failed_validation(31)
validation_id = expect_create_validation("pan:french_profile:1") |> expect_failed_validation(31)

expect_get_messages(validation_id, @sample_error_messages)

Expand All @@ -92,7 +92,7 @@ defmodule Transport.Validators.NeTEx.ValidatorTest do

assert multi_validation.command == "http://localhost:9999/chouette-valid/#{validation_id}/messages"
assert multi_validation.validator == "enroute-chouette-netex-validator"
assert multi_validation.validator_version == "0.2.0"
assert multi_validation.validator_version == "0.2.1"
assert multi_validation.metadata.metadata == %{"retries" => 0, "elapsed_seconds" => 31}

assert multi_validation.result == %{
Expand Down Expand Up @@ -142,7 +142,7 @@ defmodule Transport.Validators.NeTEx.ValidatorTest do
test "valid NeTEx" do
resource_url = mk_raw_netex_resource()

expect_create_validation() |> expect_successful_validation(9)
expect_create_validation("pan:french_profile:1") |> expect_successful_validation(9)

assert {:ok, %{"validations" => %{}, "metadata" => %{retries: 0, elapsed_seconds: 9}}} ==
Validator.validate(resource_url)
Expand All @@ -151,7 +151,7 @@ defmodule Transport.Validators.NeTEx.ValidatorTest do
test "invalid NeTEx" do
resource_url = mk_raw_netex_resource()

validation_id = expect_create_validation() |> expect_failed_validation(25)
validation_id = expect_create_validation("pan:french_profile:1") |> expect_failed_validation(25)

expect_get_messages(validation_id, @sample_error_messages)

Expand Down Expand Up @@ -194,7 +194,7 @@ defmodule Transport.Validators.NeTEx.ValidatorTest do
test "pending" do
resource_url = mk_raw_netex_resource()

validation_id = expect_create_validation() |> expect_pending_validation()
validation_id = expect_create_validation("pan:french_profile:1") |> expect_pending_validation()

assert {:pending, validation_id} == Validator.validate(resource_url)
end
Expand Down