tests/Integration/override.tests.ps1

if ($PSScriptRoot) {
    $here = $PSScriptRoot
}
else {
    $here = Join-Path $pwd.Path '*\tests\Integration\' -Resolve
}

Write-verbose "Here: $here"

Describe 'Test Datum overrides' {
    Context 'Most specific Merge behavior' {
        BeforeAll {

            $Datum = New-Datumstructure -DefinitionFile  (Join-path $here '.\assets\DSC_ConfigData\Datum.yml' -Resolve) 
            $Environment = 'DEV'
            $AllNodes = @($Datum.AllNodes.($Environment).psobject.Properties | ForEach-Object { 
                $Node = $Datum.AllNodes.($Environment).($_.Name)
                $null = $Node.Add('Environment',$Environment)
                if(!$Node.contains('Name') ) {
                    $null = $Node.Add('Name',$_.Name)
                }
                (@{} + $Node)
            })
            
            $ConfigurationData = @{
                AllNodes = $AllNodes
                Datum = $Datum
            }
            $Node = $ConfigurationData.AllNodes[0]
        }

        $TestCases = @(
            @{PropertyPath = 'ExampleProperty1'; ExpectedResult = 'From Node'}
            @{PropertyPath = 'Description';      ExpectedResult = 'This is the DEV environment' }
            @{PropertyPath = 'Shared1\Param1';   ExpectedResult = 'This is the Role override!'}
            @{PropertyPath = 'locationName';     ExpectedResult = 'London'}
            
        )

        It "Datum '<PropertyPath>' for Node $($node.Name) should be '<ExpectedResult>'." -TestCases $TestCases {
            Param($propertyPath,$ExpectedResult)
            Resolve-Datum -searchPaths $Datum.__Definition.ResolutionPrecedence -DatumStructure $datum -PropertyPath $propertyPath -Node $node | Should Be $ExpectedResult
        }

    }
}