Test/public/getPrompt.test.ps1

function Test_GetProjecthelperPrompt {

    Reset-InvokeCommandMock
    Mock_DatabaseRoot

    $owner = "octodemo"
    $projectNumber = "625"
    $s = $ProjecthelperPromoptSettings

    MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -FileName "invoke-GitHubOrgProjectWithFields-octodemo-625-skipitems.json" -SkipItems

    # No environment, return null
    $result = Invoke-WriteProjecthelperPrompt
    Assert-IsNull -Object $(($result | select-string -Pattern "^\[$" ).LineNumber)

    # No environment, with new line
    $result = Invoke-WriteProjecthelperPrompt -WithNewLine
    Assert-IsNull -Object $(($result | select-string -Pattern "^\[$" ).LineNumber)

    # Set environment with empty values
    Set-ProjectHelperEnvironment -Owner $owner -ProjectNumber $projectNumber

    # With environment, without new line
    $result = Invoke-WriteProjecthelperPrompt
    # Find the line with '[' character
    $resultLine = ($result | select-string -Pattern "^\[$" ).LineNumber

    Assert-AreEqual -Presented $result[$resultLine - 1] -Expected $s.BeforeStatus.PreText
    Assert-AreEqual -Presented $result[$resultLine]     -Expected $($($s.OwnerStatus.PreText)+$owner)
    Assert-AreEqual -Presented $result[$resultLine + 1] -Expected $s.DelimStatus1.PreText
    Assert-AreEqual -Presented $result[$resultLine + 2] -Expected $($($s.NumberStatus.PreText)+$projectNumber)
    Assert-AreEqual -Presented $result[$resultLine + 3] -Expected "" # $s.DelimStatus2.PreText is " " that is converted to "" by posh-git"
    Assert-AreEqual -Presented $result[$resultLine + 4] -Expected $s.OKStatus.PreText
    Assert-AreEqual -Presented $result[$resultLine + 5] -Expected $s.AfterStatus.PreText
    Assert-AreEqual -Presented $result[$resultLine + 6] -Expected "" # $s.SpaceStatus.PreText " " that is converted to "" by posh-git

    # With environment, without new line
    $result = Invoke-WriteProjecthelperPrompt -withnewline
    # Find the line with '[' character
    $resultLine = ($result | select-string -Pattern "^\[$" ).LineNumber

    Assert-AreEqual -Presented $result[$resultLine - 1] -Expected $s.BeforeStatus.PreText
    Assert-AreEqual -Presented $result[$resultLine]     -Expected $($($s.OwnerStatus.PreText)+$owner)
    Assert-AreEqual -Presented $result[$resultLine + 1] -Expected $s.DelimStatus1.PreText
    Assert-AreEqual -Presented $result[$resultLine + 2] -Expected $($($s.NumberStatus.PreText)+$projectNumber)
    Assert-AreEqual -Presented $result[$resultLine + 3] -Expected "" # $s.DelimStatus2.PreText is " " that is converted to "" by posh-git"
    Assert-AreEqual -Presented $result[$resultLine + 4] -Expected $s.OKStatus.PreText
    Assert-AreEqual -Presented $result[$resultLine + 5] -Expected $s.AfterStatus.PreText
    Assert-AreEqual -Presented $result[$resultLine + 6] -Expected "" # SpaceStatus.PreText
    Assert-AreEqual -Presented $result[$resultLine + 7] -Expected $s.NewlineStatus.PreText

    # Add some staged items
    Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId "id1" -FieldName "sf_Text1" -Value "value1"
    Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId "id1" -FieldName "sf_Text2" -Value "value2"
    Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId "id2" -FieldName "sf_Text1" -Value "value1"
    Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId "id2" -FieldName "sf_Text2" -Value "value2"
    $itemstaged = 4

    # With items staged
    $result = Invoke-WriteProjecthelperPrompt
    # Find the line with '[' character
    $resultLine = ($result | select-string -Pattern "^\[$" ).LineNumber

    Assert-AreEqual -Presented $result[$resultLine + 4] -Expected $($($s.KOStatus.PreText)+$itemstaged)

}

function Invoke-WriteProjecthelperPrompt([Switch]$withnewline) {
    $resultFile = "./session_log.txt"

    Start-Transcript -Path $resultFile
    $result = Write-ProjecthelperPrompt -WithNewLine:$withnewline
    Stop-Transcript

    Assert-IsNull -Object $result

    $result = Get-Content $resultFile

    Remove-Item $resultFile -Force

    return $result
}