From bdb5f09e0793fe07ef46131ff2795732e8924bc8 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Thu, 1 Oct 2026 14:18:12 +0100 Subject: [PATCH] fix: normalize enumerable subscription collections --- .../Invoke-DailySupportCheck.ps1 | 7 ++-- .../Tests/Invoke-DailySupportCheck.Tests.ps1 | 34 +++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/ScheduledTasks/DailySupportCheck/Invoke-DailySupportCheck.ps1 b/ScheduledTasks/DailySupportCheck/Invoke-DailySupportCheck.ps1 index 5f2f9a2..557f7e5 100644 --- a/ScheduledTasks/DailySupportCheck/Invoke-DailySupportCheck.ps1 +++ b/ScheduledTasks/DailySupportCheck/Invoke-DailySupportCheck.ps1 @@ -454,14 +454,17 @@ function Test-SubscriptionService { } $subscriptions = @(& $provider $uri $timeoutSeconds) - if ($subscriptions.Count -eq 1 -and $subscriptions[0].PSObject.Properties['subscriptionId'] -and $subscriptions[0].subscriptionId -is [array]) { + $subscriptionIdValue = if ($subscriptions.Count -eq 1 -and $subscriptions[0].PSObject.Properties['subscriptionId']) { $subscriptions[0].subscriptionId } + $isSubscriptionCollection = $subscriptionIdValue -is [System.Collections.IEnumerable] -and $subscriptionIdValue -isnot [string] + if ($subscriptions.Count -eq 1 -and $subscriptions[0].PSObject.Properties['subscriptionId'] -and $isSubscriptionCollection) { $wrappedSubscriptions = $subscriptions[0] $subscriptionCount = @($wrappedSubscriptions.subscriptionId).Count $subscriptions = for ($index = 0; $index -lt $subscriptionCount; $index++) { $subscription = [ordered]@{} foreach ($property in $wrappedSubscriptions.PSObject.Properties) { $value = $property.Value - $subscription[$property.Name] = if ($value -is [array] -and $value.Count -eq $subscriptionCount) { $value[$index] } else { $value } + $isCollection = $value -is [System.Collections.IEnumerable] -and $value -isnot [string] + $subscription[$property.Name] = if ($isCollection -and @($value).Count -eq $subscriptionCount) { @($value)[$index] } else { $value } } [pscustomobject] $subscription } diff --git a/ScheduledTasks/DailySupportCheck/Tests/Invoke-DailySupportCheck.Tests.ps1 b/ScheduledTasks/DailySupportCheck/Tests/Invoke-DailySupportCheck.Tests.ps1 index 177aca6..c76434c 100644 --- a/ScheduledTasks/DailySupportCheck/Tests/Invoke-DailySupportCheck.Tests.ps1 +++ b/ScheduledTasks/DailySupportCheck/Tests/Invoke-DailySupportCheck.Tests.ps1 @@ -519,6 +519,40 @@ Describe 'Daily support check' { $result.Details.Count | Should -Be 2 } + It 'expands wrapped enumerable subscription collections returned by the API' { + $context = [pscustomobject]@{ + Configuration = [pscustomobject]@{ + SubscriptionService = [pscustomobject]@{ + Enabled = $true + BaseUrl = 'http://subscription-service' + StatusPath = '/subscriptions/status' + TimeoutSeconds = 10 + } + } + SubscriptionServiceProvider = { + $subscriptionIds = [System.Collections.ArrayList]::new(@('subscription-1', 'subscription-2')) + $tags = [System.Collections.ArrayList]::new(@('Main', 'Ordered')) + $runningStates = [System.Collections.ArrayList]::new(@($true, $true)) + $healthStates = [System.Collections.ArrayList]::new(@('Healthy', 'Healthy')) + $parkedCounts = [System.Collections.ArrayList]::new(@(0, 2)) + [pscustomobject]@{ + subscriptionId = $subscriptionIds + tag = $tags + isRunning = $runningStates + health = $healthStates + parkedEventCount = $parkedCounts + } + } + } + + $result = Test-SubscriptionService -Context $context + + $result.Status | Should -Be 'Warning' + $result.Details.Count | Should -Be 2 + $result.Details[0].SubscriptionId | Should -Be 'subscription-1' + $result.Details[1].SubscriptionId | Should -Be 'subscription-2' + } + It 'fails when a subscription is stopped and warns when parked messages exist' { $configuration = [pscustomobject]@{ SubscriptionService = [pscustomobject]@{