Promoted pure presentation and utility helpers from `defp` to `def @doc false` across ~20 LiveViews, Oban workers, and sync modules so they're reachable from unit tests. Refactored several `cond` blocks into idiomatic function heads with guards. Added ~250 new test cases in new files under test/towerops and test/towerops_web, including DB-backed tests for CnMaestro.Sync and AlertNotificationWorker, and removed dead LiveView tab components and CapacityLive (no callers anywhere in lib/test). Configured mix.exs test_coverage.ignore_modules to exclude vendored third-party code (SnmpKit, protobuf-generated Towerops.Agent.*, Absinthe GraphQL types, Phoenix HTML modules, Inspect protocol impls) from coverage calculations — these are not our project code. Coverage: 66.93% → 70.09%. Full suite: 10,127 tests, 0 failures.
77 lines
2.1 KiB
Elixir
77 lines
2.1 KiB
Elixir
defmodule Towerops.Workers.ReportWorkerTest do
|
|
use Towerops.DataCase
|
|
use Oban.Testing, repo: Towerops.Repo
|
|
|
|
import Towerops.AccountsFixtures
|
|
|
|
alias Towerops.Reports
|
|
alias Towerops.Workers.ReportWorker
|
|
|
|
setup do
|
|
user = user_fixture()
|
|
{:ok, org} = Towerops.Organizations.create_organization(%{name: "Org RW"}, user.id)
|
|
%{org: org}
|
|
end
|
|
|
|
defp create_report(org, attrs) do
|
|
{:ok, r} =
|
|
Reports.create_report(
|
|
Map.merge(
|
|
%{
|
|
name: "rep",
|
|
report_type: "uptime_summary",
|
|
schedule: %{"type" => "daily"},
|
|
recipients: ["a@b.com"],
|
|
organization_id: org.id,
|
|
enabled: true
|
|
},
|
|
attrs
|
|
)
|
|
)
|
|
|
|
r
|
|
end
|
|
|
|
describe "perform/1 dispatcher (empty args)" do
|
|
test "enqueues jobs for due reports", %{org: org} do
|
|
# Due: never run + daily schedule
|
|
_r1 = create_report(org, %{name: "due-1"})
|
|
|
|
assert :ok = perform_job(ReportWorker, %{})
|
|
|
|
# Verify a child job was enqueued
|
|
assert [_j] = all_enqueued(worker: ReportWorker)
|
|
end
|
|
|
|
test "does not enqueue disabled reports", %{org: org} do
|
|
_disabled = create_report(org, %{enabled: false})
|
|
assert :ok = perform_job(ReportWorker, %{})
|
|
assert [] = all_enqueued(worker: ReportWorker)
|
|
end
|
|
|
|
test "does not enqueue reports that are not due", %{org: org} do
|
|
# A daily report run 1 minute ago is not due
|
|
{:ok, report} =
|
|
Reports.create_report(%{
|
|
name: "recent",
|
|
report_type: "uptime_summary",
|
|
schedule: %{"type" => "daily"},
|
|
recipients: ["a@b.com"],
|
|
organization_id: org.id,
|
|
enabled: true
|
|
})
|
|
|
|
{:ok, _} =
|
|
Reports.update_report(report, %{last_run_at: DateTime.add(DateTime.utc_now(), -60, :second)})
|
|
|
|
assert :ok = perform_job(ReportWorker, %{})
|
|
assert [] = all_enqueued(worker: ReportWorker)
|
|
end
|
|
end
|
|
|
|
describe "perform/1 (with report_id)" do
|
|
test "logs warning for missing report and returns :ok" do
|
|
assert :ok = perform_job(ReportWorker, %{"report_id" => Ecto.UUID.generate()})
|
|
end
|
|
end
|
|
end
|