test/JumpCloud.1.0.0.Tests.ps1
#Tests for JumpCloud Module Version 1.0.0 # To run all the Pester Tests you will need to have a tenant that matches the below criteria. # For Command Results Tests - Have at least 5 command results present in your Org (These results will be deleted) # For Commands Tests - Have at least 2 JumpCloud commands that are set to run via the 'Run on Trigger' event # For Groups Tests - Have at least 2 JumpCloud User Groups and 2 JumpCloud System Groups # For Systems Tests - Have at least 2 JumpCloud Systems present in your Org. # For Users Tests - Have at least 2 JumpCloud Users present in your Org. #Additionally you must populate the below variables to run successful tests using the -ByID parameter $SystemID = '' # Enter the System ID for a system in your test tenant. **Note users will be added and removed from this system during the tests $Username = 'pester.tester' # Create a user with username 'pester.tester' $UserID = '' # Paste the UserID for the user with username pester.tester $UserGroupName = 'PesterTest_UserGroup' #Create a user group named PesterTest_UserGroup within your environment $UserGroupID = '' # Paste the corresponding GroupID for the user group named PesterTest_UserGroup $SystemGroupName = 'PesterTest_SystemGroup' # Create a sytem group named PesterTest_SystemGroup within your environment $SystemGroupID = '' # Paste the corresponding GroupID for the sytem group named PesterTest_SystemGroup $NewJCSystemGroup = 'NewSystemGroup' #Do not modify this $NewJCUserGroup = 'NewUserGroup' #Do not modify this #Test Functions Function New-RandomUser () { [CmdletBinding(DefaultParameterSetName='NoAttributes')] param ( [Parameter(Mandatory,Position=0)] [String] $Domain, [Parameter(ParameterSetName='Attributes')] ##Test this to see if this can be modified. [switch] $Attributes ) if (($PSCmdlet.ParameterSetName -eq 'NoAttributes')) { $username = -join ((65..90) + (97..122) | Get-Random -Count 8 | ForEach-Object {[char]$_}) $email = $username + "@$Domain.com" $RandomUser = [ordered]@{ FirstName = 'Pester' LastName = 'Test' Username = $username Email = $email Password = 'Temp123!' } $NewRandomUser = New-Object psobject -Property $RandomUser } if (($PSCmdlet.ParameterSetName -eq 'Attributes')) { $username = -join ((65..90) + (97..122) | Get-Random -Count 8 | ForEach-Object {[char]$_}) $email = $username + "@$Domain.com" $RandomUser = [ordered]@{ FirstName = 'Pester' LastName = 'Test' Username = $username Email = $email Password = 'Temp123!' NumberOfCustomAttributes = 3 Attribute1_name = 'Department' Attribute1_value = 'Sales' Attribute2_name = 'Office' Attribute2_value = '456789' Attribute3_name = 'Lang' Attribute3_value = 'French' } $NewRandomUser = New-Object psobject -Property $RandomUser } return $NewRandomUser } Function New-RandomString () { [CmdletBinding()] param( [Parameter(Mandatory)] ##Test this to see if this can be modified. [ValidateRange(0,52)] [Int] $NumberOfChars ) begin {} process{ $Random = -join ((65..90) + (97..122) | Get-Random -Count $NumberOfChars | % {[char]$_}) } end{Return $Random} } $Random = New-RandomString '8' $RandomEmail = "$Random@$Random.com" $ModuleManifestName = 'JumpCloud.psd1' $ModuleManifestPath = "$PSScriptRoot\..\$ModuleManifestName" Describe 'Module Manifest Tests' { It 'Passes Test-ModuleManifest' { Test-ModuleManifest -Path $ModuleManifestPath | Should Not BeNullOrEmpty $? | Should Be $true } } #region CommandResult Pester tests #region CommandResults test data validation $CommandResults = Get-JCCommandResult #Ensure there are command results to test if ($CommandResults._id.Count -lt 5) #If there are not at least five command results then use the Invoke-JCCommand to populate four command results { Write-Error 'You must have at least 5 Command Results to run the Pester tests' } Write-Host "There are $($CommandResults._id.Count) command results" #endregion CommandResults test data validation Describe 'Get-JCCommandResults'{ It "Gets all JumpCloud command results"{ $CommandResults = Get-JCCommandResult $CommandResults.count | Should -BeGreaterThan 1 return $CommandResults.count } It "Gets a single JumpCloud command result using -ByID" { $SingleCommand = Get-JCCommandResult | Select-Object -Last 1 $SingleCommandResult = Get-JCCommandResult -ByID $SingleCommand._id $SingleCommandResult._id | Should -Not -BeNullOrEmpty } It "Gets a single JumpCloud command result without declaring -ByID" { $SingleCommand = Get-JCCommandResult | Select-Object -Last 1 $SingleCommandResult = Get-JCCommandResult $SingleCommand._id $SingleCommandResult._id | Should -Not -BeNullOrEmpty } It "Gets a single JumpCloud command result declaring CommandResultID" { $SingleCommand = Get-JCCommandResult | Select-Object -Last 1 $SingleCommandResult = Get-JCCommandResult -CommandResultID $SingleCommand._id $SingleCommandResult._id | Should -Not -BeNullOrEmpty } It "Gets a single JumpCloud command result using -ByID passed through the pipeline" { $SingleCommandResult = Get-JCCommandResult | Select-Object -Last 1 | Get-JCCommandResult -ByID $SingleCommandResult._id | Should -Not -BeNullOrEmpty } It "Gets a single JumpCloud command result passed through the pipeline without declaring -ByID" { $SingleCommandResult = Get-JCCommandResult | Select-Object -Last 1 | Get-JCCommandResult $SingleCommandResult._id | Should -Not -BeNullOrEmpty } It "Gets all JumpCloud commandresults using -ByID passed through the pipeline" { $CommandResults = Get-JCCommandResult | Get-JCCommandResult -ByID $CommandResults._id.count | Should -BeGreaterThan 1 } It "Gets all JumpCloud commandresults passed through the pipeline with out declaring -ByID" { $CommandResults = Get-JCCommandResult | Get-JCCommandResult $CommandResults._id.count | Should -BeGreaterThan 1 } } Describe 'Remove-JCCommandResult'{ It "Ensures the warning message is displayed by default, Deletes a single JumpCloud command result declaring -CommandResultIT" { $SingleCommandResult = Get-JCCommandResult | Select-Object -Last 1 $DeletedResult = Remove-JCCommandResult -CommandResultID $SingleCommandResult._id $DeletedResult._id.count | Should -Be 1 } It "Removes a JumpCloud command result using -CommandResultID with the force paramter"{ $SingleCommandResult = Get-JCCommandResult | Select-Object -Last 1 $DeletedResult = Remove-JCCommandResult -CommandResultID $SingleCommandResult._id -force $DeletedResult._id.count | Should -Be 1 } It "Removes a JumpCloud command result passed through the pipeline with the force parameter without declaring -CommandResultID"{ $DeletedResult = Get-JCCommandResult | Select-Object -Last 1 | Remove-JCCommandResult -force $DeletedResult._id.count | Should -Be 1 } It "Removes two JumpCloud command results passed through the pipeline with force parameter without declaring -CommandResultID"{ $DeletedResult = Get-JCCommandResult | Select-Object -Last 2 | Remove-JCCommandResult -force $DeletedResult._id.count | Should -Be 2 } } #endregion CommandResult Pester tests #region Commands Pester test #region Commands test data validation $Commands = Get-JCCommand if ($($Commands._id.Count) -le 1) {Write-Error 'You must have at least 2 JumpCloud commands to run the Pester tests';break} Write-Host "There are $($Commands.Count) commands" $Triggers = $Commands | Where-Object trigger -ne '' | Measure-Object if ($Triggers.Count -lt 2 ) {Write-Error 'You must have at least 2 JumpCloud commands with command triggers to run the Pester tests' break} #endregion Commands test data validation Describe 'Get-JCCommand'{ It "Gets all JumpCloud commands"{ $AllCommands = Get-JCCommand $AllCommands._id.Count | Should -BeGreaterThan 1 } It "Gets a single JumpCloud command declaring -CommandID"{ $SingleCommand = Get-JCCommand | Select-Object -Last 1 $SingleResult = Get-JCCommand -CommandID $SingleCommand._id $SingleResult._id.Count | Should Be 1 } It "Gets a single JumpCloud command without declaring -CommandID"{ $SingleCommand = Get-JCCommand | Select-Object -Last 1 $SingleResult = Get-JCCommand $SingleCommand._id $SingleResult._id.Count | Should Be 1 } It "Gets a single JumpCloud command using -ByID passed through the pipeline"{ $SingleResult = Get-JCCommand | Select-Object -Last 1 | Get-JCCommand -ByID $SingleResult._id.Count | Should Be 1 } It "Gets a single JumpCloud command passed through the pipeline without declaring -ByID"{ $SingleResult = Get-JCCommand | Select-Object -Last 1 | Get-JCCommand $SingleResult._id.Count | Should Be 1 } It "Gets all JumpCloud command passed through the pipeline declaring -ByID"{ $MultiResult = Get-JCCommand | Get-JCCommand -ByID $MultiResult._id.Count | Should -BeGreaterThan 1 } It "Gets all JumpCloud command triggers"{ $Triggers = Get-JCCommand | Where-Object trigger -ne '' $Triggers._id.Count | Should -BeGreaterThan 1 } } Describe 'Invoke-JCCommand'{ It "Invokes a single JumpCloud command declaring the -trigger"{ $SingleTrigger = Get-JCCommand | Where-Object trigger -NotLike '' | Select-Object -Last 1 | Select-Object trigger $SingleResult = Invoke-JCCommand -trigger $SingleTrigger.trigger $SingleResult.triggered.Count | Should Be 1 } It "Invokes a single JumpCloud command passed through the pipeline from Get-JCCommand without declaring -trigger"{ $SingleResult = Get-JCCommand | Where-Object trigger -NotLike '' | Select-Object -Last 1 | Invoke-JCCommand $SingleResult.triggered.Count | Should Be 1 } It "Invokes two JumpCloud command passed through the pipeline from Get-JCCommand without declaring -trigger"{ $MultiResult = Get-JCCommand | Where-Object trigger -NotLike '' | Select-Object -Last 2 | Invoke-JCCommand $MultiResult.triggered.Count | Should Be 2 } } #endregion Commands Pester test #region Groups pester test #region Groups test data validation $SystemGroups = Get-JCGroup -Type System $UserGroups = Get-JCGroup -Type User if ($UserGroups._id.Count -lt 2) { Write-Error 'You must have at least 2 JumpCloud User Groups to run the Pester tests';break } if ($SystemGroups._id.Count -lt 2) { Write-Error 'You must have at least 2 JumpCloud System Groups to run the Pester tests';break } Write-Host "There are $($UserGroups._id.Count) User Groups and " -NoNewline Write-Host "there are $($SystemGroups._id.Count) System Groups" Get-JCGroup -Type System | Get-JCSystemGroupMember | Remove-JCSystemGroupMember | Out-Null #Remove all system group members #endregion Groups test data validation Describe 'Add-JCSystemGroupMember and Remove-JCSystemGroupmember'{ It "Adds a JumpCloud system to a JumpCloud system group by System Groupname and SystemID"{ $SingleSystemGroupAdd = Add-JCSystemGroupMember -SystemID $SystemID -GroupName $SystemGroupName $SingleSystemGroupAdd.Status | Should Be 'Added' } It "Removes a JumpCloud system from a JumpCloud system group by System Groupname and SystemID"{ $SingleSystemGroupRemove = Remove-JCSystemGroupMember -SystemID $SystemID -GroupName $SystemGroupName $SingleSystemGroupRemove.Status | Should Be 'Removed' } It "Adds a JumpCloud system to a JumpCloud system group by System GroupID and SystemID"{ $SingleSystemGroupAdd = Add-JCSystemGroupMember -SystemID $SystemID -GroupID $SystemGroupID $SingleSystemGroupAdd.Status | Should Be 'Added' } It "Removes a JumpCloud system from a JumpCloud system group by System GroupID and SystemID"{ $SingleSystemGroupRemove = Remove-JCSystemGroupMember -SystemID $SystemID -GroupID $SystemGroupID $SingleSystemGroupRemove.Status | Should Be 'Removed' } It "Adds two JumpCloud systems to a JumpCloud system group using the pipeline"{ $MultiSystemGroupAdd = Get-JCSystem | Select-Object -Last 2 | Add-JCSystemGroupMember -GroupName $SystemGroupName $MultiSystemGroupAdd.Status | Select-Object -Unique | Should Be 'Added' } It "Removes two JumpCloud systems from a JumpCloud system group using the pipeline" { $MultiSystemGroupRemove = Get-JCSystem | Select-Object -Last 2 | Remove-JCSystemGroupMember -GroupName $SystemGroupName $MultiSystemGroupRemove.Status | Select-Object -Unique | Should Be 'Removed' } It "Adds two JumpCloud systems to a JumpCloud system group using the pipeline using -ByID"{ $MultiSystemGroupAdd = Get-JCSystem | Select-Object -Last 2 | Add-JCSystemGroupMember -GroupName $SystemGroupName -ByID $MultiSystemGroupAdd.Status | Select-Object -Unique | Should Be 'Added' } It "Removes two JumpCloud systems from a JumpCloud system group using the pipeline using -ByID" { $MultiSystemGroupRemove = Get-JCSystem | Select-Object -Last 2 | Remove-JCSystemGroupMember -GroupName $SystemGroupName -ByID $MultiSystemGroupRemove.Status | Select-Object -Unique | Should Be 'Removed' } } Describe 'Add-JCUserGroupMember and Remove-JCUserGroupMember'{ It "Adds a JumpCloud user to a JumpCloud user group by User GroupName and Username"{ $SingleUserGroupAdd = Add-JCUserGroupMember -GroupName $UserGroupName -username $Username $SingleUserGroupAdd = $SingleUserGroupAdd.Status | Should Be 'Added' } It "Removes JumpCloud user from a JumpCloud user group by User GroupName and Username"{ $SingleUserGroupRemove = Remove-JCUserGroupMember -GroupName $UserGroupName -username $Username $SingleUserGroupRemove.Status | Should Be 'Removed' } It "Adds a JumpCloud user to a JumpCloud user group by UserID and Group ID"{ $SingleUserGroupAdd = Add-JCUserGroupMember -GroupID $UserGroupID -UserID $UserID $SingleUserGroupAdd.Status | Should Be 'Added' } It "Removes a JumpCloud system from a JumpCloud system group by System GroupID and SystemID"{ $SingleUserGroupRemove = Remove-JCUserGroupMember -GroupID $UserGroupID -UserID $UserID $SingleUserGroupRemove.Status | Should Be 'Removed' } It "Adds two JumpCLoud users to a JumpCloud user group using the pipeline"{ $MultiUserGroupRemove = Get-JCUser | Select-Object -Last 2 | Remove-JCUserGroupMember -GroupName $UserGroupName $MultiUserGroupAdd = Get-JCUser | Select-Object -Last 2 | Add-JCUserGroupMember -GroupName $UserGroupName $MultiUserGroupAdd.Status | Select-Object -Unique | Should Be 'Added' } It "Removes two JumpCLoud users from a JumpCloud user group using the pipeline"{ $MultiUserGroupAdd = Get-JCUser | Select-Object -Last 2 | Remove-JCUserGroupMember -GroupName $UserGroupName $MultiUserGroupAdd.Status | Select-Object -Unique | Should Be 'Removed' } It "Adds two JumpCLoud users to a JumpCloud user group using the pipeline using -ByID"{ $MultiUserGroupAdd = Get-JCUser | Select-Object -Last 2 | Add-JCUserGroupMember -GroupName $UserGroupName -ByID $MultiUserGroupAdd.Status | Select-Object -Unique | Should Be 'Added' } It "Removes two JumpCLoud users from a JumpCloud user group using the pipeline using -ByID"{ $MultiUserGroupAdd = Get-JCUser | Select-Object -Last 2 | Remove-JCUserGroupMember -GroupName $UserGroupName -ByID $MultiUserGroupAdd.Status | Select-Object -Unique | Should Be 'Removed' } It "Adds back two JumpCLoud users to a JumpCloud user group using the pipeline using -ByID"{ $MultiUserGroupAdd = Get-JCUser | Select-Object -Last 2 | Add-JCUserGroupMember -GroupName $UserGroupName -ByID $MultiUserGroupAdd.Status | Select-Object -Unique | Should Be 'Added' } } Describe 'Get-JCGroup'{ IT 'Gets all groups: System and User'{ $Groups = Get-JCGroup $TwoGroups = $Groups.type | Select-Object -Unique | Measure-Object $TwoGroups.Count | Should -Be 2 } IT 'Gets all JumpCloud User Groups'{ $UserGroups = Get-JCGroup -Type User $OneGroup = $UserGroups.type | Select-Object -Unique | Measure-Object $OneGroup.Count | Should -Be 1 } IT 'Gets all JumpCloud System Groups'{ $SystemGroups = Get-JCGroup -Type System $OneGroup = $SystemGroups.type | Select-Object -Unique | Measure-Object $OneGroup.Count | Should -Be 1 } } Describe 'Get-JCSystemGroupMember'{ It "Adds two JumpCloud systems to a JumpCloud system group using the pipeline"{ $MultiSystemGroupAdd = Get-JCSystem | Select-Object -Last 2 | Add-JCSystemGroupMember -GroupName $SystemGroupName $MultiSystemGroupAdd.Status | Select-Object -Unique | Should Be 'Added' } IT 'Gets a System Groups membership by Groupname'{ $SystemGroupMembers = Get-JCSystemGroupMember -GroupName $SystemGroupName $SystemGroupMembers.SystemID.Count | Should -BeGreaterThan 0 } IT 'Gets a System Groups membership -ByID'{ $SystemGroupMembers = Get-JCSystemGroupMember -ByID $SystemGroupID $SystemGroupMembers.SystemID.Count | Should -BeGreaterThan 0 } It 'Gets all System Group members using Get-JCGroup -type system and the pipeline'{ $AllSystemGroupmembers = Get-JCGroup -Type System | Get-JCSystemGroupMember $AllSystemGroupmembers.GroupName.Count | Should -BeGreaterThan 1 } } Describe 'Get-JCUserGroupMember'{ IT 'Gets a User Groups membership by Groupname'{ $UserGroupMembers = Get-JCUserGroupMember -GroupName $UserGroupName $UserGroupMembers.id.Count | Should -BeGreaterThan 0 } IT 'Gets a User Groups membership -ByID'{ $UserGroupMembers = Get-JCUserGroupMember -ByID $UserGroupID $UserGroupMembers.to.id.Count | Should -BeGreaterThan 0 } It 'Gets all User Group members using Get-JCGroup -type User and the pipeline'{ $AllUserGroupmembers = Get-JCGroup -Type User | Get-JCUserGroupMember $AllUserGroupmembers.GroupName.Count | Should -BeGreaterThan 1 } } Describe 'New-JCSystemGroup and Remove-JCSystemGroup'{ It "Creates a new system group"{ $NewG = New-JCSystemGroup -GroupName $NewJCSystemGroup $NewG.Result | Should -Be 'Created' } It "Removes a system group with warning"{ $DeletedG = Remove-JCSystemGroup -GroupName $NewJCSystemGroup $DeletedG.Result | Should -Be 'Deleted' } It "Creates a new system group"{ $NewG = New-JCSystemGroup -GroupName $NewJCSystemGroup $NewG.Result | Should -Be 'Created' } It "Removes a system group with -force paramter"{ $DeletedG = Remove-JCSystemGroup -GroupName $NewJCSystemGroup -force $DeletedG.Result | Should -Be 'Deleted' } } Describe 'New-JCUserGroup and Remove-JCUserGroup'{ It "Creates a new User group"{ $NewG = New-JCUserGroup -GroupName $NewJCUserGroup $NewG.Result | Should -Be 'Created' } It "Removes a User group with warning"{ $DeletedG = Remove-JCUserGroup -GroupName $NewJCUserGroup $DeletedG.Result | Should -Be 'Deleted' } It "Creates a new User group"{ $NewG = New-JCUserGroup -GroupName $NewJCUserGroup $NewG.Result | Should -Be 'Created' } It "Removes a User group with -force paramter"{ $DeletedG = Remove-JCUserGroup -GroupName $NewJCUserGroup -force $DeletedG.Result | Should -Be 'Deleted' } } #endregion Groups pester test #region Systems Pester test #region Systems data validation $Systems = Get-JCSystem if ($($Systems._id.Count) -le 1) {Write-Error 'You must have at least 2 JumpCloud systems to run the Pester tests';break} #endregion Systems data validation Describe 'Add-JCSystemUser and Remove-JCSystemUser'{ IT "Adds a single user to a single system by Username and SystemID"{ $UserRemove = Remove-JCSystemUser -Username $Username -SystemID $SystemID $UserAdd = Add-JCSystemUser -Username $Username -SystemID $SystemID $UserAdd.Status | Should Be 'Added' } IT "Removes a single user froma single system by Username and SystemID with default warning"{ $UserRemove = Remove-JCSystemUser -Username $Username -SystemID $SystemID $UserRemove.Status | Should Be 'Removed' } IT "Adds a single user to a single system by UserID and SystemID"{ $UserAdd = Add-JCSystemUser -UserID $UserID -SystemID $SystemID $UserAdd.Status | Should Be 'Added' } IT "Removes a single user froma single system with -force parameter"{ $UserRemove = Remove-JCSystemUser -Username $Username -SystemID $SystemID -force $UserRemove.Status | Should Be 'Removed' } IT "Adds two users to a single system using the pipeline and system ID"{ $MultiUserAdd = Get-JCUser | Select-Object -Last 2 | Add-JCSystemUser -SystemID $SystemID $MultiUserAdd.Status.Count | Should Be 2 } IT "Removes two users from a single system using the pipeline and system ID using the -force paramter"{ $MultiUserRemove = Get-JCUser | Select-Object -Last 2 | Remove-JCSystemUser -SystemID $SystemID -force $MultiUserRemove.Status.Count | Should Be 2 } IT "Adds back two users to a single system using the pipeline and system ID"{ $MultiUserAdd = Get-JCUser | Select-Object -Last 2 | Add-JCSystemUser -SystemID $SystemID $MultiUserAdd.Status.Count | Should Be 2 } } Describe 'Get-JCSystem'{ It "Gets all JumpCloud systems"{ $Systems = Get-JCSystem $Systems._id.Count | Should -BeGreaterThan 1 } It "Gets a single JumpCloud system"{ $SingleSystem = Get-JCSystem -ByID $SystemID $SingleSystem.id.Count | Should -be 1 } It "Gets all JumpCloud systems -ByID using the pipeline"{ $AllSystems = Get-JCSystem | Get-JCSystem -ByID $AllSystems.id.Count | Should -BeGreaterThan 1 } } Describe 'Get-JCSystemUser'{ IT "Gets JumpCloud system users for a system using SystemID"{ $SystemUsers = Get-JCSystemUser -SystemID $SystemID $SystemUsers.username.Count | Should -BeGreaterThan 1 } IT "Gets all JumpCloud system user associations using Get-JCsystem and the pipeline"{ $AllSystemUsers = Get-JCSystem | Get-JCSystemUser $Systems = $AllSystemUsers.SystemID | Select-Object -Unique | Measure-Object $Systems.Count| Should -BeGreaterThan 1 } } Describe 'Remove-JCSystem'{ It "Removes a JumpCloud system with the default warning (Halted with H)"{ {Remove-JCSystem -SystemID $SystemID} | Should -Throw } } Describe 'Set-JCSystem'{ It "Updates the DisplyName and then set it back"{ $CurrentDisplayName = Get-JCSystem -SystemID $SystemID | Select-Object DisplayName $UpdatedSystem = Set-JCSystem -SystemID $SystemID -displayName 'NewName' $UpdatedSystem.displayName | Should -be 'NewName' Set-JCSystem -SystemID $SystemID -displayName $CurrentDisplayName.displayName | Out-Null } It "Updates a system SshPasswordAuthentication -eq True"{ $Update = Set-JCSystem -SystemID $SystemID -allowSshPasswordAuthentication $true $Update.allowSshPasswordAuthentication | Should -Be True } It "Updates a system SshPasswordAuthentication -eq False"{ $Update = Set-JCSystem -SystemID $SystemID -allowSshPasswordAuthentication $false $Update.allowSshPasswordAuthentication | Should -Be False } It "Updates a system allowSshRootLogin -eq True"{ $Update = Set-JCSystem -SystemID $SystemID -allowSshRootLogin $true $Update.allowSshRootLogin | Should -Be True } It "Updates a system allowSshRootLogin -eq False"{ $Update = Set-JCSystem -SystemID $SystemID -allowSshRootLogin $false $Update.allowSshRootLogin | Should -Be False } It "Updates a system allowMultiFactorAuthentication -eq True"{ $Update = Set-JCSystem -SystemID $SystemID -allowMultiFactorAuthentication $true $Update.allowMultiFactorAuthentication | Should -Be True } It "Updates a system allowMultiFactorAuthentication -eq False"{ $Update = Set-JCSystem -SystemID $SystemID -allowMultiFactorAuthentication $false $Update.allowMultiFactorAuthentication | Should -Be False } It "Updates a system allowPublicKeyAuthentication -eq True"{ $Update = Set-JCSystem -SystemID $SystemID -allowPublicKeyAuthentication $true $Update.allowPublicKeyAuthentication | Should -Be True } It "Updates a system allowPublicKeyAuthentication -eq False"{ $Update = Set-JCSystem -SystemID $SystemID -allowPublicKeyAuthentication $false $Update.allowPublicKeyAuthentication | Should -Be False } } #Purposefully left off Remove-JCSystem -force (I don't have enough systems to test with) #endregion Systems Pester test #region Users Pester test #region Users data validation $Users = Get-JCUser if ($($Users._id.Count) -le 1) {Write-Error 'You must have at least 2 JumpCloud users to run the Pester tests';break} #endregion Users data validation Describe 'Get-JCUser'{ IT "Gets all JumpCloud users using Get-JCuser"{$Users = Get-JCUser $Users._id.count | Should -BeGreaterThan 1} IT 'Get a single JumpCloud user by Username'{ $User = Get-JCUser -Username $Username $User._id.count | Should -Be 1 } IT 'Get a single JumpCloud user by UserID'{ $User = Get-JCUser -UserID $UserID $User._id.count | Should -Be 1 } IT 'Get multiple JumpCloud users via the pipeline using User ID'{ $Users = Get-JCUser | Select-Object -Last 2 | % {Get-JCUser -UserID $_._id} $Users._id.count | Should -Be 2 } } Describe 'New-JCUser and Remove-JCuser'{ It "Creates a new user"{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser $NewUser._id.count | Should -Be 1 Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new user and then deletes them"{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser $DeleteUser = Remove-JCUser -UserID $NewUser._id -ByID -Force $DeleteUser.results | Should -be 'Deleted' } It "Creates a new User allow_public_key -eq True "{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -allow_public_key $true $NewUser.allow_public_key | Should -Be True Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User allow_public_key -eq False "{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -allow_public_key $false $NewUser.allow_public_key | Should -Be False Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User sudo -eq True "{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -sudo $true $NewUser.sudo | Should -Be True Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User sudo -eq False "{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -sudo $false $NewUser.sudo | Should -Be False Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User enable_managed_uid -eq True "{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -enable_managed_uid $true $NewUser.enable_managed_uid | Should -Be True Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User enable_managed_uid -eq False "{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -enable_managed_uid $false $NewUser.enable_managed_uid | Should -Be False Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User passwordless_sudo -eq True "{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -passwordless_sudo $true $NewUser.passwordless_sudo | Should -Be True Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User passwordless_sudo -eq False "{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -passwordless_sudo $false $NewUser.passwordless_sudo | Should -Be False Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User ldap_binding_user -eq True "{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -ldap_binding_user $true $NewUser.ldap_binding_user | Should -Be True Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User ldap_binding_user -eq False "{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -ldap_binding_user $false $NewUser.ldap_binding_user | Should -Be False Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User enable_user_portal_multifactor -eq True "{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -enable_user_portal_multifactor $true $NewUser.enable_user_portal_multifactor | Should -Be True Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User enable_user_portal_multifactor -eq False "{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -enable_user_portal_multifactor $false $NewUser.enable_user_portal_multifactor | Should -Be False Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User sets unix_uid"{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -unix_uid 100 $NewUser.unix_uid | Should -Be 100 Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User sets unix_guid"{ $NewUser = New-RandomUser "PesterTest$(Get-Date -Format MM-dd-yyyy)" | New-JCUser -unix_guid 100 $NewUser.unix_guid | Should -Be 100 Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User with 1 custom attributes"{ $NewUser = New-RandomUser -Attributes -Domain DeleteMe | New-JCUser -NumberOfCustomAttributes 1 $NewUser.attributes._id.Count | Should -Be 1 Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Creates a new User with 3 custom attributes"{ $NewUser = New-RandomUser -Attributes -Domain DeleteMe | New-JCUser -NumberOfCustomAttributes 3 $NewUser.attributes._id.Count | Should -Be 3 Remove-JCUser -UserID $NewUser._id -ByID -Force } } Describe 'Set-JCUser'{ IT "Updates the firstname and then sets it back using -ByID and -UserID"{ $CurrentFirstName = Get-JCUser -UserID $UserID | Select-Object firstname $NewFirstName = Set-JCUser -ByID -UserID $UserID -firstname 'NewFirstName' $NewFirstName.firstname | Should -be 'NewFirstName' Set-JCUser -ByID -UserID $UserID -firstname $CurrentFirstName.firstname | Out-Null } IT "Updates the firstname and then sets it back using -Username"{ $CurrentFirstName = Get-JCUser -UserID $UserID | Select-Object firstname $NewFirstName = Set-JCUser -Username $Username -firstname 'NewFirstName' $NewFirstName.firstname | Should -be 'NewFirstName' Set-JCUser -ByID -UserID $UserID -firstname $CurrentFirstName.firstname | Out-Null } IT "Updates the lastname and then sets it back using -ByID and -UserID"{ $Currentlastname = Get-JCUser -UserID $UserID | Select-Object lastname $Newlastname = Set-JCUser -ByID -UserID $UserID -lastname 'NewLastName' $Newlastname.lastname | Should -be 'NewLastName' Set-JCUser -ByID -UserID $UserID -lastname $Currentlastname.lastname | Out-Null } IT "Updates the lastname and then sets it back using -Username"{ $Currentlastname = Get-JCUser -UserID $UserID | Select-Object lastname $Newlastname = Set-JCUser -Username $Username -lastname 'NewLastName' $Newlastname.lastname | Should -be 'NewLastName' Set-JCUser -ByID -UserID $UserID -lastname $Currentlastname.lastname | Out-Null } IT "Updates the email and then sets it back using -ByID and -UserID"{ $Currentemail = Get-JCUser -UserID $UserID | Select-Object email $Newemail = Set-JCUser -ByID -UserID $UserID -email $RandomEmail $Newemail.email | Should -be $RandomEmail Set-JCUser -ByID -UserID $UserID -email $Currentemail.email | Out-Null } IT "Updates the email and then sets it back using -Username"{ $Currentemail = Get-JCUser -UserID $UserID | Select-Object email $Newemail = Set-JCUser -Username $Username -email $RandomEmail $Newemail.email | Should -be $RandomEmail Set-JCUser -ByID -UserID $UserID -email $Currentemail.email | Out-Null } IT "Updates the password using -ByID and -UserID"{ {Set-JCUser -ByID -UserID $UserID -password 'Temp123!'} | Should -Not -Throw } IT "Updates the password using -Username"{ {Set-JCUser -Username $username -password 'Temp123!'} | Should -Not -Throw } It "Updates a User allow_public_key -eq True using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -allow_public_key $true $Update.allow_public_key | Should -Be True } It "Updates a User allow_public_key -eq False using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -allow_public_key $false $Update.allow_public_key | Should -Be False } It "Updates a User allow_public_key -eq True using -Username"{ $Update = Set-JCUser -Username $Username -allow_public_key $true $Update.allow_public_key | Should -Be True } It "Updates a User allow_public_key -eq False using -Username"{ $Update = Set-JCUser -Username $Username -allow_public_key $false $Update.allow_public_key | Should -Be False } It "Updates a User sudo -eq True using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -sudo $true $Update.sudo | Should -Be True } It "Updates a User sudo -eq False using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -sudo $false $Update.sudo | Should -Be False } It "Updates a User sudo -eq True using -Username"{ $Update = Set-JCUser -Username $Username -sudo $true $Update.sudo | Should -Be True } It "Updates a User sudo -eq False using -Username"{ $Update = Set-JCUser -Username $Username -sudo $false $Update.sudo | Should -Be False } It "Updates a User enable_managed_uid -eq True using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -enable_managed_uid $true $Update.enable_managed_uid | Should -Be True } It "Updates a User enable_managed_uid -eq False using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -enable_managed_uid $false $Update.enable_managed_uid | Should -Be False } It "Updates a User enable_managed_uid -eq True using -Username"{ $Update = Set-JCUser -Username $Username -enable_managed_uid $true $Update.enable_managed_uid | Should -Be True } It "Updates a User enable_managed_uid -eq False using -Username"{ $Update = Set-JCUser -Username $Username -enable_managed_uid $false $Update.enable_managed_uid | Should -Be False } It "Updates a User account_locked -eq True using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -account_locked $true $Update.account_locked | Should -Be True } It "Updates a User account_locked -eq False using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -account_locked $false $Update.account_locked | Should -Be False } It "Updates a User account_locked -eq True using -Username"{ $Update = Set-JCUser -Username $Username -account_locked $true $Update.account_locked | Should -Be True } It "Updates a User account_locked -eq False using -Username"{ $Update = Set-JCUser -Username $Username -account_locked $false $Update.account_locked | Should -Be False } It "Updates a User passwordless_sudo -eq True using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -passwordless_sudo $true $Update.passwordless_sudo | Should -Be True } It "Updates a User passwordless_sudo -eq False using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -passwordless_sudo $false $Update.passwordless_sudo | Should -Be False } It "Updates a User passwordless_sudo -eq True using -Username"{ $Update = Set-JCUser -Username $Username -passwordless_sudo $true $Update.passwordless_sudo | Should -Be True } It "Updates a User passwordless_sudo -eq False using -Username"{ $Update = Set-JCUser -Username $Username -passwordless_sudo $false $Update.passwordless_sudo | Should -Be False } It "Updates a User externally_managed -eq True using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -externally_managed $true $Update.externally_managed | Should -Be True } It "Updates a User externally_managed -eq False using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -externally_managed $false $Update.externally_managed | Should -Be False } It "Updates a User externally_managed -eq True using -Username"{ $Update = Set-JCUser -Username $Username -externally_managed $true $Update.externally_managed | Should -Be True } It "Updates a User externally_managed -eq False using -Username"{ $Update = Set-JCUser -Username $Username -externally_managed $false $Update.externally_managed | Should -Be False } It "Updates a User ldap_binding_user -eq True using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -ldap_binding_user $true $Update.ldap_binding_user | Should -Be True } It "Updates a User ldap_binding_user -eq False using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -ldap_binding_user $false $Update.ldap_binding_user | Should -Be False } It "Updates a User ldap_binding_user -eq True using -Username"{ $Update = Set-JCUser -Username $Username -ldap_binding_user $true $Update.ldap_binding_user | Should -Be True } It "Updates a User ldap_binding_user -eq False using -Username"{ $Update = Set-JCUser -Username $Username -ldap_binding_user $false $Update.ldap_binding_user | Should -Be False } It "Updates a User enable_user_portal_multifactor -eq True using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -enable_user_portal_multifactor $true $Update.enable_user_portal_multifactor | Should -Be True } It "Updates a User enable_user_portal_multifactor -eq False using -ByID and -UserID"{ $Update = Set-JCUser -ByID -UserID $UserID -enable_user_portal_multifactor $false $Update.enable_user_portal_multifactor | Should -Be False } It "Updates a User enable_user_portal_multifactor -eq True using -Username"{ $Update = Set-JCUser -Username $Username -enable_user_portal_multifactor $true $Update.enable_user_portal_multifactor | Should -Be True } It "Updates a User enable_user_portal_multifactor -eq False using -Username"{ $Update = Set-JCUser -Username $Username -enable_user_portal_multifactor $false $Update.enable_user_portal_multifactor | Should -Be False } IT "Updates the unix_uid and then sets it back using -ByID and -UserID"{ $Currentunix_uid = Get-JCUser -UserID $UserID | Select-Object unix_uid $100 = Set-JCUser -ByID -UserID $UserID -unix_uid '100' $100.unix_uid | Should -be '100' Set-JCUser -ByID -UserID $UserID -unix_uid $Currentunix_uid.unix_uid | Out-Null } IT "Updates the unix_uid and then sets it back using -Username"{ $Currentunix_uid = Get-JCUser -UserID $UserID | Select-Object unix_uid $100 = Set-JCUser -Username $Username -unix_uid '100' $100.unix_uid | Should -be '100' Set-JCUser -ByID -UserID $UserID -unix_uid $Currentunix_uid.unix_uid | Out-Null } IT "Updates the unix_guid and then sets it back using -ByID and -UserID"{ $Currentunix_guid = Get-JCUser -UserID $UserID | Select-Object unix_guid $100 = Set-JCUser -ByID -UserID $UserID -unix_guid '100' $100.unix_guid | Should -be '100' Set-JCUser -ByID -UserID $UserID -unix_guid $Currentunix_guid.unix_guid | Out-Null } IT "Updates the unix_guid and then sets it back using -Username"{ $Currentunix_guid = Get-JCUser -UserID $UserID | Select-Object unix_guid $100 = Set-JCUser -Username $Username -unix_guid '100' $100.unix_guid | Should -be '100' Set-JCUser -ByID -UserID $UserID -unix_guid $Currentunix_guid.unix_guid | Out-Null } } Describe "Set-JCUser - CustomAttributes"{ It "Updates a custom attribute on a User"{ $NewUser = New-RandomUserCustom -Attributes -Domain DeleteMe | New-JCUser -NumberOfCustomAttributes 3 $UpdatedUser = Set-JCUser $NewUser.username -NumberOfCustomAttributes 1 -Attribute1_name 'Department' -Attribute1_value 'IT' [string]$NewUserAttr = $NewUser.attributes.name | Sort-Object [string]$UpdatedUserAttr = $UpdatedUser.attributes.name | Sort-Object $match = if($NewUserAttr -eq $UpdatedUserAttr) {$true} else { $false } $match | Should -be $true Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Adds a custom attribute to a User"{ $NewUser = New-RandomUserCustom -Attributes -Domain DeleteMe | New-JCUser -NumberOfCustomAttributes 3 $UpdatedUser = Set-JCUser $NewUser.username -NumberOfCustomAttributes 1 -Attribute1_name 'NewAttribute' -Attribute1_value 'IT' [int]$NewUserAttr = $NewUser.attributes.name.count [int]$UpdatedUserAttr = $UpdatedUser.attributes.name.count $NewUserAttr ++ $match = if($NewUserAttr -eq $UpdatedUserAttr) {$true} else { $false } $match | Should -be $true Remove-JCUser -UserID $NewUser._id -ByID -Force } It "Removes a custom attribute from a User"{ $NewUser = New-RandomUserCustom -Attributes -Domain DeleteMe | New-JCUser -NumberOfCustomAttributes 3 $UpdatedUser = Set-JCUser $NewUser.username -RemoveAttribute 'Department' [int]$NewUserAttr = $NewUser.attributes.name.count [int]$UpdatedUserAttr = $UpdatedUser.attributes.name.count $UpdatedUserAttr++ $match = if($NewUserAttr -eq $UpdatedUserAttr) {$true} else { $false } $match | Should -be $true Remove-JCUser -UserID $NewUser._id -ByID -Force } } #endregion Users Pester test |