Skip to content

Commit

Permalink
Add parameter validation for assessment
Browse files Browse the repository at this point in the history
  • Loading branch information
zacksiri committed Jul 2, 2024
1 parent 3dc9a03 commit 9980b74
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions lib/polar_web/controllers/publish/testing/check_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
29 changes: 29 additions & 0 deletions lib/polar_web/params/assessment.ex
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 9980b74

Please sign in to comment.