Tests/Toolbox/Initialize-ToolboxDataLocation.Tests.ps1

BeforeAll {

    Set-StrictMode -Version "Latest"

    . "$PSScriptRoot\..\..\Source\Environment\Get-EnvironmentVariable.ps1"
    . "$PSScriptRoot\..\..\Source\Toolbox\Get-ToolboxDataLocation.ps1"
    . "$PSScriptRoot\..\..\Source\Toolbox\Initialize-ToolboxDataLocation.ps1"

    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseDeclaredVarsMoreThanAssignments", "")]
    $originalValue = [Environment]::GetEnvironmentVariable("ToolboxData", "User")

    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseDeclaredVarsMoreThanAssignments", "")]
    $testPath = Join-Path -Path $env:Temp -ChildPath "ToolboxDataTest_$(New-Guid)"

}

AfterAll {

    [Environment]::SetEnvironmentVariable("ToolboxData", $originalValue, "User")

    if (Test-Path -Path $testPath) {

        Remove-Item -Path $testPath -Recurse -Force

    }

}

Describe "Initialize-ToolboxDataLocation" {

    It "Creates the resolved location when it doesn't exist" {

        [Environment]::SetEnvironmentVariable("ToolboxData", $testPath, "User")

        Initialize-ToolboxDataLocation

        Test-Path -Path $testPath | Should -BeTrue

    }

    It "Returns the resolved location" {

        [Environment]::SetEnvironmentVariable("ToolboxData", $testPath, "User")

        $result = Initialize-ToolboxDataLocation

        $result | Should -Be $testPath

    }

    It "Does nothing under -WhatIf" {

        Remove-Item -Path $testPath -Recurse -Force -ErrorAction "SilentlyContinue"

        [Environment]::SetEnvironmentVariable("ToolboxData", $testPath, "User")

        Initialize-ToolboxDataLocation -WhatIf

        Test-Path -Path $testPath | Should -BeFalse

    }

}