From c36d5d099fc54501b27fa5f8ac1391915f500121 Mon Sep 17 00:00:00 2001 From: Leonard Jonathan Oh Date: Mon, 17 Jun 2024 09:27:14 +0000 Subject: [PATCH] Enhancement (ci): Enhance test entrypoint script --- test/test.ps1 | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/test/test.ps1 b/test/test.ps1 index 1de7ba2..6a2778d 100644 --- a/test/test.ps1 +++ b/test/test.ps1 @@ -1,31 +1,50 @@ +[CmdletBinding()] param ( + [Parameter(Mandatory=$false)] + [ValidateNotNullOrEmpty()] [string]$Tag = '' ) $MODULE_NAME = (Get-Item $PSScriptRoot/../).Name $MODULE_DIR = "$PSScriptRoot/../src/$MODULE_NAME" -$MODULE_PATH = "$MODULE_DIR/$MODULE_NAME.psm1" +$MODULE_MANIFEST = "$MODULE_DIR/$MODULE_NAME.psd1" Set-StrictMode -Version Latest -$global:PesterDebugPreference_ShowFullErrors = $true # Install Pester if needed $pester = Get-Module Pester -ListAvailable -ErrorAction SilentlyContinue $pesterMinVersion = [version]'4.0.0' $pesterMaxVersion = [version]'4.10.1' -if ( ! $pester -or ! ($pester.Version | ? { $_ -ge $pesterMinVersion -and $_ -le $pesterMaxVersion }) ) { - if ($PSVersionTable.PSVersion.Major -ge 6) { - Install-Module Pester -Force -Scope CurrentUser -MinimumVersion $pesterMinVersion -MaximumVersion $pesterMaxVersion -ErrorAction Stop - }else { - Install-Module Pester -Force -Scope CurrentUser -MinimumVersion $pesterMinVersion -MaximumVersion $pesterMaxVersion -SkipPublisherCheck -ErrorAction Stop - } +if (!$pester -or !($pester.Version | ? { $_ -ge $pesterMinVersion -and $_ -le $pesterMaxVersion })) { + Install-Module Pester -Force -Scope CurrentUser -MinimumVersion $pesterMinVersion -MaximumVersion $pesterMaxVersion -ErrorAction Stop -SkipPublisherCheck } -Get-Module Pester -ListAvailable +Get-Module Pester | Remove-Module -Force Import-Module Pester -MinimumVersion $pesterMinVersion -MaximumVersion $pesterMaxVersion -Force -ErrorAction Stop +Get-Module Pester + +# Install RequiredModules if needed +$manifestObj = Invoke-Command -ScriptBlock ([scriptblock]::Create((Get-Content $MODULE_MANIFEST -Encoding utf8 -Raw))) +if ($manifestObj.Contains('RequiredModules')) { + foreach ($m in $manifestObj['RequiredModules']) { + $m = $m.Clone() + $m['Name'] = $m['ModuleName'] + $m.Remove('ModuleName') + if (!(Get-InstalledModule @m -ErrorAction SilentlyContinue)) { + "Installing required module: $( $m['Name'] )" | Write-Host -ForegroundColor Green + Install-Module @m -Force -Scope CurrentUser -ErrorAction Stop + } + Get-Module $m['Name'] -ListAvailable + } +} + +# Test the module manifest +Test-ModuleManifest "$MODULE_MANIFEST" -ErrorAction Stop > $null # Import our module Get-Module "$MODULE_NAME" | Remove-Module -Force -Import-Module $MODULE_PATH -Force -ErrorAction Stop +Import-Module $MODULE_MANIFEST -Force -ErrorAction Stop -Verbose +Get-Module "$MODULE_NAME" +$global:PesterDebugPreference_ShowFullErrors = $true # For Pester 4 if ($Tag) { # Run Unit Tests $res = Invoke-Pester -Script $MODULE_DIR -Tag $Tag -PassThru -ErrorAction Stop @@ -48,7 +67,7 @@ if ($Tag) { "$( $res2.FailedCount ) integration tests failed." | Write-Host } - if (($res -and $res.FailedCount -gt 0) -or ($res2 -and $res2.FailedCount)) { + if (($res -and $res.FailedCount -gt 0) -or ($res2 -and $res2.FailedCount -gt 0)) { throw } }