tests/smoketests/Failure.Tests.ps1

# Smoke test for basic failure scenarios
# It is used to validate that the maester framework and reporting works as expected
# The tests here are deliberately designed to cover various Errors, arise from different exceptions.
#
# The string in TestNames Smoke_{Error, Skipped,Failed, Success, NotRun}
# are used in the Invoke-Maester.Tests.ps1 to validate the results.

Describe "Error and Skip Scenarios" {
    It "id.1.0: Smoke_Error, SkippedBecause error" {
        Add-MtTestResultDetail -SkippedBecause Error
    }

    It "id.2.0: Smoke_Error, SkippedBecause SkippedError" {
        Add-MtTestResultDetail -SkippedBecause Error -SkippedError "STRING_SKIPPEDERROR"
    }

    It "id.3.0: Smoke_Error, SkippedBecause Error Exception" {
        try {
            # Simulate some code that throws an exception
            1 + 1
            throw "ThisIsException"
        } catch {
            Add-MtTestResultDetail -SkippedBecause Error -SkippedError "$_"
        }
    }

    It "id.4.0: Smoke_Success, Setting Success" -Tag "Success" {
        Add-MtTestResultDetail -Result "All Good"
    }

    It "id.5.0: Smoke_Skipped, Setting SkippedBecause NotConnectedAzure" {
        Add-MtTestResultDetail -SkippedBecause NotConnectedAzure
    }

    It "id.6.0: Smoke_Error, Setting SkippedBecause ParameterBindingException" {
        # DELIBERATE: Missing parameter value to test parameter binding exception.
        # EXPECTED: This will cause a ParameterBindingException, which is intentional for testing error handling.
        Add-MtTestResultDetail -SkippedBecause Custom -SkippedCustomReason
    }

    It "id.7.0: Smoke_Skipped, Setting SkippedBecause Custom with Reason" {
        Add-MtTestResultDetail -SkippedBecause Custom -SkippedCustomReason "Custom Reason For Skipped"
    }

    It "id.8.0: Smoke_Error, Throwing exception, not catching" {
        throw "Uncaught exception"
    }

    It "id.9.0: Smoke_Failed, Pure Pester failure" {
        $false | Should -Be $true
    }
}

Describe "Tag Filtering Tests" {
    It "id.20.0: Smoke_NotRun, Tag not selected" -Tag 'Severity:High', 'testtag' {
        Add-MtTestResultDetail -SkippedBecause Error -SkippedError "Never reached. We exclude tag, so count as NotRun"
    }
}

Describe "Parameter Validation Tests" {
    It "id.30.0: Smoke_Error, Bad Parameter" -Tag 'Severity:High' {
        # DELIBERATE: Invalid parameter value to test error handling
        Add-MtTestResultDetail -SkippedBecause "InvalidEnumValue"
    }

    It "id.31.0: Smoke_Error, Setting Skipped Error false" -Tag 'Severity:Medium' {
        Add-MtTestResultDetail -SkippedBecause Error -SkippedError "Testing error setting"
        return $false
    }
}