core/modules/monkeyhtml/tests/New-HtmlTag.Tests.ps1

Set-StrictMode -Version Latest
Import-Module Pester


Describe "New-HtmlTag Tests" {
    BeforeAll {
        $module = (Get-Item $PSScriptRoot).Parent
        Import-Module $module.FullName -Force
        # Mock template object
        [xml]$global:MockTemplate = "<html></html>"
    }

    It "Creates a tag with the correct name" {
        InModuleScope monkeyhtml {
            $result = New-HtmlTag -Name "div" -Template $MockTemplate
            $result.LocalName | Should -Be "div"
        }
    }

    It "Sets attributes correctly" {
        InModuleScope monkeyhtml {
            $attributes = @{ "data-test" = "value"; "role" = "button" }
            $result = New-HtmlTag -Name "div" -Template $MockTemplate -Attributes $attributes
            $result.GetAttribute("data-test") | Should -Be "value"
            $result.GetAttribute("role") | Should -Be "button"
        }
    }

    It "Adds class names correctly" {
        InModuleScope monkeyhtml {
            $classNames = @("class1", "class2")
            $result = New-HtmlTag -Name "div" -Template $MockTemplate -ClassName $classNames
            $result.GetAttribute("class") | Should -Be "class1 class2"
        }
    }

    It "Sets the ID correctly" {
        InModuleScope monkeyhtml {
            $result = New-HtmlTag -Name "div" -Template $MockTemplate -Id "test-id"
            $result.GetAttribute("id") | Should -Be "test-id"
        }
    }

    It "Adds inner text correctly" {
        InModuleScope monkeyhtml {
            $result = New-HtmlTag -Name "div" -Template $MockTemplate -Text "Hello World" -InnerText
            $result.InnerText | Should -Be "Hello World"
        }
    }

    It "Adds text as a text node by default" {
        InModuleScope monkeyhtml {
            $result = New-HtmlTag -Name "div" -Template $MockTemplate -Text "Hello World"
            $result.ChildNodes[0].NodeType | Should -Be "Text"
            $result.ChildNodes[0].Value | Should -Be "Hello World"
        }
    }

    It "Appends objects correctly" {
        InModuleScope monkeyhtml {
            [xml]$childNode = "<child>Child Content</child>"
            $result = New-HtmlTag -Name "div" -Template $MockTemplate -AppendObject $childNode
            $result.ChildNodes[0].OuterXml | Should -Be "<child>Child Content</child>"
        }
    }

    It "Marks the tag as empty when Empty switch is used" {
        InModuleScope monkeyhtml {
            $result = New-HtmlTag -Name "div" -Template $MockTemplate -Empty
            $result.InnerText | Should -Be ""
        }
    }
}