Tests/Private/GetSingleUrl.Tests.ps1

$PSScriptRoot = "$PSScriptRoot/../../";
. "$PSScriptRoot/Private/GetSingleUrl";

Describe "GetSingleUrl" {
    Mock -CommandName Write-Host -Verifiable -MockWith { };
    Mock -CommandName Write-Output -Verifiable -MockWith { };

    It "GetUrl Returns OK" {

        # Assing
        $instanceGuid ="59d1c5f2-73cd-4eec-98d7-3c595f7e0df6";
        $defaultHostName = "someHostName.tld";
        $url = "https://someHostName.tld/somePage/";
        Mock -CommandName GetHttpRequestWithCookie -Verifiable -MockWith {

            return @{ # [Microsoft.PowerShell.Commands.BasicHtmlWebResponseObject]
                StatusCode = "200";
                StatusDescription = "OK";
            };
        };

        # Act
        $result = GetSingleUrl -defaultHostName $defaultHostName -url $url -instanceGuid $instanceGuid `
            -requestTimeOut (New-TimeSpan -Seconds 10);

        # Assert
        $result.StatusCode | Should Be "200";

    }

    It "GetUrl NoInstanceGuid Returns OK" {

        # Assing
        $defaultHostName = "someHostName.tld";
        $url = "https://someHostName.tld/somePage/";
        Mock -CommandName GetHttpRequestWithCookie -Verifiable -MockWith {

            return @{ # [Microsoft.PowerShell.Commands.BasicHtmlWebResponseObject]
                StatusCode = "200";
                StatusDescription = "OK";
            };
        };

        # Act
        $result = GetSingleUrl -defaultHostName $defaultHostName -url $url `
            -requestTimeOut (New-TimeSpan -Seconds 10);

        # Assert
        $result.StatusCode | Should Be "200";

    }

    It "GetUrl NoInstanceGuid NoParameter Fails" {

        # Assing
        $defaultHostName = "someHostName.tld";
        $url = "https://someHostName.tld/somePage/";

        # Act
        $noUrl = { 
            GetSingleUrl -defaultHostName $defaultHostName -url $null `
                -requestTimeOut (New-TimeSpan -Seconds 10);
        };
        $noDefaultHostName = { 
            GetSingleUrl -defaultHostName $null -url $url `
                -requestTimeOut (New-TimeSpan -Seconds 10);
        };
        $none = { 
            GetSingleUrl -defaultHostName $null -url $null `
                -requestTimeOut (New-TimeSpan -Seconds 10);
        };

        # Assert
        $noUrl | Should Throw "Cannot bind argument to parameter 'url' because it is an empty string.";
        $noDefaultHostName | Should Throw "Cannot bind argument to parameter 'defaultHostName' because it is an empty string.";
        $none | Should Throw "Cannot bind argument to parameter 'defaultHostName' because it is an empty string.";

    }

}