diff --git a/get-new-tool-versions/get-new-tool-versions.Tests.ps1 b/get-new-tool-versions/get-new-tool-versions.Tests.ps1 index 5638fa4..3d5e9c1 100644 --- a/get-new-tool-versions/get-new-tool-versions.Tests.ps1 +++ b/get-new-tool-versions/get-new-tool-versions.Tests.ps1 @@ -2,6 +2,21 @@ Import-Module (Join-Path $PSScriptRoot "helpers.psm1") -Force +Describe "Validate-FiltersFormat" { + It "Filter with word" { + { Validate-FiltersFormat -Filters @("1two.2") } | Should -Throw "Invalid filter format" + } + + It "Filter with non-word character" { + { Validate-FiltersFormat -Filters @("1,.2") } | Should -Throw "Invalid filter format" + } + + It "Valid filters" { + { Validate-FiltersFormat -Filters @("*", "1", "1.*", "1.2", "1.2.*") } | Should -Not -Throw "Invalid filter format" + } + +} + Describe "Format-Versions" { It "Clean versions" { $actualOutput = Format-Versions -Versions @("14.2.0", "1.14.0") @@ -34,13 +49,13 @@ Describe "Format-Versions" { } } -Describe "Filter-Versions" { +Describe "Select-VersionsByFilter" { $inputVersions = @("8.2.1", "9.3.3", "10.0.2", "10.0.3", "10.5.6", "12.4.3", "12.5.1", "14.2.0") It "Include filter only" { $includeFilters = @("8.*", "14.*") $excludeFilters = @() - $actualOutput = Filter-Versions -Versions $inputVersions -IncludeFilters $includeFilters -ExcludeFilters $excludeFilters + $actualOutput = Select-VersionsByFilter -Versions $inputVersions -IncludeFilters $includeFilters -ExcludeFilters $excludeFilters $expectedOutput = @("8.2.1", "14.2.0") $actualOutput | Should -Be $expectedOutput } @@ -48,7 +63,7 @@ Describe "Filter-Versions" { It "Include and exclude filters" { $includeFilters = @("10.*", "12.*") $excludeFilters = @("10.0.*", "12.4.3") - $actualOutput = Filter-Versions -Versions $inputVersions -IncludeFilters $includeFilters -ExcludeFilters $excludeFilters + $actualOutput = Select-VersionsByFilter -Versions $inputVersions -IncludeFilters $includeFilters -ExcludeFilters $excludeFilters $expectedOutput = @("10.5.6", "12.5.1") $actualOutput | Should -Be $expectedOutput } @@ -56,13 +71,13 @@ Describe "Filter-Versions" { It "Exclude filter only" { $includeFilters = @() $excludeFilters = @("10.*", "12.*") - $actualOutput = Filter-Versions -Versions $inputVersions -IncludeFilters $includeFilters -ExcludeFilters $excludeFilters + $actualOutput = Select-VersionsByFilter -Versions $inputVersions -IncludeFilters $includeFilters -ExcludeFilters $excludeFilters $expectedOutput = @("8.2.1", "9.3.3", "14.2.0") $actualOutput | Should -Be $expectedOutput } It "Include and exclude filters are empty" { - $actualOutput = Filter-Versions -Versions $inputVersions + $actualOutput = Select-VersionsByFilter -Versions $inputVersions $expectedOutput = @("8.2.1", "9.3.3", "10.0.2", "10.0.3", "10.5.6", "12.4.3", "12.5.1", "14.2.0") $actualOutput | Should -Be $expectedOutput } diff --git a/get-new-tool-versions/get-new-tool-versions.ps1 b/get-new-tool-versions/get-new-tool-versions.ps1 index 25fdd77..6d3a021 100644 --- a/get-new-tool-versions/get-new-tool-versions.ps1 +++ b/get-new-tool-versions/get-new-tool-versions.ps1 @@ -14,10 +14,6 @@ param ( Import-Module (Join-Path $PSScriptRoot "helpers.psm1") -$VersionFilterToInclude.GetType() -$VersionFilterToInclude.Length -$VersionFilterToInclude | ForEach-Object { Write-Host $_ } - function Get-VersionsByUrl { param ( [Parameter(Mandatory)] [string] $ToolPackagesUrl, @@ -29,6 +25,14 @@ function Get-VersionsByUrl { return $packages.version } +if ($VersionFilterToInclude) { + Validate-FiltersFormat -Filters $VersionFilterToInclude +} + +if ($VersionFilterToExclude) { + Validate-FiltersFormat -Filters $VersionFilterToExclude +} + Write-Host "Get the packages list from $DistURL" $versionsFromDist = Get-VersionsByUrl -ToolPackagesUrl $DistURL ` -RetryIntervalSec $RetryIntervalSec ` @@ -41,9 +45,9 @@ Write-Host "Get the packages list from $ManifestLink" [Version[]] $formattedVersions = Format-Versions -Versions $versionsFromDist -$formattedVersions = Filter-Versions -Versions $formattedVersions ` - -IncludeFilters $VersionFilterToInclude ` - -ExcludeFilters $VersionFilterToExclude +$formattedVersions = Select-VersionsByFilter -Versions $formattedVersions ` + -IncludeFilters $VersionFilterToInclude ` + -ExcludeFilters $VersionFilterToExclude $versionsToBuild = Skip-ExistingVersions -VersionsFromManifest $versionsFromManifest ` -VersionsFromDist $formattedVersions diff --git a/get-new-tool-versions/helpers.psm1 b/get-new-tool-versions/helpers.psm1 index 2cdc330..7b5af82 100644 --- a/get-new-tool-versions/helpers.psm1 +++ b/get-new-tool-versions/helpers.psm1 @@ -1,3 +1,17 @@ +function Validate-FiltersFormat { + param ( + [Parameter(Mandatory)] [string[]] $Filters + ) + + foreach($filter in $Filters) { + $filter.Split('.') | ForEach-Object { + if (($_ -notmatch '^\d+$') -and ($_ -ne '*')) { + throw "Invalid filter format - $filter" + } + } + } +} + function Format-Versions { param ( [Parameter(Mandatory)] [string[]] $Versions @@ -30,7 +44,7 @@ function Format-Versions { return $formattedVersions } -function Filter-Versions { +function Select-VersionsByFilter { param ( [Parameter(Mandatory)] [version[]] $Versions, [string[]] $IncludeFilters, @@ -45,8 +59,7 @@ function Filter-Versions { $ver = $_ $matchedIncludeFilters = $IncludeFilters | Where-Object { $ver -like $_ } $matchedExcludeFilters = $ExcludeFilters | Where-Object { $ver -like $_ } - - return ($matchedIncludeFilters -ne $null) -and ($matchedExcludeFilters -eq $null) + return ($null -ne $matchedIncludeFilters) -and ($null -eq $matchedExcludeFilters) } }