Tests/Unit/JeaRoleCapabilities.Tests.ps1
$Module = Resolve-Path -Path "$PSScriptRoot\..\..\DSCClassResources\JeaRoleCapabilities\JeaRoleCapabilities.psd1" Import-Module $module -Force Describe "Testing JeaRoleCapabilities" { InModuleScope JeaRoleCapabilities { Context "Test string to hashtable conversion" { It "Should return a string and a hashtable" { $Output = Convert-StringToObject -InputString "'Invoke-Cmdlet1', @{ Name = 'Invoke-Cmdlet2'}" $Output[0] | Should -Be 'Invoke-Cmdlet1' $Output[1] | Should -BeOfType [Hashtable] $Output[1].Name | Should -Be 'Invoke-Cmdlet2' } It "Should return 2 hashtables with one having a nested hashtable" { $Output = Convert-StringToObject -InputString "@{Name = 'Invoke-Cmdlet'; Parameters = @{Name = 'Parameter1';Value = 'Value1'},@{Name = 'Parameter2'; Value = 'Value2'}},@{Name = 'Invoke-Cmdlet2'}" $Output.Count | Should -Be 2 $Output[0] | Should -BeOfType [Hashtable] $Output[0].Name | Should -Be 'Invoke-Cmdlet' $Output[0].Parameters.GetType().Name | Should -Be 'Object[]' $Output[0].Parameters[0] | Should -BeOfType [Hashtable] $Output[0].Parameters[1] | Should -BeOfType [Hashtable] $Output[0].Parameters[0].Name | Should -Be 'Parameter1' $Output[1] | Should -BeOfType [Hashtable] $Output[1].Name | Should -Be 'Invoke-Cmdlet2' } It "Should return a single string when passed only one cmdlet" { $Output = Convert-StringToObject -InputString "Invoke-Cmdlet" $Output | Should -Be "Invoke-Cmdlet" } It "Should return a single hashtable when passed only one hashtable" { $Output = Convert-StringToObject -InputString "@{Name = 'Invoke-Cmdlet'}" $Output | Should -BeOfType [Hashtable] $Output.Name | Should -Be 'Invoke-Cmdlet' } It "Should return 2 strings when passed 2 comma separated strings in a single string" { $Output = Convert-StringToObject -InputString "'Invoke-Cmdlet','Invoke-Cmdlet2'" $Output | Should -Be 'Invoke-Cmdlet','Invoke-Cmdlet2' } It "Should not call New-Item when parsing the string input that contains an escaped subexpression" { Mock -CommandName New-Item -MockWith {} $null = Convert-StringToObject -InputString "`$(New-Item File.txt),'Invoke-Cmdlet'" Assert-MockCalled -CommandName New-Item -Times 0 -Scope It } It "Should return a single hashtable when passed one with multiple nested properties." { $Output = Convert-StringToObject -InputString "@{Name = 'Invoke-Cmdlet'; Parameters = @{Name = 'Parameter1';Value = 'Value1'},@{Name = 'Parameter2'; Value = 'Value2'}}" $Output | Should -BeOfType [Hashtable] $Output.Parameters.GetType().Name | Should -Be 'Object[]' $Output.Parameters[0].Name | Should -Be 'Parameter1' $Output.Parameters[0].Value | Should -Be 'Value1' $Output.Parameters[1].Name | Should -Be 'Parameter2' $Output.Parameters[1].Value | Should -Be 'Value2' } It "Should write an error when not provided with a hashtable, string or combination" { {$Output = Convert-StringToObject -InputString "`$(Get-Help)" -ErrorAction Stop} | Should -Throw } } } } |