#!/usr/bin/env pwsh

<#
.SYNOPSIS
Runs unit tests. Outputs test results and code coverage report.
#>

# Get path.
$scriptDir = Split-Path $PSCommandPath -Parent
$projectDir = (Get-Item $scriptDir).Parent

# Set working directory to root of project.
Push-Location $projectDir

$ExitCode = 0

# Run unit tests.
pytest coderedcms/
$ExitCode = $LastExitCode

# Print code coverage if succeeded.
if ($ExitCode -eq 0) {
    [xml]$BranchXML = Get-Content coverage.xml
    $LineRate = [math]::Round([decimal]$BranchXML.coverage.'line-rate' * 100, 2)
    Write-Output "All unit tests passed! 🎉"
    Write-Output "Code coverage: $LineRate%"
}
else {
    # Write the error in a way that shows up as the failure reason in Azure Pipelines.
    Write-Host "##vso[task.LogIssue type=error;]Unit tests failed."
}

# Unset working directory and exit with pytest's code.
Pop-Location
exit $ExitCode
