Tests/LMAppliesToFunction.Tests.ps1

Describe 'AppliesToFunction Testing New/Get/Set/Remove' {
    BeforeAll {
        Import-Module $Module -Force
        . "$PSScriptRoot/Connect-LMTestAccount.ps1"
        Connect-LMTestAccount -DisableConsoleLogging -SkipCredValidation

        $script:TestSuffix = Get-LMTestSuffix
        $script:AppliesToFunctionTestName = "AppliesToFunction.Build.Test.$($script:TestSuffix)"
        $script:AppliesToFunctionUpdatedName = "AppliesToFunction.Build.Test.$($script:TestSuffix).UpdatedName"
    }
    
    Describe 'New-LMAppliesToFunction' {
        It 'When given mandatory parameters, returns a created AppliesToFunction with matching values' {
            $Script:NewAppliesToFunction = New-LMAppliesToFunction -Name $script:AppliesToFunctionTestName -Description "Testing123" -AppliesTo "false()"
            $Script:NewAppliesToFunction | Should -Not -BeNullOrEmpty
            $Script:NewAppliesToFunction.Description | Should -Be "Testing123"
            $Script:NewAppliesToFunction.Code | Should -Be "false()"
        }
    }
    
    Describe 'Get-LMAppliesToFunction' {
        It 'When given no parameters, returns all devices' {
            $AppliesToFunction = Get-LMAppliesToFunction
            ($AppliesToFunction | Measure-Object).Count | Should -BeGreaterThan 0
        }
        It 'When given an id should return that device' {
            $AppliesToFunction = Get-LMAppliesToFunction -Id $Script:NewAppliesToFunction.Id
            ($AppliesToFunction | Measure-Object).Count | Should -BeExactly 1
        }
        It 'When given a name should return specified device matching that name' {
            $AppliesToFunction = Get-LMAppliesToFunction -Name $Script:NewAppliesToFunction.Name
            ($AppliesToFunction | Measure-Object).Count | Should -BeExactly 1
        }
        It 'When given a wildcard name should return all devices matching that wildcard value' {
            $AppliesToFunction = Get-LMAppliesToFunction -Name "$(($Script:NewAppliesToFunction.Name.Split(".")[0]))*"
            ($AppliesToFunction | Measure-Object).Count | Should -BeGreaterThan 0
        }
    }

    Describe 'Set-LMAppliesToFunction' {
        It 'When given a set of parameters, returns an updated AppliesToFunction with matching values' {
            { $AppliesToFunction = Set-LMAppliesToFunction -Id $Script:NewAppliesToFunction.Id -Description "Updated" -NewName $script:AppliesToFunctionUpdatedName -ErrorAction Stop
                $AppliesToFunction.Description | Should -Be "Updated"
                $AppliesToFunction.Name | Should -Be $script:AppliesToFunctionUpdatedName
            } | Should -Not -Throw
        }
    }

    Describe 'Remove-LMAppliesToFunction' {
        It 'When given an id, remove the AppliesToFunction from logic monitor' {
            { Remove-LMAppliesToFunction -Id $Script:NewAppliesToFunction.Id -Confirm:$false -ErrorAction Stop } | Should -Not -Throw
        }
    }
    
    AfterAll {
        Disconnect-LMAccount
    }
}