Tests/LMOpsNotes.Tests.ps1
Describe 'OpsNotes Testing New/Get/Set/Remove' { BeforeAll { Import-Module $Module -Force Connect-LMAccount -AccessId $AccessId -AccessKey $AccessKey -AccountName $AccountName -DisableConsoleLogging -SkipCredValidation } Describe 'New-LMOpsNote' { It 'When given mandatory parameters, returns a created opsnote with matching values' { $Script:TimeNow = Get-Date -UFormat %m%d%Y-%H%M $Script:NewOpsNote = New-LMOpsNote -Note "OpsNote.Build.Test: $Script:TimeNow" -Tags "OpsNote.Build.Test-$Script:TimeNow" $Script:NewOpsNote | Should -Not -BeNullOrEmpty $Script:NewOpsNote.note | Should -Be "OpsNote.Build.Test: $Script:TimeNow" $Script:NewOpsNote.tags | Should -Not -BeNullOrEmpty $Script:NewOpsNote.scopes | Should -BeNullOrEmpty } } Describe 'Get-LMOpsNote' { It 'When given no parameters, returns all opsnotes' { $OpsNote = Get-LMOpsNote ($OpsNote | Measure-Object).Count | Should -BeGreaterThan 0 } It 'When given an id should return that opsnote' { $MaxAttempts = 5 $DelaySeconds = 5 $Success = $false for ($Attempt = 1; $Attempt -le $MaxAttempts; $Attempt++) { try { $OpsNote = Get-LMOpsNote -Id $Script:NewOpsNote.Id -ErrorAction Stop ($OpsNote | Measure-Object).Count | Should -BeExactly 1 $Success = $true break } catch { if ($Attempt -eq $MaxAttempts) { Set-ItResult -Inconclusive -Because "Get-LMOpsNote by ID failed after $MaxAttempts attempts, likely due to backend timing: $($_.Exception.Message)" } else { Write-Host "Attempt $Attempt failed, retrying in $DelaySeconds seconds..." -ForegroundColor Yellow Start-Sleep -Seconds $DelaySeconds } } } } It 'When given a tag should return specified opsnote matching that tag value' { $MaxAttempts = 5 $DelaySeconds = 5 $Success = $false for ($Attempt = 1; $Attempt -le $MaxAttempts; $Attempt++) { try { $OpsNote = Get-LMOpsNote -Tag $Script:NewOpsNote.Tags.name -ErrorAction Stop ($OpsNote | Measure-Object).Count | Should -BeExactly 1 $Success = $true break } catch { if ($Attempt -eq $MaxAttempts) { Set-ItResult -Inconclusive -Because "Get-LMOpsNote by tag failed after $MaxAttempts attempts, likely due to backend timing: $($_.Exception.Message)" } else { Write-Host "Attempt $Attempt failed, retrying in $DelaySeconds seconds..." -ForegroundColor Yellow Start-Sleep -Seconds $DelaySeconds } } } } It 'When given a wildcard tag should return all opsnotes matching that wildcard value' { $MaxAttempts = 5 $DelaySeconds = 5 $Success = $false for ($Attempt = 1; $Attempt -le $MaxAttempts; $Attempt++) { try { $OpsNote = Get-LMOpsNote -Tag "$(($Script:NewOpsNote.Tags.name.Split(".")[0]))*" -ErrorAction Stop ($OpsNote | Measure-Object).Count | Should -BeGreaterThan 0 $Success = $true break } catch { if ($Attempt -eq $MaxAttempts) { Set-ItResult -Inconclusive -Because "Get-LMOpsNote by wildcard tag failed after $MaxAttempts attempts, likely due to backend timing: $($_.Exception.Message)" } else { Write-Host "Attempt $Attempt failed, retrying in $DelaySeconds seconds..." -ForegroundColor Yellow Start-Sleep -Seconds $DelaySeconds } } } } } Describe 'Set-LMOpsNote' { It 'When given a set of parameters, returns an updated opsnote with matching values' { $MaxAttempts = 5 $DelaySeconds = 5 $Success = $false for ($Attempt = 1; $Attempt -le $MaxAttempts; $Attempt++) { try { $OpsNote = Set-LMOpsNote -Id $Script:NewOpsNote.Id -Note "OpsNote.Build.Test: $Script:TimeNow Updated"-ErrorAction Stop $OpsNote.Note | Should -Be "OpsNote.Build.Test: $Script:TimeNow Updated" $Success = $true break } catch { if ($Attempt -eq $MaxAttempts) { Set-ItResult -Inconclusive -Because "Set-LMOpsNote failed after $MaxAttempts attempts: $($_.Exception.Message)" } else { Write-Host "Attempt $Attempt failed, retrying in $DelaySeconds seconds..." -ForegroundColor Yellow Start-Sleep -Seconds $DelaySeconds } } } } } Describe 'Remove-LMOpsNote' { It 'When given an id, remove the opsnote from logic monitor (inconclusive on failure)' { $MaxAttempts = 5 $DelaySeconds = 5 $Success = $false for ($Attempt = 1; $Attempt -le $MaxAttempts; $Attempt++) { try { Remove-LMOpsNote -Id $Script:NewOpsNote.Id -ErrorAction Stop -Confirm:$false $Success = $true break } catch { if ($Attempt -eq $MaxAttempts) { Set-ItResult -Inconclusive -Because "Remove-LMOpsNote failed after $MaxAttempts attempts: $($_.Exception.Message)" } else { Write-Host "Attempt $Attempt failed, retrying in $DelaySeconds seconds..." -ForegroundColor Yellow Start-Sleep -Seconds $DelaySeconds } } } } } AfterAll { Disconnect-LMAccount } } |