Public/User/Add-User.Tests.ps1

Set-StrictMode -Version Latest

BeforeAll {
    . "$PSScriptRoot\Add-User.ps1"
    . "$PSScriptRoot\..\Utility\Invoke-ApiRequest.ps1"
}

Describe "Add-User" {
    BeforeAll {
        $response = [PSCustomObject]@{}
        $orgId = "1"
        $org = ([PSCustomObject]@{id = $orgId})
        $loginId = "userOne"
        $familyName = "User"
        $givenName = "One"
        $email = "user@mailinator.com"

        [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')]
        $MatchBody = @{
            "resourceType"= "Person";
            "loginId"= $loginId;
            "managingOrganization"= $org.id;
            "name" = @{
                "family"= $familyName;
                "given"= $givenName;
            };
            "telecom" = @(
                @{
                    "system"="email";
                    "value"=$email;
                }
            );
            "isAgeValidated"= $true;
        }
        [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')]
        $rootPath = "/authorize/identity/User"
        Mock Invoke-ApiRequest { $response }
    }

    Context "api" {
        It "invoke request" {
            $result = Add-User -Org $org -LoginId $loginId -Email $email -GivenName $givenName -FamilyName $familyName
            Should -Invoke Invoke-ApiRequest -ParameterFilter {
                $Path -eq $rootpath -and `
                $AddHsdpApiSignature -and `
                (Compare-Object $ValidStatusCodes @(201)) -eq $null -and
                $ProcessHeader -and `
                ($Body,$MatchBody | Test-Equality)
            }
            $result | Should -Be $response
        }
        It "extracts id from location header" {
            Add-User -Org $org -LoginId $loginId -Email $email -GivenName $givenName -FamilyName $familyName
            Should -Invoke Invoke-ApiRequest -ParameterFilter {
                if (-not $ProcessHeader) { $false } else {
                    $headers = @(@{"location"=@("/authorize/identity/User/1")})
                    $newBody = Invoke-Command -ScriptBlock $ProcessHeader -ArgumentList $headers
                    $newBody.id -eq "1"
                }
            }
        }
    }
    Context "param" {
        It "supports value from pipeline " {
            $result = $org | Add-User -LoginId $loginId -Email $email -GivenName $givenName -FamilyName $familyName
            Should -Invoke Invoke-ApiRequest #-ParameterFilter { ($MatchBody, $Body | Test-Equality) }
            $result | Should -Be $response
        }
        It "supports by position" {
            $result = Add-User $org $loginId $email $givenName $familyName
            Should -Invoke Invoke-ApiRequest #-ParameterFilter { ($MatchBody, $Body | Test-Equality) }
            $result | Should -Be $response
        }
        It "ensures -Org not null" {
            { Add-User -Org $null -LoginId $loginId -Email $email -GivenName $givenName -FamilyName $familyName } `
                | Should -Throw "*'Org'. The argument is null. Provide a valid value for the argument, and then try running the command again."
        }
        It "ensures -LoginId not null" {
            { Add-User -Org $org -LoginId $null -Email $email -GivenName $givenName -FamilyName $familyName } `
                | Should -Throw "*'LoginId'. The argument is null or empty*"
        }
        It "ensures -LoginId not empty" {
            { Add-User -Org $org -LoginId "" -Email $email -GivenName $givenName -FamilyName $familyName } `
                | Should -Throw "*'LoginId'. The argument is null or empty*"
        }
        It "ensures -Email not null" {
            { Add-User -Org $org -LoginId $loginId -Email $null -GivenName $givenName -FamilyName $familyName } `
                | Should -Throw "*'Email'. The argument is null or empty*"
        }
        It "ensures -Email not empty" {
            { Add-User -Org $org -LoginId $loginId -Email "" -GivenName $givenName -FamilyName $familyName } `
                | Should -Throw "*'Email'. The argument is null or empty*"
        }
        It "ensures -GivenName not null" {
            { Add-User -Org $org -LoginId $loginId -Email $email -GivenName $null -FamilyName $familyName } `
                | Should -Throw "*'GivenName'. The argument is null or empty*"
        }
        It "ensures -GivenName not empty" {
            { Add-User -Org $org -LoginId $loginId -Email email -GivenName "" -FamilyName $familyName } `
                | Should -Throw "*'GivenName'. The argument is null or empty*"
        }
        It "ensure -FamilyName not null" {
            { Add-User -Org $org -LoginId $loginId -Email $email -GivenName $givenName -FamilyName $null } `
                | Should -Throw "*'FamilyName'. The argument is null or empty*"
        }
        It "ensure -FamilyName not empty" {
            { Add-User -Org $org -LoginId $loginId -Email email -GivenName $givenName -FamilyName "" } `
                | Should -Throw "*'FamilyName'. The argument is null or empty*"
        }
    }
}