Tests/PSDataKit.Tests.ps1

$ModuleManifestName = 'PSDataKit.psd1'
$ModuleManifestPath = "$PSScriptRoot\..\$ModuleManifestName"
Remove-Module "PSDataKit" -Force -ErrorAction Ignore
Import-Module -Name $ModuleManifestPath -Force
Write-Host "Remove and Import PSDataKit module"

Describe 'Module Manifest Tests' {
    It 'Passes Test-ModuleManifest' {
        Test-ModuleManifest -Path $ModuleManifestPath | Should Not BeNullOrEmpty
        $? | Should Be $true
    }
}

InModuleScope PSDataKit {
    Describe 'PSDataKit merging capabilities (Merge-Hashtables)' {

        Context "secondary parameter" {
            It 'Merge with $null secondary parameter ' {
                $primary = @{
                    foo = "foo"
                    bar = "bar"
                }
                $secondary = $null

                $result = Merge-Hashtables -primary $primary -secondary $secondary

                $result | Should -BeExactly $primary
            }
            It 'Merge with BeNullOrEmpty values inside secondary parameter ' {

                $primary = @{
                    nullValue      = "nullValue"
                    emptyValue     = "emptyValue"
                    emptyArray     = "emptyArray"
                    emptyHashtable = "emptyHashtable"
                }
                $secondary = @{
                    emptyValue     = ""
                    nullValue      = $null
                    emptyArray     = @()
                    emptyHashtable = @{ }
                }

                $result = Merge-Hashtables -primary $primary -secondary $secondary

                $result.nullValue | Should -Be $primary.nullValue
                $result.emptyValue | Should -Be $primary.emptyValue
                $result.emptyArray | Should -Be $primary.emptyArray
                $result.emptyHashtable | Should -Be $primary.emptyHashtable
                $result.Test | Should -Be $primary.Test
            }

            It 'Merge with BeNullOrEmpty values inside secondary parameter when primary is hashtable' {

                $primary = @{
                    foo = @{
                        bar = "bar"
                    }
                }
                $secondary = @{
                    foo = $null
                }

                $result = Merge-Hashtables -primary $primary -secondary $secondary
                $result.foo | Should -Be $primary.foo
            }
        }



    }
}