defmodule Mix.Tasks.Backfill.ChecksTest do use Towerops.DataCase, async: false import ExUnit.CaptureIO import Towerops.AccountsFixtures alias Mix.Tasks.Backfill.Checks alias Towerops.Repo alias Towerops.Snmp setup do user = user_fixture() {:ok, org} = Towerops.Organizations.create_organization(%{name: "BFC-Org"}, user.id) {:ok, site} = Towerops.Sites.create_site(%{name: "BFC-Site", organization_id: org.id}) %{org: org, site: site} end describe "run/1" do test "prints zero-device summary when no SNMP-enabled devices exist" do output = capture_io(fn -> Checks.run([]) end) assert output =~ "Found 0 SNMP-enabled devices" assert output =~ "Backfill complete" end test "skips devices with no snmp_device record", %{site: site, org: org} do {:ok, _device} = Towerops.Devices.create_device(%{ name: "NoSnmp", ip_address: "10.1.1.1", site_id: site.id, organization_id: org.id, snmp_enabled: true }) output = capture_io(fn -> Checks.run([]) end) assert output =~ "Found 1 SNMP-enabled devices" assert output =~ "Skipping NoSnmp - no SNMP discovery data" end test "skips devices with snmp_device but no discovered entities", %{site: site, org: org} do {:ok, device} = Towerops.Devices.create_device(%{ name: "EmptySnmp", ip_address: "10.1.1.2", site_id: site.id, organization_id: org.id, snmp_enabled: true }) {:ok, _snmp} = Repo.insert(%Snmp.Device{device_id: device.id, sys_descr: "x"}) output = capture_io(fn -> Checks.run([]) end) assert output =~ "Skipping EmptySnmp - no discovered entities" end test "dry-run reports without creating checks", %{site: site, org: org} do {:ok, device} = Towerops.Devices.create_device(%{ name: "WithSensor", ip_address: "10.1.1.3", site_id: site.id, organization_id: org.id, snmp_enabled: true }) {:ok, snmp} = Repo.insert(%Snmp.Device{device_id: device.id, sys_descr: "x"}) {:ok, _sensor} = Repo.insert(%Snmp.Sensor{ snmp_device_id: snmp.id, sensor_index: "1", sensor_type: "temperature", sensor_descr: "test", sensor_oid: "1.3.6.1.2.1.1.1.0" }) output = capture_io(fn -> Checks.run(["--dry-run"]) end) assert output =~ "DRY RUN MODE" assert output =~ "WithSensor" assert output =~ "[DRY RUN] Would create" end end end