Skip to content

Commit

Permalink
Add ability to create check
Browse files Browse the repository at this point in the history
  • Loading branch information
zacksiri committed Jun 24, 2024
1 parent 0a1ff0e commit aa5d3a7
Show file tree
Hide file tree
Showing 12 changed files with 86 additions and 12 deletions.
8 changes: 7 additions & 1 deletion lib/polar/machines.ex
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,15 @@ defmodule Polar.Machines do
to: Cluster.Manager,
as: :create

alias __MODULE__.Check

defdelegate create_check(params),
to: Check.Manager,
as: :create

alias __MODULE__.Assessment

defdelegate create_assessment(version, params),
defdelegate create_assessment(check, params),
to: Assessment.Manager,
as: :create
end
7 changes: 5 additions & 2 deletions lib/polar/machines/assessment.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ defmodule Polar.Machines.Assessment do
alias Polar.Machines.Check
alias Polar.Machines.Cluster

@valid_attrs ~w(version_id cluster_id check_slug)a
@required_attrs ~w(version_id cluster_id check_slug)a

schema "assessments" do
field :current_state, :string, default: "created"

Expand All @@ -22,7 +25,7 @@ defmodule Polar.Machines.Assessment do
@doc false
def changeset(assessment, attrs) do
assessment
|> cast(attrs, [:cluster_id, :check_slug])
|> validate_required([:cluster_id, :check_slug])
|> cast(attrs, @valid_attrs)
|> validate_required(@required_attrs)
end
end
4 changes: 2 additions & 2 deletions lib/polar/machines/assessment/manager.ex
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ defmodule Polar.Machines.Assessment.Manager do
alias Polar.Repo
alias Polar.Machines.Assessment

def create(version, params) do
%Assessment{version_id: version.id}
def create(check, params) do
%Assessment{check_id: check.id}
|> Assessment.changeset(params)
|> Repo.insert()
end
Expand Down
15 changes: 13 additions & 2 deletions lib/polar/machines/check.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ defmodule Polar.Machines.Check do
import Ecto.Changeset

schema "checks" do
field :name, :string, virtual: true

field :slug, :string
field :description, :string

Expand All @@ -12,7 +14,16 @@ defmodule Polar.Machines.Check do
@doc false
def changeset(check, attrs) do
check
|> cast(attrs, [:slug, :description])
|> validate_required([:slug, :description])
|> cast(attrs, [:name, :description])
|> validate_required([:name, :description])
|> generate_slug()
end

defp generate_slug(changeset) do
if name = get_change(changeset, :name) do
put_change(changeset, :slug, Slug.slugify(name))
else
changeset
end
end
end
10 changes: 10 additions & 0 deletions lib/polar/machines/check/manager.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
defmodule Polar.Machines.Check.Manager do
alias Polar.Repo
alias Polar.Machines.Check

def create(params) do
%Check{}
|> Check.changeset(params)
|> Repo.insert()
end
end
14 changes: 10 additions & 4 deletions lib/polar_web/controllers/publish/testing/assessment_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,17 @@ defmodule PolarWeb.Publish.Testing.AssessmentController do

alias Polar.Repo
alias Polar.Machines
alias Polar.Streams.Version

def create(conn, %{"version_id" => version_id, "assessment" => assessment_params}) do
with %Version{} = version <- Repo.get(Version, version_id),
{:ok, assessment} <- Machines.create_assessment(version, assessment_params) do
alias Polar.Machines.Check

def create(conn, %{
"check_id" => check_id,
"assessment" => assessment_params
}) do
with %Check{} = check <- Repo.get(Check, check_id),
{:ok, assessment} <- Machines.create_assessment(check, assessment_params) do
assessment = Repo.preload(assessment, [:check])

render(conn, :create, %{assessment: assessment})
end
end
Expand Down
17 changes: 17 additions & 0 deletions lib/polar_web/controllers/publish/testing/assessment_json.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
defmodule PolarWeb.Publish.Testing.AssessmentJSON do
alias Polar.Machines.Assessment

def create(%{assessment: assessment}) do
%{data: data(assessment)}
end

defp data(%Assessment{} = assessment) do
%{
id: assessment.id,
current_state: assessment.current_state,
check: %{
slug: assessment.check.slug
}
}
end
end
Empty file.
2 changes: 1 addition & 1 deletion lib/polar_web/router.ex
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ defmodule PolarWeb.Router do

resources "/assessments/:assessment_id/events", EventController, only: [:create]

scope "/versions/:version_id" do
scope "/checks/:check_id" do
resources "/assessments", Testing.AssessmentController, only: [:create]
end
end
Expand Down
3 changes: 3 additions & 0 deletions mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ defmodule Polar.MixProject do
# Cert
{:x509, "~> 0.8"},

# Slug
{:slugify, "~> 1.3"},

# Encryption
{:cloak_ecto, "~> 1.3"},

Expand Down
1 change: 1 addition & 0 deletions mix.lock
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
"plug": {:hex, :plug, "1.15.3", "712976f504418f6dff0a3e554c40d705a9bcf89a7ccef92fc6a5ef8f16a30a97", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "cc4365a3c010a56af402e0809208873d113e9c38c401cabd88027ef4f5c01fd2"},
"plug_crypto": {:hex, :plug_crypto, "2.0.0", "77515cc10af06645abbfb5e6ad7a3e9714f805ae118fa1a70205f80d2d70fe73", [:mix], [], "hexpm", "53695bae57cc4e54566d993eb01074e4d894b65a3766f1c43e2c61a1b0f45ea9"},
"postgrex": {:hex, :postgrex, "0.17.4", "5777781f80f53b7c431a001c8dad83ee167bcebcf3a793e3906efff680ab62b3", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "6458f7d5b70652bc81c3ea759f91736c16a31be000f306d3c64bcdfe9a18b3cc"},
"slugify": {:hex, :slugify, "1.3.1", "0d3b8b7e5c1eeaa960e44dce94382bee34a39b3ea239293e457a9c5b47cc6fd3", [:mix], [], "hexpm", "cb090bbeb056b312da3125e681d98933a360a70d327820e4b7f91645c4d8be76"},
"swoosh": {:hex, :swoosh, "1.15.2", "490ea85a98e8fb5178c07039e0d8519839e38127724a58947a668c00db7574ee", [:mix], [{:bandit, ">= 1.0.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:req, "~> 0.4 or ~> 1.0", [hex: :req, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9f7739c02f6c7c0ca82ee397f3bfe0465dbe4c8a65372ac2a5584bf147dd5831"},
"tailwind": {:hex, :tailwind, "0.2.2", "9e27288b568ede1d88517e8c61259bc214a12d7eed271e102db4c93fcca9b2cd", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "ccfb5025179ea307f7f899d1bb3905cd0ac9f687ed77feebc8f67bdca78565c4"},
"telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"},
Expand Down
17 changes: 17 additions & 0 deletions test/polar/machines/check/manager_test.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
defmodule Polar.Machines.Check.ManagerTest do
use Polar.DataCase, async: true

alias Polar.Machines

describe "create check" do
test "successfully create check" do
assert {:ok, check} =
Machines.create_check(%{
name: "ipv4 issuing",
description: "checks that ipv4 can be issued."
})

assert check.slug == "ipv4-issuing"
end
end
end

0 comments on commit aa5d3a7

Please sign in to comment.