Tests/LMWebsite.Tests.ps1

Describe 'Website Testing New/Get/Set/Remove' {
    BeforeAll {
        Import-Module $Module -Force
        Connect-LMAccount -AccessId $AccessId -AccessKey $AccessKey -AccountName $AccountName -DisableConsoleLogging
    }
    
    Describe 'New-LMWebsite' {
        It 'When given mandatory parameters, returns a created website with matching values' {
            $Script:NewWebsite = New-LMWebsite -Name "Website.Build.Test" -Type webcheck -WebsiteDomain "example.com" -Description "BuildTest" -Properties @{"testprop"="BuildTest"}
            $Script:NewWebsite | Should -Not -BeNullOrEmpty
            $Script:NewWebsite.Description | Should -BeExactly "BuildTest"
            $Script:NewWebsite.properties.name.IndexOf("testprop") | Should -Not -BeExactly -1
        }
    }

    Describe 'Get-LMWebsiteProperty' {
        It 'When given mandatory parameters, returns a specified property' {
            $WebsiteProp = Get-LMWebsiteProperty -Id $Script:NewWebsite.Id | Where-Object {$_.name -eq "testprop"}
            $WebsiteProp | Should -Not -BeNullOrEmpty
        }
    }
    
    Describe 'Get-LMWebsite' {
        It 'When given no parameters, returns all websites' {
            $Website = Get-LMWebsite
            ($Website | Measure-Object).Count | Should -BeGreaterThan 0
        }
        It 'When given an id should return that website' {
            $Website = Get-LMWebsite -Id $Script:NewWebsite.Id
            ($Website | Measure-Object).Count | Should -BeExactly 1
        }
        It 'When given a name should return specified website matching that name' {
            $Website = Get-LMWebsite -Name $Script:NewWebsite.Name
            ($Website | Measure-Object).Count | Should -BeExactly 1
        }
        It 'When given a wildcard name should return all websites matching that wildcard value' {
            $Website = Get-LMWebsite -Name "$(($Script:NewWebsite.Name.Split(".")[0]))*"
            ($Website | Measure-Object).Count | Should -BeGreaterThan 0
        }
        It 'When given a type value should return all websites matching that type' {
            $Website = Get-LMWebsite -Type Webcheck
            $Website.type.Contains("pingcheck") | Should -BeExactly $false
        }
    }

    Describe 'Set-LMWebsite' {
        It 'When given a set of parameters, returns an updated website with matching values' {
            { $Device = Set-LMWebsite -Id $Script:NewWebsite.Id -Description "Updated" -Properties @{"test"="123";"test2"="456"} -ErrorAction Stop
                $Device.Description | Should -Be "Updated"
                $Device.Properties.name.IndexOf("test") | Should -Not -BeExactly -1
                $Device.Properties.name.IndexOf("test2") | Should -Not -BeExactly -1
            } | Should -Not -Throw
        }
    }

    Describe 'Remove-LMWebsite' {
        It 'When given an id, remove the device from logic monitor' {
            { Remove-LMWebsite -Id $Script:NewWebsite.Id -ErrorAction Stop } | Should -Not -Throw
        }
    }
    
    AfterAll {
        Disconnect-LMAccount
    }
}