← Files Power BI DesktopARCHIVED FILE
scripts/Test-PowerBIGoldenBaselines.ps1
2.9 KB · Oct 2, 2026 · 00:32 UTC
param(
[string]$PluginRoot = (Resolve-Path -LiteralPath (Join-Path $PSScriptRoot '..')).Path,
[string]$BaselinesPath,
[switch]$Json
)
$ErrorActionPreference = 'Stop'
$resolvedPluginRoot = (Resolve-Path -LiteralPath $PluginRoot).Path
if (-not $BaselinesPath) {
$BaselinesPath = Join-Path $resolvedPluginRoot 'rules/powerbi-golden-baselines.json'
}
$baselines = Get-Content -Raw -LiteralPath $BaselinesPath | ConvertFrom-Json
$results = New-Object System.Collections.Generic.List[object]
function Add-GoldenResult {
param([string]$Name, [bool]$Passed, [string]$Detail)
$results.Add([pscustomobject]@{
name = $Name
passed = $Passed
detail = $Detail
})
}
foreach ($baseline in @($baselines.baselines)) {
$baselinePath = Join-Path $resolvedPluginRoot $baseline.path
$catalog = & (Join-Path $PSScriptRoot 'New-PowerBIMetricCatalog.ps1') -Path $baselinePath -Json | ConvertFrom-Json
$graph = & (Join-Path $PSScriptRoot 'New-PowerBIDependencyGraph.ps1') -Path $baselinePath -Json | ConvertFrom-Json
$scan = & (Join-Path $PSScriptRoot 'Invoke-PowerBIInsightScan.ps1') -Path $baselinePath -Json | ConvertFrom-Json
Add-GoldenResult -Name "$($baseline.name): metric count" -Passed ($catalog.metricCount -eq $baseline.metricCount) -Detail "Expected=$($baseline.metricCount), Actual=$($catalog.metricCount)"
Add-GoldenResult -Name "$($baseline.name): dependency edges" -Passed ($graph.edgeCount -eq $baseline.dependencyEdgeCount) -Detail "Expected=$($baseline.dependencyEdgeCount), Actual=$($graph.edgeCount)"
Add-GoldenResult -Name "$($baseline.name): insight findings" -Passed (@($scan.Findings).Count -eq $baseline.insightFindingCount) -Detail "Expected=$($baseline.insightFindingCount), Actual=$(@($scan.Findings).Count)"
Add-GoldenResult -Name "$($baseline.name): insight risk floor" -Passed ($scan.RiskScore -ge $baseline.minimumInsightRiskScore) -Detail "Minimum=$($baseline.minimumInsightRiskScore), Actual=$($scan.RiskScore)"
foreach ($measureName in @($baseline.requiredMeasures)) {
$exists = @($catalog.metrics | Where-Object { $_.name -eq $measureName }).Count -gt 0
Add-GoldenResult -Name "$($baseline.name): measure $measureName" -Passed $exists -Detail "Required measure present=$exists"
}
}
$summary = [pscustomobject]@{
schema = 'codex.powerbi.goldenBaselineResults.v1'
generated = (Get-Date).ToString('s')
baselineCount = @($baselines.baselines).Count
checkCount = $results.Count
passedCount = @($results | Where-Object { $_.passed }).Count
failedCount = @($results | Where-Object { -not $_.passed }).Count
results = @($results.ToArray())
}
if ($Json) {
$summary | ConvertTo-Json -Depth 8
if ($summary.failedCount -gt 0) { exit 1 }
return
}
$summary.results | Format-Table name, passed, detail -AutoSize
if ($summary.failedCount -gt 0) { exit 1 }
SHA-256: 7ffdb63cf16e4f9068ec90f73ddabd8141957a83af4116b9680e882313621a74