diff --git a/lib/polar_web/controllers/publish/testing/assessment_controller.ex b/lib/polar_web/controllers/publish/testing/assessment_controller.ex index b2eec0d..8067ed6 100644 --- a/lib/polar_web/controllers/publish/testing/assessment_controller.ex +++ b/lib/polar_web/controllers/publish/testing/assessment_controller.ex @@ -6,12 +6,18 @@ defmodule PolarWeb.Publish.Testing.AssessmentController do alias Polar.Streams.Version + alias PolarWeb.Params.Assessment + + action_fallback PolarWeb.FallbackController + def create(conn, %{ "version_id" => version_id, "assessment" => assessment_params }) do with %Version{} = check <- Repo.get(Version, version_id), - {:ok, assessment} <- Machines.get_or_create_assessment(check, assessment_params) do + {:ok, assessment_params} <- Assessment.parse(assessment_params), + {:ok, assessment} <- + Machines.get_or_create_assessment(check, Map.from_struct(assessment_params)) do assessment = Repo.preload(assessment, [:check]) conn diff --git a/lib/polar_web/controllers/publish/testing/check_controller.ex b/lib/polar_web/controllers/publish/testing/check_controller.ex index 7707ca8..6218756 100644 --- a/lib/polar_web/controllers/publish/testing/check_controller.ex +++ b/lib/polar_web/controllers/publish/testing/check_controller.ex @@ -3,6 +3,8 @@ defmodule PolarWeb.Publish.Testing.CheckController do alias Polar.Machines + action_fallback PolarWeb.FallbackController + def index(conn, _params) do checks = Machines.list_checks() diff --git a/lib/polar_web/controllers/publish/testing/cluster_controller.ex b/lib/polar_web/controllers/publish/testing/cluster_controller.ex index c191370..1851fd4 100644 --- a/lib/polar_web/controllers/publish/testing/cluster_controller.ex +++ b/lib/polar_web/controllers/publish/testing/cluster_controller.ex @@ -3,6 +3,8 @@ defmodule PolarWeb.Publish.Testing.ClusterController do alias Polar.Machines + action_fallback PolarWeb.FallbackController + def index(conn, _params) do clusters = Machines.list_clusters(:for_testing) diff --git a/lib/polar_web/params/assessment.ex b/lib/polar_web/params/assessment.ex new file mode 100644 index 0000000..d5b84e9 --- /dev/null +++ b/lib/polar_web/params/assessment.ex @@ -0,0 +1,29 @@ +defmodule PolarWeb.Params.Assessment do + use Ecto.Schema + import Ecto.Changeset + + @required_attrs ~w( + check_id + cluster_id + instance_type + )a + + @primary_key false + embedded_schema do + field :check_id, :integer + field :cluster_id, :integer + field :instance_type, :string + end + + def parse(params) do + %__MODULE__{} + |> changeset(params) + |> apply_action(:insert) + end + + def changeset(assessment, params) do + assessment + |> cast(params, @required_attrs) + |> validate_required(@required_attrs) + end +end diff --git a/test/polar_web/controllers/publish/testing/assessment_controller_test.exs b/test/polar_web/controllers/publish/testing/assessment_controller_test.exs index caa11ae..4bdddf0 100644 --- a/test/polar_web/controllers/publish/testing/assessment_controller_test.exs +++ b/test/polar_web/controllers/publish/testing/assessment_controller_test.exs @@ -78,5 +78,22 @@ defmodule PolarWeb.Publish.Testing.AssessmentControllerTest do assert %{"id" => _id, "current_state" => "created", "check" => _check} = data end + + test "invalid parameter passed in", %{ + version: version, + conn: conn, + check: check, + cluster: cluster + } do + conn = + post(conn, ~p"/publish/testing/versions/#{version.id}/assessments", %{ + "assessment" => %{ + "check_id" => check.id, + "cluster_id" => cluster.id + } + }) + + assert %{"errors" => _errors} = json_response(conn, 422) + end end end