Tests/Src/LabModule.Tests.ps1

#requires -RunAsAdministrator
#requires -Version 4

$moduleName = 'Lability';
$repoRoot = (Resolve-Path "$PSScriptRoot\..\..").Path;
Import-Module (Join-Path -Path $RepoRoot -ChildPath "$moduleName.psm1") -Force;

Describe 'Src\LabModule' {

    InModuleScope $moduleName {

        Context 'Validates "ResolveLabModule" method' {

            $testNode = 'TestNode';

            It 'Returns "System.Collections.Hashtable" object type' {

                $testParams = @{
                    NodeName = $testNode;
                    ConfigurationData = @{
                        AllNodes = @( @{ NodeName = $testNode; } )
                        NonNodeData = @{
                            Lability = @{
                                Module = @(
                                    @{ Name = 'TestModule1'; }
                                )
                            }
                        }
                    }
                }
                $result = ResolveLabModule @testParams -ModuleType Module -Verbose;

                $result -is [System.Collections.Hashtable] | Should Be $true;
            }

            It 'Returns all PowerShell modules when not defined on the node' {

                $testParams = @{
                    NodeName = $testNode;
                    ConfigurationData = @{
                        AllNodes = @( @{ NodeName = $testNode; } )
                        NonNodeData = @{
                            Lability = @{
                                Module = @(
                                    @{ Name = 'TestModule1'; }
                                    @{ Name = 'TestModule2'; }
                                    @{ Name = 'TestModule3'; }
                                )
                            }
                        }
                    }
                }
                $result = ResolveLabModule @testParams -ModuleType Module -Verbose;

                $result.Count | Should Be $testParams.ConfigurationData.NonNodeData.Lability.Module.Count;
            }

            It 'Returns all DSC resources when not defined on the node' {

                $testParams = @{
                    NodeName = $testNode;
                    ConfigurationData = @{
                        AllNodes = @( @{ NodeName = $testNode; } )
                        NonNodeData = @{
                            Lability = @{
                                DscResource = @(
                                    @{ Name = 'TestDscResource1'; }
                                    @{ Name = 'TestDscResource2'; }
                                )
                            }
                        }
                    }
                }
                $result = ResolveLabModule @testParams -ModuleType DscResource -Verbose;

                $result.Count | Should Be $testParams.ConfigurationData.NonNodeData.Lability.DscResource.Count;
            }

            It 'Returns PowerShell modules only defined on the node' {

                $testParams = @{
                    NodeName = $testNode;
                    ConfigurationData = @{
                        AllNodes = @( @{ NodeName = $testNode; Module = 'TestModule3','TestModule1' } )
                        NonNodeData = @{
                            Lability = @{
                                Module = @(
                                    @{ Name = 'TestModule1'; }
                                    @{ Name = 'TestModule2'; }
                                    @{ Name = 'TestModule3'; }
                                )
                            }
                        }
                    }
                }
                $result = ResolveLabModule @testParams -ModuleType Module -Verbose;

                $result.Count | Should Be $testParams.ConfigurationData.AllNodes[0].Module.Count;
            }

            It 'Returns DSC resource modules only defined on the node' {

                $testParams = @{
                    NodeName = $testNode;
                    ConfigurationData = @{
                        AllNodes = @( @{ NodeName = $testNode; DscResource = 'TestDscResource2' } )
                        NonNodeData = @{
                            Lability = @{
                                DscResource = @(
                                    @{ Name = 'TestDscResource1'; }
                                    @{ Name = 'TestDscResource2'; }
                                )
                            }
                        }
                    }
                }
                $result = ResolveLabModule @testParams -ModuleType DscResource -Verbose;

                $result.Count | Should Be $testParams.ConfigurationData.AllNodes[0].DscResource.Count;
            }

        } #end context Validates "New-ResolveLabModule" method

    } #end InModuleScope

} #end describe Src\LabModule