Skip to content

Commit 77535da

Browse files
authored
Make sure all health reports are deleted when a device is destroyed (#1878)
This fixes a DB constraint error
1 parent a97d3a8 commit 77535da

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

lib/nerves_hub/devices.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,6 +1160,8 @@ defmodule NervesHub.Devices do
11601160
)
11611161
end
11621162

1163+
@spec save_device_health(health_report :: map()) ::
1164+
{:ok, DeviceHealth.t()} | {:error, Ecto.Changeset.t()}
11631165
def save_device_health(device_status) do
11641166
Multi.new()
11651167
|> Multi.insert(:insert_health, DeviceHealth.save(device_status))

lib/nerves_hub/devices/device.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ defmodule NervesHub.Devices.Device do
4343
has_many(:device_certificates, DeviceCertificate, on_delete: :delete_all)
4444
has_many(:device_connections, DeviceConnection, on_delete: :delete_all)
4545
has_many(:device_metrics, DeviceMetric, on_delete: :delete_all)
46+
has_many(:device_health, DeviceHealth, on_delete: :delete_all)
4647

4748
field(:identifier, :string)
4849
field(:description, :string)

test/nerves_hub/devices_test.exs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ defmodule NervesHub.DevicesTest do
77
alias NervesHub.Deployments
88
alias NervesHub.Devices
99
alias NervesHub.Devices.CACertificate
10+
alias NervesHub.Devices.Device
1011
alias NervesHub.Devices.DeviceCertificate
12+
alias NervesHub.Devices.DeviceHealth
1113
alias NervesHub.Firmwares
1214
alias NervesHub.Fixtures
1315
alias NervesHub.Products
@@ -77,6 +79,21 @@ defmodule NervesHub.DevicesTest do
7779
assert {:error, _} = Devices.get_device_by_org(org, device.id)
7880
end
7981

82+
test "destroy_device", %{device: device} do
83+
{:ok, _} =
84+
Devices.save_device_health(%{
85+
"device_id" => device.id,
86+
"data" => %{},
87+
"status" => :healthy,
88+
"status_reasons" => %{}
89+
})
90+
91+
{:ok, _device} = Devices.destroy_device(device)
92+
93+
assert is_nil(Repo.get(Device, device.id))
94+
refute Repo.exists?(where(DeviceHealth, device_id: ^device.id))
95+
end
96+
8097
test "can tag multiple devices", %{
8198
user: user,
8299
device: device,

0 commit comments

Comments
 (0)