mirror of
https://github.com/dfinke/ImportExcel.git
synced 2025-12-06 00:23:20 +00:00
90 lines
2.8 KiB
PowerShell
90 lines
2.8 KiB
PowerShell
function ConvertTo-PesterTest {
|
|
param(
|
|
[parameter(Mandatory)]
|
|
$XlFilename,
|
|
$WorksheetName = 'Sheet1'
|
|
)
|
|
|
|
$testFileName = "{0}.tests.ps1" -f (Get-date).ToString("yyyyMMddHHmmss")
|
|
|
|
$records = Import-Excel $XlFilename
|
|
|
|
$params = @{}
|
|
|
|
$blocks = $(foreach ($record in $records) {
|
|
foreach ($propertyName in $record.psobject.properties.name) {
|
|
if ($propertyName -notmatch 'ExpectedResult|QueryString') {
|
|
$params.$propertyName = $record.$propertyName
|
|
}
|
|
}
|
|
|
|
if ($record.QueryString) {
|
|
$params.Uri += "?{0}" -f $record.QueryString
|
|
}
|
|
|
|
@"
|
|
|
|
it "Should have the expected result '$($record.ExpectedResult)'" {
|
|
`$target = '$($params | ConvertTo-Json -compress)' | ConvertFrom-Json
|
|
|
|
`$target.psobject.Properties.name | ForEach-Object {`$p=@{}} {`$p.`$_=`$(`$target.`$_)}
|
|
|
|
Invoke-RestMethod @p | Should -Be '$($record.ExpectedResult)'
|
|
}
|
|
|
|
"@
|
|
})
|
|
|
|
@"
|
|
Describe "Tests from $($XlFilename) in $($WorksheetName)" {
|
|
$($blocks)
|
|
}
|
|
"@ | Set-Content -Encoding Ascii $testFileName
|
|
|
|
[PSCustomObject]@{
|
|
TestFileName = (Get-ChildItem $testFileName).FullName
|
|
}
|
|
}
|
|
|
|
function Show-PesterResult {
|
|
param(
|
|
[Parameter(ValueFromPipelineByPropertyName, Mandatory)]
|
|
$TestFileName
|
|
)
|
|
|
|
Begin {
|
|
$xlfilename = ".\test.xlsx"
|
|
Remove-Item $xlfilename -ErrorAction SilentlyContinue
|
|
|
|
$ConditionalText = @()
|
|
$ConditionalText += New-ConditionalText -Range "Result" -Text failed -BackgroundColor red -ConditionalTextColor black
|
|
$ConditionalText += New-ConditionalText -Range "Result" -Text passed -BackgroundColor green -ConditionalTextColor black
|
|
$ConditionalText += New-ConditionalText -Range "Result" -Text pending -BackgroundColor gray -ConditionalTextColor black
|
|
|
|
$xlParams = @{
|
|
Path = $xlfilename
|
|
WorkSheetname = 'PesterTests'
|
|
ConditionalText = $ConditionalText
|
|
PivotRows = 'Result', 'Name'
|
|
PivotData = @{'Result' = 'Count'}
|
|
IncludePivotTable = $true
|
|
AutoSize = $true
|
|
AutoNameRange = $true
|
|
AutoFilter = $true
|
|
Show = $true
|
|
}
|
|
}
|
|
|
|
End {
|
|
|
|
$(foreach ($result in (Invoke-Pester -Script $TestFileName -PassThru -Show None).TestResult) {
|
|
[PSCustomObject][Ordered]@{
|
|
Description = $result.Describe
|
|
Name = $result.Name
|
|
Result = $result.Result
|
|
Messge = $result.FailureMessage
|
|
StackTrace = $result.StackTrace
|
|
}
|
|
}) | Export-Excel @xlParams
|
|
}
|
|
} |