Tests/Unit/DSCResources/ROWCommon/Src/Resolve-ROWPackagePath.Tests.ps1

## Import the ROACommon module
$moduleRoot = (Resolve-Path "$PSScriptRoot\..\..\..\..\..\DSCResources\ROWCommon\ROWCommon.psd1").Path;
Import-Module $moduleRoot -Force;

Describe 'RESONEWorkspace\ROWCommon\Resolve-ROWPackagePath' {

    It 'Should resolve 2016 (v9.12) Full Agent installer' {
        
        $v912InstallerMsi = 'RES-ONE-Workspace-2016.msi';
        New-Item -Path $TestDrive -Name $v912InstallerMsi -ItemType File -Force -ErrorAction SilentlyContinue;

        $result = Resolve-ROWPackagePath -Path $TestDrive -Component FullAgent -Version 9.12;

        $result.EndsWith($v912InstallerMsi) | Should Be $true;
    }

    It 'Should resolve 2016 SR1 (9.12.1) Full Agent installer' {
        
        $v912InstallerMsi = 'RES-ONE-Workspace-2016.msi';
        New-Item -Path $TestDrive -Name $v912InstallerMsi -ItemType File -Force -ErrorAction SilentlyContinue;
        $v9121InstallerMsi = 'RES-ONE-Workspace-2016-SR1.msi';
        New-Item -Path $TestDrive -Name $v9121InstallerMsi -ItemType File -Force -ErrorAction SilentlyContinue;

        $result = Resolve-ROWPackagePath -Path $TestDrive -Component FullAgent -Version 9.12;

        $result.EndsWith($v9121InstallerMsi) | Should Be $true;
    }

    It 'Should resolve explicit 2016 (v.9.12.0) Full Agent installer' {
        
        $v912InstallerMsi = 'RES-ONE-Workspace-2016.msi';
        New-Item -Path $TestDrive -Name $v912InstallerMsi -ItemType File -Force -ErrorAction SilentlyContinue;
        $v9121InstallerMsi = 'RES-ONE-Workspace-2016-SR1.msi';
        New-Item -Path $TestDrive -Name $v9121InstallerMsi -ItemType File -Force -ErrorAction SilentlyContinue;

        $result = Resolve-ROWPackagePath -Path $TestDrive -Component FullAgent -Version 9.12.0;

        $result.EndsWith($v912InstallerMsi) | Should Be $true;
    }

    It 'Should resolve v10.0.0.0 Full Agent installer' {
        
        $v10InstallerMsi = 'RES-ONE-Workspace-10.0.0.0.msi';
        New-Item -Path $TestDrive -Name $v10InstallerMsi -ItemType File -Force -ErrorAction SilentlyContinue;

        $result = Resolve-ROWPackagePath -Path $TestDrive -Component FullAgent -Version 10.0;

        $result.EndsWith($v10InstallerMsi) | Should Be $true;
    }

    It 'Should resolve later v10.0.100.0 Full Agent installer' {
        
        $v10InstallerMsi = 'RES-ONE-Workspace-10.0.0.0.msi';
        New-Item -Path $TestDrive -Name $v10InstallerMsi -ItemType File -Force -ErrorAction SilentlyContinue;
        $v10100InstallerMsi = 'RES-ONE-Workspace-10.0.100.0.msi';
        New-Item -Path $TestDrive -Name $v10100InstallerMsi -ItemType File -Force -ErrorAction SilentlyContinue;

        $result = Resolve-ROWPackagePath -Path $TestDrive -Component FullAgent -Version 10.0;

        $result.EndsWith($v10100InstallerMsi) | Should Be $true;
    }

    It 'Should resolve v10.0.0.0 Agent Only installer' {
        
        $v10AgentOnlyMsi = 'RES-ONE-Workspace-Agent-10.0.0.0.msi';
        New-Item -Path $TestDrive -Name $v10AgentOnlyMsi -ItemType File -Force -ErrorAction SilentlyContinue;

        $result = Resolve-ROWPackagePath -Path $TestDrive -Component AgentOnly -Version 10.0;

        $result.EndsWith($v10AgentOnlyMsi) | Should Be $true;
    }

    It 'Should resolve v10.0.0.0 Console installer' {
        
        $v10ConsoleMsi = 'RES-ONE-Workspace-Console-10.0.0.0.msi';
        New-Item -Path $TestDrive -Name $v10ConsoleMsi -ItemType File -Force -ErrorAction SilentlyContinue;

        $result = Resolve-ROWPackagePath -Path $TestDrive -Component Console -Version 10.0;

        $result.EndsWith($v10ConsoleMsi) | Should Be $true;
    }

    It 'Should resolve v10.0.0.0 Relay Server installer' {
        
        if ([System.Environment]::Is64BitOperatingSystem) {
            $v10RelayServerMsi = 'RES-ONE-Workspace-Relay-Server(x64)-10.0.0.0.msi';
        }
        else {
            $v10RelayServerMsi = 'RES-ONE-Workspace-Relay-Server(x86)-10.0.0.0.msi';
        }
        New-Item -Path $TestDrive -Name $v10RelayServerMsi -ItemType File -Force -ErrorAction SilentlyContinue;

        $result = Resolve-ROWPackagePath -Path $TestDrive -Component RelayServer -Version 10.0;

        $result.EndsWith($v10RelayServerMsi) | Should Be $true;
    }

    It 'Should resolve v10.0.0.0 Reporting Services installer' {
        
        $v10ReportingServicesMsi = 'RES-ONE-Workspace-Reporting-Services-10.0.0.0.msi';
        New-Item -Path $TestDrive -Name $v10ReportingServicesMsi -ItemType File -Force -ErrorAction SilentlyContinue;

        $result = Resolve-ROWPackagePath -Path $TestDrive -Component ReportingServices -Version 10.0;

        $result.EndsWith($v10ReportingServicesMsi) | Should Be $true;
    }

    It 'Should resolve v10.0.0.0 Management Portal installer' {
        
        $v10InstallerMsi = 'RES ONE Workspace Management Portal 10.0.0.0.msi';
        New-Item -Path $TestDrive -Name $v10InstallerMsi -ItemType File -Force -ErrorAction SilentlyContinue;

        $result = Resolve-ROWPackagePath -Path $TestDrive -Component ManagementPortal -Version 10.0;

        $result.EndsWith($v10InstallerMsi) | Should Be $true;
    }

    It 'Should throw when "ManagementPortal" component is specified on versions prior to v10' {

        { Resolve-ROWPackagePath -Path $TestDrive -Component ManagementPortal -Version 9.12 } | Should Throw 'Version 10 is required';
    }

} #end describe