Test/public/integrations/update-ProjectImtesWithInjection.test.ps1



function Test_UpdateProjectWithInjection{

    Reset-InvokeCommandMock
    Mock_DatabaseRoot

    # https://github.com/orgs/octodemo/projects/625/views/1

    $owner = "octodemo"
    $projectNumber = "625"

    MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -FileName "invoke-GitHubOrgProjectWithFields-$owner-$projectNumber.json"

    New-ModuleV3 -Name IntegrationFunctions

    function global:Invoke-ProjectInjection_1 {
    [CmdletBinding()]
    param(
        [Parameter()][string]$Owner,
        [Parameter()][int]$ProjectNumber
    )

        "String from integration1" | Write-Host

        $params = @{
            ItemId = "PVTI_lADOAlIw4c4A0Lf4zgYNTxI"
            Owner = $Owner
            ProjectNumber = $ProjectNumber
            FieldName = "sf_Text1"
            Value = "Value updated from integration1"
        }
        Edit-ProjectItem @params
        
    }
function global:Invoke-ProjectInjection_2 {
    [CmdletBinding()]
    param(
        [Parameter()][string]$Owner,
        [Parameter()][int]$ProjectNumber
    )
        "String from integration1" | Write-Host

        $params = @{
            ItemId = "PVTI_lADOAlIw4c4A0Lf4zgYNTc0"
            Owner = $Owner
            ProjectNumber = $ProjectNumber
            FieldName = "sf_Text2"
            Value = "Value updated from integration2"
            }
            Edit-ProjectItem @params
    }

    $param = @{
        Owner = $Owner
        ProjectNumber = $ProjectNumber
    }

   $result = Update-ProjectItemsWithInjection @param

   Assert-AreEqual -Expected 2 -Presented $result.Pass
   Assert-AreEqual -Expected 2 -Presented $result.Integrations
   Assert-Contains -Expected "Invoke-ProjectInjection_1" -Presented $result.IntegrationsName
   Assert-Contains -Expected "Invoke-ProjectInjection_2" -Presented $result.IntegrationsName

    # Confirm that the changes are staged
    $result = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber

    Assert-Count -Expected 2 -Presented $result

    # PVTI_lADOAlIw4c4A0Lf4zgYNTxI
    Assert-AreEqual -Expected "Value updated from integration1" -Presented $result.PVTI_lADOAlIw4c4A0Lf4zgYNTxI.PVTF_lADOAlIw4c4A0Lf4zgp2lxM.Value

    # PVTI_lADOAlIw4c4A0Lf4zgYNTc0
    Assert-AreEqual -Expected "Value updated from integration2" -Presented $result.PVTI_lADOAlIw4c4A0Lf4zgYNTc0.PVTF_lADOAlIw4c4A0Lf4zgp2l3o.Value

}

function Test_UpdateProjectWithInjection_Failed_1{

    Reset-InvokeCommandMock
    Mock_DatabaseRoot

    # https://github.com/orgs/octodemo/projects/625/views/1

    $owner = "octodemo"
    $projectNumber = "625"

    MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -FileName "invoke-GitHubOrgProjectWithFields-$owner-$projectNumber.json"

    New-ModuleV3 -Name IntegrationFunctions

    function global:Invoke-ProjectInjection_1 {
    [CmdletBinding()]
    param(
        [Parameter()][string]$Owner,
        [Parameter()][int]$ProjectNumber
    )

        "String from integration1" | Write-Host

        $params = @{
            ItemId = "PVTI_lADOAlIw4c4A0Lf4zgYNTxI"
            Owner = $Owner
            ProjectNumber = $ProjectNumber
            FieldName = "sf_Text1"
            Value = "Value updated from integration1"
        }
        Edit-ProjectItem @params
        
    }
    function global:Invoke-ProjectInjection_2 {
    [CmdletBinding()]
    param(
        [Parameter()][string]$Owner,
        [Parameter()][int]$ProjectNumber
    )
        "String from integration1" | Write-Host

        throw "Integration 2 failed"
    }

    $param = @{
        Owner = $Owner
        ProjectNumber = $ProjectNumber
    }

   $result = Update-ProjectItemsWithInjection @param

   Assert-AreEqual -Expected 2                           -Presented $result.Integrations
   Assert-Contains -Expected "Invoke-ProjectInjection_1" -Presented $result.IntegrationsName
   Assert-Contains -Expected "Invoke-ProjectInjection_2" -Presented $result.IntegrationsName

   Assert-AreEqual -Expected 1                           -Presented $result.Pass
   
   Assert-AreEqual -Expected 1                           -Presented $result.Failed
   Assert-Contains -Expected "Invoke-ProjectInjection_2" -Presented $result.FailedIntegration
   Assert-AreEqual -Expected "Integration 2 failed" -Presented $result.FailedIntegrationErrors."Invoke-ProjectInjection_2".Exception.Message
   Assert-AreEqual -Expected "Integration 2 failed" -Presented $global:FailedIntegrationErrors."Invoke-ProjectInjection_2".Exception.Message


    # Confirm that the changes are staged
    $result = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber

    Assert-Count -Expected 1 -Presented $result

    # PVTI_lADOAlIw4c4A0Lf4zgYNTxI
    Assert-AreEqual -Expected "Value updated from integration1" -Presented $result.PVTI_lADOAlIw4c4A0Lf4zgYNTxI.PVTF_lADOAlIw4c4A0Lf4zgp2lxM.Value

    # # PVTI_lADOAlIw4c4A0Lf4zgYNTc0
    # Assert-AreEqual -Expected "Value updated from integration2" -Presented $result.PVTI_lADOAlIw4c4A0Lf4zgYNTc0.PVTF_lADOAlIw4c4A0Lf4zgp2l3o.Value
}

function Test_InvokeProjectInjection{
    
    Reset-InvokeCommandMock
    Mock_DatabaseRoot

        $owner = "octodemo"
    $projectNumber = "625"

    MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -FileName "invoke-GitHubOrgProjectWithFields-$owner-$projectNumber.json"

    function global:Invoke-ProjectInjection_1 {
    [CmdletBinding()]
    param(
        [Parameter()][string]$Owner,
        [Parameter()][int]$ProjectNumber
    )

        "String from integration1" | Write-Host

        $params = @{
            ItemId = "PVTI_lADOAlIw4c4A0Lf4zgYNTxI"
            Owner = $Owner
            ProjectNumber = $ProjectNumber
            FieldName = "sf_Text1"
            Value = "Value updated from integration1"
        }
        Edit-ProjectItem @params
        
    }

    $result = Invoke-ProjectInjection -FunctionName "Invoke-ProjectInjection_1" -Owner $owner -ProjectNumber $projectNumber

    Assert-AreEqual -Expected 1 -Presented $result.Pass

    $result = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber

    Assert-Count -Expected 1 -Presented $result
    # PVTI_lADOAlIw4c4A0Lf4zgYNTxI
    Assert-AreEqual -Expected "Value updated from integration1" -Presented $result.PVTI_lADOAlIw4c4A0Lf4zgYNTxI.PVTF_lADOAlIw4c4A0Lf4zgp2lxM.Value
}

function Test_InvokeProjectInjection_Fail{
    
    Reset-InvokeCommandMock
    Mock_DatabaseRoot

        $owner = "octodemo"
    $projectNumber = "625"

    MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -FileName "invoke-GitHubOrgProjectWithFields-$owner-$projectNumber.json"

    New-ModuleV3 -Name IntegrationFunctions

    function global:Invoke-ProjectInjection_1 {
    [CmdletBinding()]
    param(
        [Parameter()][string]$Owner,
        [Parameter()][int]$ProjectNumber
    )

        "String from integration1" | Write-Host

        throw "Integration 1 failed"

    }

    $result = Invoke-ProjectInjection -FunctionName "Invoke-ProjectInjection_1" -Owner $owner -ProjectNumber $projectNumber

   Assert-AreEqual -Expected 1                           -Presented $result.Failed
   Assert-Contains -Expected "Invoke-ProjectInjection_1" -Presented $result.FailedIntegration
   Assert-AreEqual -Expected "Integration 1 failed" -Presented $result.FailedIntegrationErrors."Invoke-ProjectInjection_1".Exception.Message
   Assert-AreEqual -Expected "Integration 1 failed" -Presented $global:FailedIntegrationErrors."Invoke-ProjectInjection_1".Exception.Message

    $result = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber

    Assert-Count -Expected 0 -Presented $result
}