Tests/Image2Docker.tests.ps1
$ModuleRoot = Split-Path $PSScriptRoot -Parent $PrivateFunctions = Get-ChildItem "$ModuleRoot\Functions\Private\" -Filter '*.ps1' -Recurse | Where-Object {$_.name -NotMatch "Tests.ps1"} $PublicFunctions = Get-ChildItem "$ModuleRoot\Functions\Public\" -Filter '*.ps1' -Recurse | Where-Object {$_.name -NotMatch "Tests.ps1"} $PrivateFunctionsTests = Get-ChildItem "$ModuleRoot\Functions\Private\" -Filter '*Tests.ps1' -Recurse $PublicFunctionsTests = Get-ChildItem "$ModuleRoot\Functions\Public\" -Filter '*Tests.ps1' -Recurse $Rules = Get-ScriptAnalyzerRule $module = 'Image2Docker' Remove-Module $module -ErrorAction Ignore Import-Module "$ModuleRoot\$module.psd1" $ModuleData = Get-Module $Module $AllFunctions = & $moduleData {Param($modulename) Get-command -CommandType Function -Module $modulename} $module $PublicFunctionPath = "$ModuleRoot\Functions\Public\" $PrivateFunctionPath = "$ModuleRoot\Functions\Private\" if ($PrivateFunctions.count -gt 0) { foreach($PrivateFunction in $PrivateFunctions) { Describe "Testing Private Function - $($PrivateFunction.BaseName) for Standard Processing" { It "Is valid Powershell (Has no script errors)" { $contents = Get-Content -Path $PrivateFunction.FullName -ErrorAction Stop $errors = $null $null = [System.Management.Automation.PSParser]::Tokenize($contents, [ref]$errors) $errors.Count | Should Be 0 } } } } if ($PublicFunctions.count -gt 0) { foreach($PublicFunction in $PublicFunctions) { Describe "Testing Public Function - $($PublicFunction.BaseName) for Standard Processing" { It "Is valid Powershell (Has no script errors)" { $contents = Get-Content -Path $PublicFunction.FullName -ErrorAction Stop $errors = $null $null = [System.Management.Automation.PSParser]::Tokenize($contents, [ref]$errors) $errors.Count | Should Be 0 } } $function = $AllFunctions.Where{ $_.Name -eq $PublicFunction.BaseName} $publicfunctionTests = $Publicfunctionstests.Where{$_.Name -match $PublicFunction.BaseName } foreach ($publicfunctionTest in $publicfunctionTests) { . $($PublicFunctionTest.FullName) $function } } } Describe 'ScriptAnalyzer Rule Testing' { Context 'All Public Functions' { It 'Passes the Script Analyzer ' { (Invoke-ScriptAnalyzer -Path $PublicFunctionPath -Recurse ).Count | Should Be 0 } } } Describe 'Current Tests' { Context 'Public-facing PowerShell commands' { It 'Has a ConvertTo-Dockerfile command' { (Get-Command -Module $Module -Name ConvertTo-Dockerfile).Count | Should Be 1 } It 'Has a Get-WindowsArtifact command' { (Get-Command -Module $Module -Name Get-WindowsArtifact).Count | Should Be 1 } } Context 'Private / internal PowerShell commands' { InModuleScope -ModuleName $Module -ScriptBlock { It 'Has a GenerateDockerfile command' { (Get-Command -Module $Module -Name GenerateDockerfile).Count | Should Be 1 } It 'Has a GetImageType command' { (Get-Command -Module $Module -Name GetImageType).Count | Should Be 1 } } } Context 'Artifact Discovery' { foreach ($artifact in Get-WindowsArtifact) { It "Has an $artifact Artifact" { Get-WindowsArtifact | Where-Object {$_ -match $artifact }| Should Match $artifact } } } Context 'Test ConvertTo-Dockerfile image path' { It 'Should throw when -ImagePath parameter value is invalid' { { ConvertTo-Dockerfile -ImagePath c:\invalid\path.wim -Artifact IIS } | Should throw } } Context 'Test ConvertTo-Dockerfile source' { It 'Should throw when none of -ImagePath, -RemotePath or -Local are passed' { { ConvertTo-Dockerfile -Artifact IIS } | Should throw } } } Remove-Module $module |