Public/Add-RolesFromDefinition.Tests.ps1
Set-StrictMode -Version Latest BeforeAll { . "$PSScriptRoot\Add-RolesFromDefinition.ps1" . "$PSScriptRoot\Get-SpaceRoles.ps1" . "$PSScriptRoot\Find-SpaceRoleByUsername.ps1" . "$PSScriptRoot\Set-SpaceRole.ps1" } Describe "Add-RolesFromDefinition" { BeforeAll { [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')] $TargetSpace = [PSCustomObject]@{} $role1 = [PSCustomObject]@{entity=[PSCustomObject]@{username = "user1"}} $role2 = [PSCustomObject]@{entity=[PSCustomObject]@{username = "user2"}} [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')] $TargetRoles = [PSCustomObject]@{resources = @($role1;$role2)} [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')] $TargetUserNames = @("user1") Mock Get-SpaceRoles { $TargetRoles } Mock Set-SpaceRole } Context "space role does not exist" { It "sets space role" { Mock Find-SpaceRoleByUsername { $null } Mock Set-SpaceRole Add-RolesFromDefinition -Space $TargetSpace -UserNames $TargetUserNames -RoleName "role1" Should -Invoke Set-SpaceRole -ParameterFilter { $Space -eq $TargetSpace -and ` $Username -eq "user1" -and ` $Role -eq "role1" } } } Context "space role exists" { It "does not set space role" { Mock Find-SpaceRoleByUsername { $role1 } Add-RolesFromDefinition -Space $TargetSpace -UserNames $TargetUserNames -RoleName "role1" Should -Invoke Set-SpaceRole -Times 0 -Exactly } } Context "parameters" { It "ensures 'Space' is not null" { { Add-RolesFromDefinition -Space $null -UserNames $TargetUserNames -RoleName "role1" } | Should -Throw "*Cannot validate argument on parameter 'Space'. The argument is null or empty*" } It "ensures 'UserNames' is not empty" { { Add-RolesFromDefinition -Space $TargetSpace -UserNames @() -RoleName "role1" } | Should -Throw "*Cannot validate argument on parameter 'UserNames'. The argument is null, empty, or an element of the argument collection contains a null value*" } It "ensures 'RoleName' is not empty" { { Add-RolesFromDefinition -Space $TargetSpace -UserNames $TargetUserNames -RoleName "" } | Should -Throw "*Cannot validate argument on parameter 'RoleName'. The argument is null or empty*" } It "ensures 'RoleName' is not null" { { Add-RolesFromDefinition -Space $TargetSpace -UserNames $TargetUserNames -RoleName $null } | Should -Throw "*Cannot validate argument on parameter 'RoleName'. The argument is null or empty*" } It "supports 'Space' from pipeline" { Mock Find-SpaceRoleByUsername { $role1 } $TargetUserNames = @("user1") $TargetSpace | Add-RolesFromDefinition -UserNames $TargetUserNames -RoleName "role1" } It "supports positional" { Mock Find-SpaceRoleByUsername { $role1 } $TargetUserNames = @("user1") Add-RolesFromDefinition $TargetSpace $TargetUserNames "role1" } } } |