Skip to content

Commit d4e7a0d

Browse files
authored
Scope by product when getting update stats for deployment (#2366)
1 parent 76d0b40 commit d4e7a0d

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

lib/nerves_hub/devices/update_stats.ex

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ defmodule NervesHub.Devices.UpdateStats do
5555
def stats_by_deployment(deployment_group) do
5656
UpdateStat
5757
|> where(deployment_id: ^deployment_group.id)
58-
|> join(:inner, [s], f in Firmware, on: fragment("?::uuid", f.uuid) == s.target_firmware_uuid)
58+
|> join(:inner, [s], f in Firmware,
59+
on: fragment("?::uuid", f.uuid) == s.target_firmware_uuid and f.product_id == ^deployment_group.product_id
60+
)
5961
|> group_by([s, f], [s.target_firmware_uuid, f.version])
6062
|> select([s, f], %{
6163
version: f.version,

test/nerves_hub/devices/update_stats_test.exs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,34 @@ defmodule NervesHub.Devices.UpdateStatsTest do
222222
result = UpdateStats.stats_by_deployment(deployment_group)
223223
assert result == %{}
224224
end
225+
226+
test "scopes by product id", %{
227+
device: device,
228+
device2: device2,
229+
deployment_group: deployment_group,
230+
target_firmware: target_firmware,
231+
source_firmware_metadata: source_firmware_metadata
232+
} do
233+
device = Devices.update_deployment_group(device, deployment_group)
234+
:ok = UpdateStats.log_update(device, source_firmware_metadata)
235+
236+
# create firmware from different product with same uuid
237+
user2 = Fixtures.user_fixture()
238+
org2 = Fixtures.org_fixture(user2, %{name: "foo"})
239+
org_key2 = Fixtures.org_key_fixture(org2, user2)
240+
product2 = Fixtures.product_fixture(user2, org2)
241+
242+
firmware2 =
243+
Fixtures.firmware_fixture(org_key2, product2, %{version: "2.0.0"})
244+
|> Ecto.Changeset.change(%{uuid: target_firmware.uuid})
245+
|> Repo.update!()
246+
247+
{:ok, firmware2_metadata} = Firmwares.metadata_from_firmware(firmware2)
248+
:ok = UpdateStats.log_update(device2, firmware2_metadata)
249+
250+
stats = UpdateStats.stats_by_deployment(deployment_group)
251+
assert stats[target_firmware.uuid].total_updates == 1
252+
end
225253
end
226254

227255
describe "total_stats_by_product/1" do

0 commit comments

Comments
 (0)