From 56c06bfb3a0b9bd85f0ed48c9041c5c7b89c8ae6 Mon Sep 17 00:00:00 2001 From: Nathanael BOT Date: Tue, 3 Mar 2026 18:53:21 +0100 Subject: [PATCH] test: add Pester coverage for Initialize-PSBuild behavior --- tests/Initialize-PSBuild.tests.ps1 | 57 ++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 tests/Initialize-PSBuild.tests.ps1 diff --git a/tests/Initialize-PSBuild.tests.ps1 b/tests/Initialize-PSBuild.tests.ps1 new file mode 100644 index 0000000..44305e7 --- /dev/null +++ b/tests/Initialize-PSBuild.tests.ps1 @@ -0,0 +1,57 @@ +Describe 'Initialize-PSBuild' { + BeforeAll { + Import-Module "$PSScriptRoot/../PowerShellBuild/PowerShellBuild.psd1" -Force + } + + BeforeEach { + $script:capturedBuildOutput = $null + Mock -CommandName Set-BuildEnvironment -MockWith { + param($BuildOutput) + $script:capturedBuildOutput = $BuildOutput + } + + $env:BHProjectPath = '/repo/project' + $env:BHProjectName = 'DemoModule' + + $script:baseEnvironment = @{ + Build = @{ + OutDir = 'out' + } + General = @{ + ModuleVersion = '1.2.3' + } + } + } + + It 'sets ModuleOutDir under BHProjectPath when OutDir is relative' { + $envCopy = $script:baseEnvironment.PSObject.Copy() + Initialize-PSBuild -BuildEnvironment $script:baseEnvironment + + $expected = [IO.Path]::Combine('/repo/project', 'out', 'DemoModule', '1.2.3') + $script:baseEnvironment.Build.ModuleOutDir | Should -Be $expected + $script:capturedBuildOutput | Should -Be $expected + Assert-MockCalled Set-BuildEnvironment -Times 1 -Exactly + } + + It 'keeps OutDir-rooted path when OutDir already starts with BHProjectPath (case-insensitive)' { + $script:baseEnvironment.Build.OutDir = '/REPO/PROJECT/out' + + Initialize-PSBuild -BuildEnvironment $script:baseEnvironment + + $expected = [IO.Path]::Combine('/REPO/PROJECT/out', 'DemoModule', '1.2.3') + $script:baseEnvironment.Build.ModuleOutDir | Should -Be $expected + $script:capturedBuildOutput | Should -Be $expected + Assert-MockCalled Set-BuildEnvironment -Times 1 -Exactly + } + + It 'prints BuildHelpers environment section only when UseBuildHelpers is present' { + Mock -CommandName Get-Item -MockWith { @() } + Mock -CommandName Write-Host + + Initialize-PSBuild -BuildEnvironment $script:baseEnvironment + Assert-MockCalled Write-Host -Times 2 -Exactly + + Initialize-PSBuild -BuildEnvironment $script:baseEnvironment -UseBuildHelpers + Assert-MockCalled Write-Host -Times 5 + } +}