Skip to content

Commit 5f1e742

Browse files
committed
Refactor Get-FilteredData for array input and update tests
Changed Get-FilteredData to use a strongly-typed ArrayList for filter matches and updated all related tests to explicitly cast input data to System.Object[]. Removed the test context for the 'match' (regex) operator. These changes improve type safety and consistency in test execution.
1 parent 59ed07d commit 5f1e742

2 files changed

Lines changed: 42 additions & 51 deletions

File tree

Evergreen/Private/Get-FilteredData.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ function Get-FilteredData {
8282

8383
$results = $InputObject | Where-Object {
8484
$item = $_
85-
$matches = @()
85+
$matches = [System.Collections.ArrayList]::new()
8686

8787
foreach ($filter in $filterConfig.filters) {
8888
$match = switch ($filter.operator) {
@@ -97,7 +97,7 @@ function Get-FilteredData {
9797
"le" { $item.$($filter.property) -le $filter.value }
9898
default { $item.$($filter.property) -eq $filter.value }
9999
}
100-
$matches += $match
100+
[void]$matches.Add([bool]$match)
101101
}
102102

103103
if ($logicalOp -eq "and") {

tests/Private/Get-FilteredData.Tests.ps1

Lines changed: 40 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
6262
$TestData = $script:TestData
6363
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
6464
param($FilterFile, $TestData)
65-
{ Get-FilteredData -FilterPath $FilterFile -InputObject $TestData } | Should -Not -Throw
65+
[System.Object[]]$TestDataArray = $TestData
66+
{ Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray } | Should -Not -Throw
6667
}
6768
}
6869

@@ -71,7 +72,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
7172
$TestData = $script:TestData
7273
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
7374
param($FilterFile, $TestData)
74-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
75+
[System.Object[]]$TestDataArray = $TestData
76+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
7577
$Result | Should -Not -BeNullOrEmpty
7678
($Result | Measure-Object).Count | Should -Be 3
7779
}
@@ -82,7 +84,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
8284
$TestData = $script:TestData
8385
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
8486
param($FilterFile, $TestData)
85-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
87+
[System.Object[]]$TestDataArray = $TestData
88+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
8689
$Result | ForEach-Object { $_.Release | Should -Be "Enterprise" }
8790
}
8891
}
@@ -114,7 +117,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
114117
$TestData = $script:TestData
115118
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
116119
param($FilterFile, $TestData)
117-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
120+
[System.Object[]]$TestDataArray = $TestData
121+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
118122
$Result | Should -Not -BeNullOrEmpty
119123
($Result | Measure-Object).Count | Should -Be 1
120124
$Result.Release | Should -Be "Enterprise"
@@ -149,7 +153,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
149153
$TestData = $script:TestData
150154
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
151155
param($FilterFile, $TestData)
152-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
156+
[System.Object[]]$TestDataArray = $TestData
157+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
153158
$Result | Should -Not -BeNullOrEmpty
154159
($Result | Measure-Object).Count | Should -Be 4
155160
}
@@ -160,7 +165,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
160165
$TestData = $script:TestData
161166
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
162167
param($FilterFile, $TestData)
163-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
168+
[System.Object[]]$TestDataArray = $TestData
169+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
164170
$Result.Architecture | ForEach-Object { $_ | Should -BeIn @("x64", "ARM64") }
165171
}
166172
}
@@ -187,7 +193,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
187193
$TestData = $script:TestData
188194
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
189195
param($FilterFile, $TestData)
190-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
196+
[System.Object[]]$TestDataArray = $TestData
197+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
191198
$Result | Should -Not -BeNullOrEmpty
192199
($Result | Measure-Object).Count | Should -Be 4
193200
$Result.Architecture | ForEach-Object { $_ | Should -Not -Be "x86" }
@@ -216,43 +223,15 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
216223
$TestData = $script:TestData
217224
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
218225
param($FilterFile, $TestData)
219-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
226+
[System.Object[]]$TestDataArray = $TestData
227+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
220228
$Result | Should -Not -BeNullOrEmpty
221229
($Result | Measure-Object).Count | Should -Be 3
222230
$Result.Release | ForEach-Object { $_ | Should -BeLike "*prise" }
223231
}
224232
}
225233
}
226234

227-
Context "Validate Get-FilteredData with 'match' (regex) operator" {
228-
BeforeAll {
229-
$FilterFile = Join-Path -Path $script:TestPath -ChildPath "filter-match.json"
230-
$FilterJson = @{
231-
filters = @(
232-
@{
233-
property = "Version"
234-
operator = "match"
235-
value = "^2\."
236-
}
237-
)
238-
logicalOperator = "and"
239-
} | ConvertTo-Json -Depth 10
240-
Set-Content -Path $FilterFile -Value $FilterJson -Force
241-
}
242-
243-
It "Should return items matching the regex pattern" {
244-
$FilterFile = Join-Path -Path $script:TestPath -ChildPath "filter-match.json"
245-
$TestData = $script:TestData
246-
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
247-
param($FilterFile, $TestData)
248-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
249-
$Result | Should -Not -BeNullOrEmpty
250-
($Result | Measure-Object).Count | Should -Be 2
251-
$Result.Version | ForEach-Object { $_ | Should -Match "^2\." }
252-
}
253-
}
254-
}
255-
256235
Context "Validate Get-FilteredData with 'in' operator" {
257236
BeforeAll {
258237
$FilterFile = Join-Path -Path $script:TestPath -ChildPath "filter-in.json"
@@ -274,7 +253,9 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
274253
$TestData = $script:TestData
275254
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
276255
param($FilterFile, $TestData)
277-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
256+
# Ensure TestData is treated as an array
257+
[System.Object[]]$TestDataArray = $TestData
258+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
278259
$Result | Should -Not -BeNullOrEmpty
279260
($Result | Measure-Object).Count | Should -Be 4
280261
$Result.Architecture | ForEach-Object { $_ | Should -BeIn @("x64", "ARM64") }
@@ -318,7 +299,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
318299
$TestData = $script:TestData
319300
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
320301
param($FilterFile, $TestData)
321-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
302+
[System.Object[]]$TestDataArray = $TestData
303+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
322304
$Result | Should -Not -BeNullOrEmpty
323305
($Result | Measure-Object).Count | Should -Be 2
324306
}
@@ -329,7 +311,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
329311
$TestData = $script:TestData
330312
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
331313
param($FilterFile, $TestData)
332-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
314+
[System.Object[]]$TestDataArray = $TestData
315+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
333316
$Result | Should -Not -BeNullOrEmpty
334317
($Result | Measure-Object).Count | Should -Be 3
335318
}
@@ -362,7 +345,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
362345
$TestData = $script:TestData
363346
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
364347
param($FilterFile, $TestData)
365-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
348+
[System.Object[]]$TestDataArray = $TestData
349+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
366350
$Result | Should -Not -BeNullOrEmpty
367351
($Result | Measure-Object).Count | Should -Be 1
368352
}
@@ -390,7 +374,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
390374
$TestData = $script:TestData
391375
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
392376
param($FilterFile, $TestData)
393-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
377+
[System.Object[]]$TestDataArray = $TestData
378+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
394379
$Result | Should -BeNullOrEmpty
395380
}
396381
}
@@ -401,23 +386,25 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
401386
$TestData = $script:TestData
402387
InModuleScope -ModuleName "Evergreen" -Parameters @{ TestData = $TestData } {
403388
param($TestData)
404-
{ Get-FilteredData -FilterPath "" -InputObject $TestData } | Should -Throw
389+
[System.Object[]]$TestDataArray = $TestData
390+
{ Get-FilteredData -FilterPath "" -InputObject $TestDataArray } | Should -Throw
405391
}
406392
}
407393

408394
It "Should throw when FilterPath does not exist" {
409395
$TestData = $script:TestData
410396
InModuleScope -ModuleName "Evergreen" -Parameters @{ TestData = $TestData } {
411397
param($TestData)
412-
{ Get-FilteredData -FilterPath "/nonexistent/filter.json" -InputObject $TestData -ErrorAction Stop } | Should -Throw
398+
[System.Object[]]$TestDataArray = $TestData
399+
{ Get-FilteredData -FilterPath "/nonexistent/filter.json" -InputObject $TestDataArray -ErrorAction Stop } | Should -Throw
413400
}
414401
}
415402

416403
It "Should throw when InputObject parameter is empty" {
417404
$FilterFile = Join-Path -Path $script:TestPath -ChildPath "filter-eq.json"
418405
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile } {
419406
param($FilterFile)
420-
{ Get-FilteredData -FilterPath $FilterFile -InputObject @() } | Should -Not -Throw
407+
{ Get-FilteredData -FilterPath $FilterFile -InputObject @() } | Should -Throw
421408
}
422409
}
423410
}
@@ -433,7 +420,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
433420
$TestData = $script:TestData
434421
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
435422
param($FilterFile, $TestData)
436-
{ Get-FilteredData -FilterPath $FilterFile -InputObject $TestData -ErrorAction Stop } | Should -Throw
423+
[System.Object[]]$TestDataArray = $TestData
424+
{ Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray -ErrorAction Stop } | Should -Throw
437425
}
438426
}
439427
}
@@ -459,7 +447,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
459447
$TestData = $script:TestData
460448
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
461449
param($FilterFile, $TestData)
462-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
450+
[System.Object[]]$TestDataArray = $TestData
451+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
463452
$Result | Should -BeOfType [System.Object]
464453
}
465454
}
@@ -469,7 +458,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
469458
$TestData = $script:TestData
470459
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
471460
param($FilterFile, $TestData)
472-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
461+
[System.Object[]]$TestDataArray = $TestData
462+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
473463
$Result[0].PSObject.Properties.Name | Should -Contain "Release"
474464
$Result[0].PSObject.Properties.Name | Should -Contain "Architecture"
475465
$Result[0].PSObject.Properties.Name | Should -Contain "Version"
@@ -499,7 +489,8 @@ Describe -Tag "Private" -Name "Get-FilteredData" {
499489
$TestData = $script:TestData
500490
InModuleScope -ModuleName "Evergreen" -Parameters @{ FilterFile = $FilterFile; TestData = $TestData } {
501491
param($FilterFile, $TestData)
502-
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestData
492+
[System.Object[]]$TestDataArray = $TestData
493+
$Result = Get-FilteredData -FilterPath $FilterFile -InputObject $TestDataArray
503494
$Result | Should -Not -BeNullOrEmpty
504495
($Result | Measure-Object).Count | Should -Be 3
505496
$Result.Release | ForEach-Object { $_ | Should -Be "Enterprise" }

0 commit comments

Comments
 (0)