prop/test/microwaveprop/radio/import_run_test.exs
Graham McIntire fd976b0cd5
fix: resolve 391 Credo issues across codebase
- 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
2026-06-12 13:51:32 -05:00

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