test/JumpCloud.1.4.0.Tests.ps1

#Tests for JumpCloud Module Version 1.4.0

#Fill out below varibles to run tests

$PesterUsername = ''
$PesterUserID = ''


$PesterSystemHostName = ""
$PesterSystemID = ''

#Create JumpCloud commands set to run on webhooks and enter their triggers below

$OneTrigger = ''
$TwoTrigger = ''
$ThreeTrigger = ''

Describe "Invoke-JCCommand" {

    It "Triggers a command with one variable" {

        $Trigger = Invoke-JCCommand -trigger $OneTrigger -NumberOfVariables 1 -Variable1_name 'One' -Variable1_value 'One variable' 
        $Trigger.triggered | Should -be 'Invoke - Pester One Variable'

    }

    IT "Triggers a command with two variables" {

        $Trigger = Invoke-JCCommand -trigger $TwoTrigger -NumberOfVariables 2 -Variable1_name 'One' -Variable1_value 'One variable' -Variable2_name 'Two' -Variable2_value 'Two Variable'
        $Trigger.triggered | Should -be  'Invoke - Pester Two Variable'
    }

    IT "Triggers a command with three variables" {
        $Trigger = Invoke-JCCommand -trigger $ThreeTrigger -NumberOfVariables 3 -Variable1_name 'One' -Variable1_value 'One variable' -Variable2_name 'Two' -Variable2_value 'Two Variable' -Variable3_name 'Three' -Variable3_value 'Three variable'
        $Trigger.triggered | Should -be  'Invoke - Pester Three Variable'

    }
 
}

Describe "Get-JCSystem" {

    It "Gets a JumpCloud system by system ID" {

        $PesterSystem = Get-JCSystem -SystemID $PesterSystemID
        $PesterSystem._id | Should Be $PesterSystemID
    }

    It "Returns all JumpCloud systems" {

        $Systems = Get-JCSystem 
        $Systems.count | Should -BeGreaterThan 1

    }

    It "Searches for JumpCloud system by hostname wildcard end" {

        $PesterSystem = Get-JCSystem -hostname "admins*"
        $PesterSystem.hostname | Should -Be $PesterSystemHostName
    }

    It "Searches for JumpCloud system by hostname wildcard beginning" {

        $PesterSystem = Get-JCSystem -hostname "*-Mac.local"
        $PesterSystem.hostname | Should -Be $PesterSystemHostName
    }

    It "Searches for JumpCloud system by hostname wildcard beginning and end" {

        $PesterSystem = Get-JCSystem -hostname "*-Mac*"
        $PesterSystem.hostname | Should -Be $PesterSystemHostName
    }

    
    It "Searches for JumpCloud system by displayname wildcard end" {

        $PesterSystem = Get-JCSystem -displayname "admins*"
        $PesterSystem.displayname | Should -Be $PesterSystemHostName
    }
    
    It "Searches for JumpCloud system by displayname wildcard beginning" {
    
        $PesterSystem = Get-JCSystem -displayname "*-Mac.local"
        $PesterSystem.displayname | Should -Be $PesterSystemHostName
    }
    
    It "Searches for JumpCloud system by displayname wildcard beginning and end" {
    
        $PesterSystem = Get-JCSystem -displayname "*-Mac*"
        $PesterSystem.displayname | Should -Be $PesterSystemHostName
    }

    It "Searches for JumpCloud system by version" {
    
        $PesterSystem = Get-JCSystem -version "10.12"
        $PesterSystem.version | Should -Be '10.12'
    }

    It "Searches for JumpCloud system by templateName and front and end wildcards" {
    
        $PesterSystem = Get-JCSystem -templateName "*mac*"
        $PesterSystem.templateName | Should -Be 'macosx-darwin-x86_64'
    }

    It "Searches for JumpCloud system by os and front and end wildcards" {
    
        $PesterSystem = Get-JCSystem -os "*Mac*"
        $PesterSystem.os | Should -Be 'Mac OS X'
    }

    It "Searches for JumpCloud system by remoteIP and front and end wildcards" {
    
        $PesterSystem = Get-JCSystem -remoteIP "*91.170*"
        $PesterSystem.remoteIP | Should -Be '70.91.170.105'
    }

    It "Searches for JumpCloud system by serialNumber and front and end wildcards" {
    
        $PesterSystem = Get-JCSystem -serialNumber "*AUX*"
        $PesterSystem.serialNumber | Should -Be 'VMaAUXL+fZQf'
    }

    It "Searches for JumpCloud system by serialNumber and front and end wildcards and arch" {
    
        $PesterSystem = Get-JCSystem -serialNumber "*AUX*" -arch "*_64"
        $PesterSystem.serialNumber | Should -Be 'VMaAUXL+fZQf'
    }

    It "Searches for JumpCloud system by agentVersion and front and end wildcards" {
    
        $PesterSystem = Get-JCSystem -agentVersion "*643*"
        $PesterSystem.agentVersion | Should -Be '0.9.643'
    }

    ## Cannot use wildcards on system timezone

    It "Searches for JumpCloud system by systemTimezone" {
    
        $PesterSystem = Get-JCSystem -systemTimezone "-700"
        $PesterSystem.systemTimezone | Should -Be '-700'
    }
    
    ## Boolean searches

    It "Searches for JumpCloud system by active" {
        $PesterSystem = Get-JCSystem -active $False
        $PesterSystem.active | Should -Be $False

    }

    It "Searches for JumpCloud system by hostname and allowMultiFactorAuthentication" {
        $PesterSystem = Get-JCSystem -hostname "*admin*" -allowMultiFactorAuthentication $False
        $PesterSystem.hostname | Should -Be $PesterSystemHostName
    }
    
    It "Searches for JumpCloud system by hostname and allowPublicKeyAuthentication" {
        $PesterSystem = Get-JCSystem -hostname "*admin*" -allowPublicKeyAuthentication $False
        $PesterSystem.hostname | Should -Be $PesterSystemHostName
    }
    
    It "Searches for JumpCloud system by hostname and allowSshPasswordAuthentication" {
        $PesterSystem = Get-JCSystem -hostname "*admin*" -allowSshPasswordAuthentication $False
        $PesterSystem.hostname | Should -Be $PesterSystemHostName
    }
    
    It "Searches for JumpCloud system by hostname and allowSshRootLogin" {
        $PesterSystem = Get-JCSystem -hostname "*admin*" -allowSshRootLogin $False
        $PesterSystem.hostname | Should -Be $PesterSystemHostName
    }

    It "Searches for JumpCloud system by hostname and modifySSHDConfig" {
        $PesterSystem = Get-JCSystem -hostname "*admin*" -modifySSHDConfig $False
        $PesterSystem.hostname | Should -Be $PesterSystemHostName
    }
    
    It "Searches for a JumpCloud system using hostname, filterDateProperty created and before" {

        $PesterSystem = Get-JCSystem -filterDateProperty created -dateFilter before -date '1/10/2018' -hostname "*admin*"
        $PesterSystem.hostname | Should -Be $PesterSystemHostName

    }

    It "Searches for a JumpCloud system using hostname, filterDateProperty created and after" {

        $PesterSystem = Get-JCSystem -filterDateProperty created -dateFilter after -date '1/7/2018' -hostname "*admin*"
        $PesterSystem.hostname | Should -Be $PesterSystemHostName

    }
       
    It "Searches for a JumpCloud system using hostname and returns properties created" {
        $PesterSystem = Get-JCSystem -hostname "*admin*" -returnProperties created
        $PesterSystem.created | Should -Not -Be $null
    } 
    
    It "Searches for a JumpCloud system using hostname and returns properties active" {
        $PesterSystem = Get-JCSystem -hostname "*admin*" -returnProperties active
        $PesterSystem.active | Should -Not -Be $null
    } 
    
    It "Searches for a JumpCloud system using hostname and returns properties agentVersion" {
        $PesterSystem = Get-JCSystem -hostname "*admin*" -returnProperties agentVersion
        $PesterSystem.agentVersion | Should -Not -Be $null
    }  

    It "Searches for a JumpCloud system using hostname and returns properties allowMultiFactorAuthentication" {
        $PesterSystem = Get-JCSystem -hostname "*admin*" -returnProperties allowMultiFactorAuthentication
        $PesterSystem.allowMultiFactorAuthentication | Should -Not -Be $null
    }  
    
    It "Searches for a JumpCloud system using hostname and returns all properties " {
        $PesterSystem = Get-JCSystem -hostname "*admin*" -returnProperties 'created', 'active', 'agentVersion', 'allowMultiFactorAuthentication', 'allowPublicKeyAuthentication', 'allowSshPasswordAuthentication', 'allowSshRootLogin', 'arch', 'created', 'displayName', 'hostname', 'lastContact', 'modifySSHDConfig', 'organization', 'os', 'remoteIP', 'serialNumber', 'systemTimezone', 'templateName', 'version'
        $PesterSystem.created | Should -Not -Be $null
        $PesterSystem.active | Should -Not -Be $null
        $PesterSystem.agentVersion | Should -Not -Be $null
        $PesterSystem.allowMultiFactorAuthentication | Should -Not -Be $null
        $PesterSystem.allowPublicKeyAuthentication | Should -Not -Be $null
        $PesterSystem.allowSshPasswordAuthentication | Should -Not -Be $null
        $PesterSystem.allowSshRootLogin | Should -Not -Be $null
        $PesterSystem.arch | Should -Not -Be $null
        $PesterSystem.created | Should -Not -Be $null
        $PesterSystem.displayName | Should -Not -Be $null
        $PesterSystem.hostname | Should -Not -Be $null
        $PesterSystem.lastContact | Should -Not -Be $null
        $PesterSystem.modifySSHDConfig | Should -Not -Be $null
        $PesterSystem.organization | Should -Not -Be $null
        $PesterSystem.os | Should -Not -Be $null
        $PesterSystem.remoteIP | Should -Not -Be $null
        $PesterSystem.serialNumber | Should -Not -Be $null
        $PesterSystem.systemTimezone | Should -Not -Be $null
        $PesterSystem.templateName | Should -Not -Be $null
        $PesterSystem.version | Should -Not -Be $null
    }  
       
}

Describe "Get-JCUser" {

    It "Returns a JumpCloud user by UserID" {
        $PesterUser = Get-JCUser -userid $PesterUserID
        $PesterUser._id | Should -be $PesterUserID
    }

    It "Returns all JumpCloud users" {
        $AllUsers = Get-JCUser
        $AllUsers.Count | Should -BeGreaterThan 1
    }

    It "Searches for a JumpCloud user by username and wildcard end" {

        $PesterUser = Get-JCUser -username "pester.*"
        $PesterUser.username | Should -be $PesterUsername

    }

    It "Searches for a JumpCloud user by username and wildcard beginning" {
        $PesterUser = Get-JCUser -username "*ester.tester"
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by username and wildcard beginning and wildcard end" {
        $PesterUser = Get-JCUser -username "*ester.teste*"
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by firstname and wildcard end" {
        $PesterUser = Get-JCUser -firstname "Peste*" -username $PesterUsername
        $PesterUser.username | Should -be $PesterUsername
    }
    
    It "Searches for a JumpCloud user by firstname and wildcard beginning" {
        $PesterUser = Get-JCUser -firstname "*ester" -username $PesterUsername
        $PesterUser.username | Should -be $PesterUsername
    }
    
    It "Searches for a JumpCloud user by firstname and wildcard beginning and wildcard end" {
        $PesterUser = Get-JCUser -firstname "*este*" -username $PesterUsername
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by lastname and wildcard end" {
        $PesterUser = Get-JCUser -lastname "Test*" -username $PesterUsername
        $PesterUser.username | Should -be $PesterUsername
    }
    
    It "Searches for a JumpCloud user by lastname and wildcard beginning" {
        $PesterUser = Get-JCUser -lastname "*ester" -username $PesterUsername
        $PesterUser.username | Should -be $PesterUsername
    }
    
    It "Searches for a JumpCloud user by lastname and wildcard beginning and wildcard end" {
        $PesterUser = Get-JCUser -lastname "*este*" -username $PesterUsername
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by email and wildcard beginning" {
        $PesterUser = Get-JCUser -email "*.com" -username $PesterUsername
        $PesterUser.username | Should -be $PesterUsername
    }
    
    It "Searches for a JumpCloud user by email and wildcard beginning and wildcard end" {
        $PesterUser = Get-JCUser -email "*.co*" -username $PesterUsername
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by username and sudo" {
        $PesterUser = Get-JCUser -username $PesterUsername -sudo $false
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by username and enable_managed_uid" {
        $PesterUser = Get-JCUser -username $PesterUsername -enable_managed_uid $false
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by username and activated" {
        $PesterUser = Get-JCUser -username $PesterUsername -activated $true
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by username and password_expired" {
        $PesterUser = Get-JCUser -username $PesterUsername -password_expired $false
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by username and passwordless_sudo" {
        $PesterUser = Get-JCUser -username $PesterUsername -passwordless_sudo $false
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by username and externally_managed" {
        $PesterUser = Get-JCUser -username $PesterUsername -externally_managed $false
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by username and ldap_binding_user" {
        $PesterUser = Get-JCUser -username $PesterUsername -ldap_binding_user $false
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by username and enable_user_portal_multifactor" {
        $PesterUser = Get-JCUser -username $PesterUsername -enable_user_portal_multifactor $false
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by username and totp_enabled" {
        $PesterUser = Get-JCUser -username $PesterUsername -totp_enabled $false
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by username and allow_public_key" {
        $PesterUser = Get-JCUser -username $PesterUsername -allow_public_key $false
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by username and samba_service_user" {
        $PesterUser = Get-JCUser -username $PesterUsername -samba_service_user $false
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user by username and password_never_expires" {
        $PesterUser = Get-JCUser -username $PesterUsername -password_never_expires $false
        $PesterUser.username | Should -be $PesterUsername
    }
    
    It "Searches for a JumpCloud user using username, filterDateProperty created and before" {

        $PesterUser = Get-JCUser -username $PesterUsername -filterDateProperty created -dateFilter before -date '1/3/2018'
        $PesterUser.username | Should -be $PesterUsername

    }

    It "Searches for a JumpCloud user using username, filterDateProperty created and after" {

        $PesterUser = Get-JCUser -username $PesterUsername -filterDateProperty created -dateFilter after -date '1/1/2018'
        $PesterUser.username | Should -be $PesterUsername

    } 

    IT "Searches for a JumpCloud user using username and returns on the username property" {
        $PesterUser = Get-JCUser -username $PesterUsername -returnProperties username
        $PesterUser.username | Should -be $PesterUsername
    }

    It "Searches for a JumpCloud user using username and returns all properties " {
        $PesterUser = Get-JCUser -username $PesterUsername  -returnProperties 'created', 'account_locked', 'activated', 'addresses', 'allow_public_key', 'attributes', 'email', 'enable_managed_uid', 'enable_user_portal_multifactor', 'externally_managed', 'firstname', 'lastname', 'ldap_binding_user', 'passwordless_sudo', 'password_expired', 'password_never_expires', 'phoneNumbers', 'samba_service_user', 'ssh_keys', 'sudo', 'totp_enabled', 'unix_guid', 'unix_uid', 'username'
        $PesterUser.created | Should -Not -Be $null
        $PesterUser.account_locked | Should -Not -Be $null
        $PesterUser.activated | Should -Not -Be $null
        $PesterUser.addresses | Should -Not -Be $null
        $PesterUser.allow_public_key | Should -Not -Be $null
        $PesterUser.attributes | Should -Not -Be $null
        $PesterUser.email | Should -Not -Be $null
        $PesterUser.enable_managed_uid | Should -Not -Be $null
        $PesterUser.enable_user_portal_multifactor | Should -Not -Be $null
        $PesterUser.externally_managed | Should -Not -Be $null
        $PesterUser.firstname | Should -Not -Be $null
        $PesterUser.lastname | Should -Not -Be $null
        $PesterUser.ldap_binding_user | Should -Not -Be $null
        $PesterUser.passwordless_sudo | Should -Not -Be $null
        $PesterUser.password_expired | Should -Not -Be $null
        $PesterUser.password_never_expires | Should -Not -Be $null
        $PesterUser.samba_service_user | Should -Not -Be $null
        $PesterUser.sudo | Should -Not -Be $null
        $PesterUser.totp_enabled | Should -Not -Be $null
        $PesterUser.phoneNumbers | Should -Not -Be $null
        $PesterUser.unix_guid | Should -Not -Be $null
        $PesterUser.unix_uid | Should -Not -Be $null
        $PesterUser.username | Should -Not -Be $null

    } 
    

}