Public/Get-SpaceRoles.Tests.ps1

Set-StrictMode -Version Latest

BeforeAll {
    . "$PSScriptRoot\Get-SpaceRoles.ps1"
    . "$PSScriptRoot\..\Private\Invoke-GetRequest.ps1"
}

Describe "Get-SpaceRoles" {
    BeforeAll {
        [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')]
        $Space = [PSCustomObject]@{metadata=@{guid="1234"}}
        [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')]
        $RoleName = "role1"
        $SpaceRoles = @()
        Mock Invoke-GetRequest { $SpaceRoles }
    }
    Context "API call" {
        It "is called with the correct URL" {
            Get-SpaceRoles -Space $Space -Role $RoleName
            Should -Invoke Invoke-GetRequest -ParameterFilter {$path -eq "/v2/spaces/$($Space.metadata.guid)/$($RoleName)"}
        }
        It "returns the resources" {
            (Get-SpaceRoles -Space $Space -Role $RoleName) | Should -Be $SpaceRoles
        }
    }
    Context "parameters" {
        It "ensures 'Role' cannot be empty" {
            { Get-SpaceRoles -Space @() -Role "" } | Should -Throw "*Cannot validate argument on parameter 'Role'. The argument is null or empty*"
        }
        It "ensures 'Role' cannot be null" {
            { Get-SpaceRoles -Space @() -Role $null } | Should -Throw "*Cannot validate argument on parameter 'Role'. The argument is null or empty*"
        }
        It "ensures 'Space' cannot be null" {
            { Get-SpaceRoles -Space $null -Role "role1" } | Should -Throw "*Cannot validate argument on parameter 'Space'. The argument is null or empty*"
        }
        It "supports positional" {
            Get-SpaceRoles $Space $RoleName | Should -Be $SpaceRoles
        }
        It "supports 'Space' from pipeline" {
            $Space | Get-SpaceRoles -Role $RoleName | Should -Be $SpaceRoles
        }
    }
}