Public/Get-StatusCakeHelperPausedTests.ps1


<#
.Synopsis
   Gets all the StatusCake Tests that the user has permission for
.EXAMPLE
   Get-StatusCakeHelperPausedTests
.INPUTS
    baseTestURL - Base URL endpoint of the statuscake auth API
    Username - Username associated with the API key
    ApiKey - APIKey to access the StatusCake API
    Days - Number of days that the test has been paused longer
    Hours - Number of hours that the test has been paused longer
    Minutes - Number of minutes that the test has been paused longer
    IncludeNotTested - If set tests that have never been tested will be included
    ExcludeTested - If set tests that have been tested will be excluded
.OUTPUTS
    Returns an object with the StatusCake Detailed Test data
.FUNCTIONALITY
    Retrieves all the tests from StatusCake that are paused and have been tested longer than
    the supplied parameters. Defaults to returning tests that have been paused more than a day.
   
#>

function Get-StatusCakeHelperPausedTests
{
    [CmdletBinding(PositionalBinding=$false)]    
    Param(
        [Parameter(ParameterSetName='Days')]
        [Parameter(ParameterSetName='Hours')]
        [Parameter(ParameterSetName='Minutes')]                         
        $baseTestURL = "https://app.statuscake.com/API/Tests/",

        [Parameter(ParameterSetName='Days',Mandatory=$true)]
        [Parameter(ParameterSetName='Hours',Mandatory=$true)]
        [Parameter(ParameterSetName='Minutes',Mandatory=$true)]
        [Parameter(Mandatory=$true)]    
        $Username,
      
        [Parameter(ParameterSetName='Days',Mandatory=$true)]
        [Parameter(ParameterSetName='Hours',Mandatory=$true)]
        [Parameter(ParameterSetName='Minutes',Mandatory=$true)]        
        [Parameter(Mandatory=$true)]          
        $ApiKey,

        [Parameter(ParameterSetName='Days')]     
        [int]$Days=1,
        
        [Parameter(ParameterSetName='Hours')]        
        [int]$Hours,
       
        [Parameter(ParameterSetName='Minutes')]       
        [int]$Minutes,
 
        [Parameter(ParameterSetName='Days')]
        [Parameter(ParameterSetName='Hours')]
        [Parameter(ParameterSetName='Minutes')]         
        [switch]$IncludeNotTested,

        [Parameter(ParameterSetName='Days')]
        [Parameter(ParameterSetName='Hours')]
        [Parameter(ParameterSetName='Minutes')]         
        [switch]$ExcludeTested
    )
    $statusCakeAuth = @{"Username"=$Username;"APIKey"=$ApiKey}
    $statusCakePausedTests = Get-StatusCakeHelperAllTests @statusCakeAuth

    $statusCakePausedTests = $StatusCakePausedTests | Where-Object{$_.Paused -eq "True"}

    $matchingTests=@()
    Foreach($sctest in $statusCakePausedTests)
    {
        $detailedTestData = Get-StatusCakeHelperDetailedTestData @StatusCakeAuth -TestID $sctest.TestID
        if($detailedTestData.LastTested -eq "0000-00-00 00:00:00")
        {   
            Write-Verbose "Test [$($sctest.TestID) / $($sctest.WebsiteName)] has never been tested"
            if($IncludeNotTested)
            {                   
                $matchingTests += $sctest   
            }
            continue
        }

        if($ExcludeTested) 
        {
            Write-Verbose "Skipping test [$($sctest.TestID) / $($sctest.WebsiteName)] as ExcludeTested flag set"            
            continue            
        }

        $testLastTestTimeSpan = New-TimeSpan -Start $detailedTestData.LastTested

        If($testLastTestTimeSpan.TotalDays -ge $Days -and $hours -eq 0)
        {
            Write-Verbose "Test [$($sctest.TestID) / $($sctest.WebsiteName)] paused for [$([math]::Round($testLastTestTimeSpan.totaldays,2))] days"
            $matchingTests += $detailedTestData
            continue
        }
        elseif($testLastTestTimeSpan.Totalhours -ge $Hours -and $minutes -eq 0)
        {
            Write-Verbose "Test [$($sctest.TestID) / $($sctest.WebsiteName)] paused for [$([int]$($testLastTestTimeSpan.totalhours))] hours"                
            $matchingTests += $detailedTestData                
        }
        elseif($testLastTestTimeSpan.Totalminutes -ge $Minutes)
        {
            Write-Verbose "Test [$($sctest.TestID) / $($sctest.WebsiteName)] paused for [$([int]$($testLastTestTimeSpan.totalminutes))] minutes"                 
            $matchingTests += $detailedTestData                
        }  
    }
    Return $matchingTests
}