Private/CuiTests/New-CuiTestResult.ps1

# Copyright (c) 2026 Jeffrey Snover. All rights reserved.
# Licensed under the MIT License. See LICENSE file in the project root.

function New-CuiTestResult {
    <#
    .SYNOPSIS
        Constructs a structured CUI test result from individual check results.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$CuiId,

        [Parameter(Mandatory)]
        [string]$Domain,

        [Parameter(Mandatory)]
        [string]$Priority,

        [Parameter(Mandatory)]
        [long]$DurationMs,

        [Parameter()]
        [PSObject[]]$Details = @(),

        [Parameter()]
        [string]$Error
    )

    $PassedCount = @($Details | Where-Object { $_.Pass }).Count
    $FailedCount = @($Details | Where-Object { -not $_.Pass }).Count
    $AllPass = $FailedCount -eq 0 -and -not $Error -and @($Details).Count -gt 0

    [PSCustomObject]@{
        PSTypeName = 'CuiTestResult'
        CuiId      = $CuiId
        Domain     = $Domain
        Priority   = $Priority
        Pass       = $AllPass
        DurationMs = $DurationMs
        Checks     = @($Details).Count
        Passed     = $PassedCount
        Failed     = $FailedCount
        Details    = $Details
        Error      = $Error
    }
}

function New-CuiCheckResult {
    <#
    .SYNOPSIS
        Constructs a single check result within a CUI test.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$Check,

        [Parameter(Mandatory)]
        [bool]$Pass,

        [Parameter()]
        [string]$Detail,

        [Parameter()]
        [int]$Ms = 0
    )

    [PSCustomObject]@{
        PSTypeName = 'CuiCheckResult'
        Check      = $Check
        Pass       = $Pass
        Detail     = $Detail
        Ms         = $Ms
    }
}