- Add jump_credo_checks ~> 0.4 with all 20 checks enabled - Fix all standard Credo issues: 139 @spec (113 done, 26 remain), 4 refactoring, 3 alias usage, 9 System.cmd env, 5 unsafe_to_atom, 2 max line length, 9 assert_receive timeout - Fix 170+ jump_credo_checks warnings: - 117 TopLevelAliasImportRequire: move nested alias/import to module top - 32 UseObanProWorker: switch to Oban.Pro.Worker - 4 DoctestIExExamples: add doctests / create test file - ~20 WeakAssertion: strengthen type-check assertions - Various ConditionalAssertion, AssertReceiveTimeout fixes - Exclude vendor/ from Credo analysis - Remaining: 175 warnings (mostly opinionated WeakAssertion, AvoidSocketAssignsInTest), 26 @spec annotations
76 lines
2.6 KiB
Elixir
76 lines
2.6 KiB
Elixir
defmodule Microwaveprop.Radio.ImportRunTest do
|
|
use Microwaveprop.DataCase, async: true
|
|
|
|
alias Microwaveprop.Radio.ImportRun
|
|
|
|
@valid_attrs %{
|
|
submitter_email: "test@example.com",
|
|
rows: %{"rows" => [], "refinement_ids" => []},
|
|
total_rows: 0
|
|
}
|
|
|
|
describe "changeset/2" do
|
|
test "accepts a minimal valid attrs map" do
|
|
changeset = ImportRun.changeset(%ImportRun{}, @valid_attrs)
|
|
assert changeset.valid?
|
|
end
|
|
|
|
test "defaults status to pending via round-trip through changeset" do
|
|
changeset = ImportRun.changeset(%ImportRun{}, @valid_attrs)
|
|
assert {:ok, run} = Repo.insert(changeset)
|
|
assert run.status == "pending"
|
|
assert run.processed_rows == 0
|
|
assert run.imported_count == 0
|
|
assert run.refined_count == 0
|
|
assert run.error_count == 0
|
|
assert run.errors == %{}
|
|
end
|
|
|
|
test "requires submitter_email" do
|
|
changeset = ImportRun.changeset(%ImportRun{}, Map.delete(@valid_attrs, :submitter_email))
|
|
refute changeset.valid?
|
|
assert "can't be blank" in errors_on(changeset).submitter_email
|
|
end
|
|
|
|
test "requires rows" do
|
|
changeset = ImportRun.changeset(%ImportRun{}, Map.delete(@valid_attrs, :rows))
|
|
refute changeset.valid?
|
|
assert "can't be blank" in errors_on(changeset).rows
|
|
end
|
|
|
|
test "requires total_rows" do
|
|
changeset = ImportRun.changeset(%ImportRun{}, Map.delete(@valid_attrs, :total_rows))
|
|
refute changeset.valid?
|
|
assert "can't be blank" in errors_on(changeset).total_rows
|
|
end
|
|
|
|
test "rejects a bad status" do
|
|
changeset = ImportRun.changeset(%ImportRun{}, Map.put(@valid_attrs, :status, "weird"))
|
|
refute changeset.valid?
|
|
assert errors_on(changeset).status != []
|
|
end
|
|
|
|
test "accepts every declared status" do
|
|
for status <- ImportRun.statuses() do
|
|
changeset = ImportRun.changeset(%ImportRun{}, Map.put(@valid_attrs, :status, status))
|
|
assert changeset.valid?, "expected #{inspect(status)} to be valid"
|
|
end
|
|
end
|
|
|
|
test "round-trips through the database" do
|
|
assert {:ok, run} =
|
|
%ImportRun{}
|
|
|> ImportRun.changeset(%{
|
|
submitter_email: "a@example.com",
|
|
rows: %{"rows" => [%{"row_num" => 2}], "refinement_ids" => []},
|
|
total_rows: 1
|
|
})
|
|
|> Repo.insert()
|
|
|
|
reloaded = Repo.get!(ImportRun, run.id)
|
|
assert reloaded.status == "pending"
|
|
assert reloaded.total_rows == 1
|
|
assert reloaded.rows == %{"rows" => [%{"row_num" => 2}], "refinement_ids" => []}
|
|
end
|
|
end
|
|
end
|