Tests/Environment/Add-EnvironmentVariable.Tests.ps1
|
BeforeAll { Set-StrictMode -Version "Latest" . "$PSScriptRoot\..\..\Source\Environment\Get-EnvironmentVariable.ps1" . "$PSScriptRoot\..\..\Source\Environment\Set-EnvironmentVariable.ps1" . "$PSScriptRoot\..\..\Source\Environment\Add-EnvironmentVariable.ps1" } Describe "Add-EnvironmentVariable" { AfterEach { [Environment]::SetEnvironmentVariable("ToolboxTestVariable", $null, "Process") } It "Adds the value when the variable is unset" { Add-EnvironmentVariable -Name "ToolboxTestVariable" -Value "C:\First" -Scope "Process" [Environment]::GetEnvironmentVariable("ToolboxTestVariable", "Process") | Should -Be "C:\First" } It "Appends the value when the variable already has other entries" { [Environment]::SetEnvironmentVariable("ToolboxTestVariable", "C:\First", "Process") Add-EnvironmentVariable -Name "ToolboxTestVariable" -Value "C:\Second" -Scope "Process" [Environment]::GetEnvironmentVariable("ToolboxTestVariable", "Process") | Should -Be "C:\First,C:\Second" } It "Does not duplicate a value that is already present" { [Environment]::SetEnvironmentVariable("ToolboxTestVariable", "C:\First,C:\Second", "Process") Add-EnvironmentVariable -Name "ToolboxTestVariable" -Value "C:\First" -Scope "Process" [Environment]::GetEnvironmentVariable("ToolboxTestVariable", "Process") | Should -Be "C:\First,C:\Second" } It "Does nothing under -WhatIf" { [Environment]::SetEnvironmentVariable("ToolboxTestVariable", "C:\First", "Process") Add-EnvironmentVariable -Name "ToolboxTestVariable" -Value "C:\Second" -Scope "Process" -WhatIf [Environment]::GetEnvironmentVariable("ToolboxTestVariable", "Process") | Should -Be "C:\First" } It "Uses a custom separator when specified" { [Environment]::SetEnvironmentVariable("ToolboxTestVariable", "C:\First", "Process") Add-EnvironmentVariable -Name "ToolboxTestVariable" -Value "C:\Second" -Scope "Process" -Separator ";" [Environment]::GetEnvironmentVariable("ToolboxTestVariable", "Process") | Should -Be "C:\First;C:\Second" } It "Does not duplicate a value that is already present with a custom separator" { [Environment]::SetEnvironmentVariable("ToolboxTestVariable", "C:\First;C:\Second", "Process") Add-EnvironmentVariable -Name "ToolboxTestVariable" -Value "C:\First" -Scope "Process" -Separator ";" [Environment]::GetEnvironmentVariable("ToolboxTestVariable", "Process") | Should -Be "C:\First;C:\Second" } It "Accepts multiple values from the pipeline for the same variable" { "C:\First", "C:\Second" | Add-EnvironmentVariable -Name "ToolboxTestVariable" -Scope "Process" [Environment]::GetEnvironmentVariable("ToolboxTestVariable", "Process") | Should -Be "C:\First,C:\Second" } It "Ignores pipeline values that are already present" { [Environment]::SetEnvironmentVariable("ToolboxTestVariable", "C:\First", "Process") "C:\First", "C:\Second" | Add-EnvironmentVariable -Name "ToolboxTestVariable" -Scope "Process" [Environment]::GetEnvironmentVariable("ToolboxTestVariable", "Process") | Should -Be "C:\First,C:\Second" } It "Does not write when every pipeline value is already present" { [Environment]::SetEnvironmentVariable("ToolboxTestVariable", "C:\First", "Process") Mock -CommandName "Set-EnvironmentVariable" -MockWith {} "C:\First" | Add-EnvironmentVariable -Name "ToolboxTestVariable" -Scope "Process" Should -Invoke -CommandName "Set-EnvironmentVariable" -Times 0 } It "Accepts Name and Value by property name from the pipeline, grouping writes per name" { [pscustomobject]@{ Name = "ToolboxTestVariable"; Value = "C:\First" }, [pscustomobject]@{ Name = "ToolboxTestVariable"; Value = "C:\Second" } | Add-EnvironmentVariable -Scope "Process" [Environment]::GetEnvironmentVariable("ToolboxTestVariable", "Process") | Should -Be "C:\First,C:\Second" } } |