Tests/Import-ObjectGraph.Tests.ps1
#Requires -Modules @{ModuleName="Pester"; ModuleVersion="5.5.0"} using module ..\..\ObjectGraphTools [Diagnostics.CodeAnalysis.SuppressMessage('PSUseDeclaredVarsMoreThanAssignments', 'Object', Justification = 'False positive')] [Diagnostics.CodeAnalysis.SuppressMessage('PSUseDeclaredVarsMoreThanAssignments', 'Expression', Justification = 'False positive')] param() # $PesterPreference = [PesterConfiguration]::Default # $PesterPreference.Should.ErrorAction = 'Stop' Describe 'Import-ObjectGraph' { BeforeAll { # Set-StrictMode -Version Latest $PS1File = Join-Path $Env:Temp 'ObjectGraph.ps1' $PSD1File = Join-Path $Env:Temp 'ObjectGraph.psd1' $Expression = @' @{ first_name = 'John' last_name = 'Smith' is_alive = $True birthday = [DateTime]'Monday, October 7, 1963 10:47:00 PM' age = 27 address = [PSCustomObject]@{ street_address = '21 2nd Street' city = 'New York' state = 'NY' postal_code = '10021-3100' } phone_numbers = @( @{ number = '212 555-1234' }, @{ number = '646 555-4567' } ) children = @('Catherine') spouse = $Null } '@ $Expression | Set-Content -LiteralPath $PS1File $Expression | Set-Content -LiteralPath $PSD1File } Context 'Existence Check' { It 'Help' { Import-ObjectGraph -? | Out-String -Stream | Should -Contain SYNOPSIS } } Context 'PowerShell data (.psd1) file' { It "Default" { $Object = Import-ObjectGraph $PSD1File $Object | Should -BeOfType PSCustomObject $Object.PSObject.Properties.Name | Should -Be 'first_name', 'last_name', 'is_alive', 'birthday', 'age', 'address', 'phone_numbers', 'children', 'spouse' $Object.first_name | Should -BeOfType String $Object.birthday | Should -BeOfType String $Object.address | Should -BeOfType PSCustomObject ,$Object.children | Should -BeOfType Array } It "AsHashTable" { $Object = Import-ObjectGraph $PSD1File -MapAs @{} $Object | Should -BeOfType HashTable $Object.Keys | Sort-Object | Should -Be 'address', 'age', 'birthday', 'children', 'first_name', 'is_alive', 'last_name', 'phone_numbers', 'spouse' $Object.Address | Should -not -BeNullOrEmpty # Cash insensitive $Object.first_name | Should -BeOfType String $Object.birthday | Should -BeOfType String $Object.address | Should -BeOfType HashTable ,$Object.children | Should -BeOfType Array } } Context 'PowerShell (.ps1) file' { It "Default" { $Object = Import-ObjectGraph $PS1File $Object | Should -BeOfType HashTable $Object.Keys | Sort-Object | Should -Be 'address', 'age', 'birthday', 'children', 'first_name', 'is_alive', 'last_name', 'phone_numbers', 'spouse' $Object.first_name | Should -BeOfType String $Object.birthday | Should -BeOfType DateTime $Object.address | Should -BeOfType PSCustomObject ,$Object.children | Should -BeOfType Array } It "Restricted" { $Object = Import-ObjectGraph $PS1File -LanguageMode Restricted $Object | Should -BeOfType HashTable $Object.Keys | Sort-Object | Should -Be 'address', 'age', 'birthday', 'children', 'first_name', 'is_alive', 'last_name', 'phone_numbers', 'spouse' $Object.first_name | Should -BeOfType String $Object.birthday | Should -BeOfType String $Object.address | Should -BeOfType HashTable ,$Object.children | Should -BeOfType Array } } AfterAll { Remove-Item -LiteralPath $PS1File Remove-Item -LiteralPath $PSD1File } } |