Test/private/MockCall_Project.ps1

function Get-Mock_Project_625 {

    $project = @{}

    <#
    Reset-InvokeCommandMock
    Enable-InvokeCommandAliasModule
    $cmd = 'Invoke-GitHubOrgProjectWithFields -Owner octodemo -ProjectNumber 625 -afterFields "" -afterItems ""'
    save-invokeAsMockFile $cmd "invoke-GitHubOrgProjectWithFields-octodemo-625.json"
    #>


    $name = "invoke-GitHubOrgProjectWithFields-octodemo-625"
    $project.projectFile = $name + ".json"
    $project.projectFile_skipitems = $name + "-skipitems.json"

    $content = Get-MockFileContentJson -FileName $project.projectFile
    $p = $content.data.organization.projectV2

    # Project info
    $project.id = $p.id
    $project.owner = $p.owner.login
    $project.number = $p.number
    $project.url = $p.url

    # Add Items to mock
    Add-ItemsToMock -project $project

    #############################
    # Update Status on DueDate #
    #############################
    <#
    $prj = Get-Project -Owner octodemo -ProjectNumber 625
    $prj.items.values | Select id,title,DueDate,Status,Comment | Sort-Object title | ft

    id Title DueDate Status Comment
    -- ----- ------- ------ -------
    PVTI_lADOAlIw4c4A0Lf4zgYNTyM draft0 2025-03-01 Planned Change AR Past
    PVTI_lADOAlIw4c4A0Lf4zgYVsJc draft1 9999-12-12 Planned Ignore as Future
    PVTI_lADOAlIw4c4A0Lf4zgfNuvM draft2 9999-12-12 ActionRequired Change to P as AR+Future
    PVTI_lADOAlIw4c4A0Lf4zgfNum4 draft3 2025-03-03 ActionRequired Ignore as Past and AR
    PVTI_lADOAlIw4c4A0Lf4zgYNTxI draft4 2025-03-09 In Progress (ignore not P) | (Changed AR as Past)
    PVTI_lADOAlIw4c4A0Lf4zgfN77A draft5 2025-03-15 Todo (ignore not P) | (Change AR as Today)
    PVTI_lADOAlIw4c4A0Lf4zgfN-44 draft6 2025-03-15 Planned Change to AR as P and Today
    PVTI_lADOAlIw4c4A0Lf4zgYNTc0 draft7 2025-03-05 Done Ignore as Done | (Change AR as Past)
    PVTI_lADOAlIw4c4A0Lf4zgYNTwo draft8 9999-12-12 In Progress Ignore future
    PVTI_lADOAlIw4c4A0Lf4zgfOmpo draft9 9999-12-12 Todo (Ignore not P)
    PVTI_lADOAlIw4c4A0Lf4zgfJYv4 Issue for development skip no DueDate
    PVTI_lADOAlIw4c4A0Lf4zgfJYvk PullRequest for development skip no DueDate

    #>

    $statusFieldName = "Status"
    $dateFieldName = "DueDate"
    $statusAction = "ActionRequired"
    $statusPlanned = "Planned"
    
    $sf = ($content.data.organization.projectV2.fields.nodes | Where-Object { $_.name -eq $statusFieldName })
    $df = ($content.data.organization.projectV2.fields.nodes | Where-Object { $_.name -eq $dateFieldName })
    $project.updateStatusOnDueDate = @{
        statusAction                   = $statusAction
        statusPlanned                  = $statusPlanned
        statusDoneOther                = "Todo"
        fields                         = @{ status = $sf ; dueDate = $df }
        staged                         = @{
            "PVTI_lADOAlIw4c4A0Lf4zgYNTyM" = @{ $($sf.id) = $statusAction } # draft0
            "PVTI_lADOAlIw4c4A0Lf4zgfN-44" = @{ $($sf.id) = $statusAction } # draft5
            "PVTI_lADOAlIw4c4A0Lf4zgfNuvM" = @{ $($sf.id) = $statusPlanned } # draft2
        }
        anyStatus                      = @{
            "PVTI_lADOAlIw4c4A0Lf4zgYNTxI" = @{ $($sf.id) = $statusAction } # draft4
            "PVTI_lADOAlIw4c4A0Lf4zgfN77A" = @{ $($sf.id) = $statusAction } # draft9
            
        }
        includeDone                    = @{
            "PVTI_lADOAlIw4c4A0Lf4zgYNTc0" = @{ $($df.id) = "" } # draft8
            
        }
        includeDoneOther               = @{
            "PVTI_lADOAlIw4c4A0Lf4zgfN77A" = @{ $($df.id) = "" } # draft5
            "PVTI_lADOAlIw4c4A0Lf4zgfOmpo" = @{ $($df.id) = "" } # draft9
        }
        anyStatus_and_includeDoneOther = @{
            "PVTI_lADOAlIw4c4A0Lf4zgYNTxI" = @{ $($sf.id) = $statusAction } # draft4
            "PVTI_lADOAlIw4c4A0Lf4zgfN77A" = @{ $($df.id) = "" } # draft5
            "PVTI_lADOAlIw4c4A0Lf4zgfOmpo" = @{ $($df.id) = "" } # draft9
        }
    }

    #############################
    # Update With Integration #
    #############################

    $project.updateWithIntegration = @{
        fieldSlug = "sf_"
        integrationField = "sfUrl"
        fields = @("sf_Int2","sf_Text1")
        
        integrationCommand = "Get-SfAccount"

        mockdata1 = @{
            command = 'Get-SfAccount "https://some.com/1234/viuew"'
            data = @{
                "Text1"   = "value11"
                "Text2"   = "value12"
                "Number1" = 11
                "Int2"    = 111
            }
        }

        mockdata2 = @{
            command = 'Get-SfAccount "https://some.com/4321/viuew"'
            data = @{
                "Text1"   = "value21"
                "Text2"   = "value22"
                "Number1" = 22
                "Int2"    = 222
            }
        }

        staged =@{
            PVTI_lADOAlIw4c4A0Lf4zgfJYv4 = @{
                PVTF_lADOAlIw4c4A0Lf4zg15NKg = 222
                PVTF_lADOAlIw4c4A0Lf4zg15NMg = "value21"
            }
            PVTI_lADOAlIw4c4A0Lf4zgfJYvk = @{
                PVTF_lADOAlIw4c4A0Lf4zg15NKg = 111
                PVTF_lADOAlIw4c4A0Lf4zg15NMg = "value11"
            }

        } 
    }

    #############################
    # Update With Injection #
    #############################

    $project.updateWithInjection = @{
        item1 = @{
            id = "PVTI_lADOAlIw4c4A0Lf4zgYNTxI"
            fieldName = "sf_Text1"
        }
        item2 = @{
            id = "PVTI_lADOAlIw4c4A0Lf4zgYNTc0"
            fieldName = "Text1"
        }
        field1 = @{
            id = "PVTF_lADOAlIw4c4A0Lf4zg15NMg"
            name = "sf_Text1"
        }
        field2 = @{
            id = "PVTF_lADOAlIw4c4A0Lf4zgp6aFk"
            name = "Text1"
        }
    }



    return $project

}


function Get-Mock_Project_626 {

    $project = @{}

    $project.projectFile = "invoke-GitHubOrgProjectWithFields-octodemo-626.json"
    $project.projectFile_skipitems = "invoke-GitHubOrgProjectWithFields-octodemo-626-skipitems.json"

    $content = Get-MockFileContentJson -FileName $project.projectFile
    $p = $content.data.organization.projectV2

    # Project info
    $project.id = $p.id
    $project.owner = $p.owner.login
    $project.number = $p.number
    $project.url = $p.url

    # Add Items to mock
    Add-ItemsToMock -project $project

    # Sync with 625

    $project.syncBtwPrj_625 = @{}
    $project.syncBtwPrj_625.staged = @{
        PVTI_lADOAlIw4c4A0QAozgfJYqo = @{
            PVTF_lADOAlIw4c4A0QAozgqofEM = 33
            PVTF_lADOAlIw4c4A0QAozgqoeOo = "Issue Text1 Value"
        }
        PVTI_lADOAlIw4c4A0QAozgfJYqk = @{
            PVTF_lADOAlIw4c4A0QAozgqofEM = 11
            PVTF_lADOAlIw4c4A0QAozgqoeOo = "PR Text1 Value"
        }
    }


    return $project
}

function MockCall_GetProject {
    [CmdletBinding()]
    param(
        [parameter(Position = 0)][object]$MockProject,
        [parameter()][switch]$SkipItems,
        [parameter()][switch]$Cache
    )

    $p = $MockProject ; $owner = $p.owner ; $projectNumber = $p.number

    if ( $SkipItems ) {
        $filename = $p.projectFile_skipitems
    }
    else {
        $filename = $p.projectFile
    }

    MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -FileName $filename -SkipItems:$SkipItems
 
    if ($Cache) {
        $null = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber -SkipItems:$SkipItems
    }
}

function Add-ItemsToMock {
    [CmdletBinding()]
    param(
        [parameter(Mandatory, Position = 0)][object] $project
    )

    # Items
    $project.items = @{}
    $project.items.totalCount = $pActual.items.totalcount
    $project.items.doneCount = 6 # too complicated to read from structure

    # Issues to find
    $project.issueToFind = @{}
    $project.issueToFind.Ids = ($pActual.items.nodes | Where-Object { $_.content.title -eq "Issue to find" }).Id

    # Issue for developer
    $issue = $pActual.items.nodes | Where-Object { $_.content.title -eq "Issue for development" }
    $project.issue = @{
        id        = $issue.id
        contentId = $issue.content.id
        title     = $issue.content.title
        status    = ($issue.fieldValues.nodes | Where-Object { $_.field.name -eq "Status" }).name
        fieldtext = ($issue.fieldValues.nodes | Where-Object { $_.field.id -eq $($fieldtext.id) }).text
    }

    # PullRequest for developer
    $pullRequest = $pActual.items.nodes | Where-Object { $_.content.title -eq "PullRequest for development" }
    $project.pullrequest = @{
        id        = $pullRequest.id
        contentId = $pullRequest.content.id
        title     = $pullRequest.content.title
        status    = ($pullRequest.fieldValues.nodes | Where-Object { $_.field.name -eq "Status" }).name
        fieldtext = ($pullRequest.fieldValues.nodes | Where-Object { $_.field.id -eq $($fieldtext.id) }).text
    }

    # DraftIssue for developer
    $draftIssue = $pActual.items.nodes | Where-Object { $_.content.title -eq "DraftIssue for development" }
    $project.draftissue = @{
        id        = $draftIssue.id
        contentId = $draftIssue.content.id
        title     = $draftIssue.content.title
        status    = ($draftIssue.fieldValues.nodes | Where-Object { $_.field.name -eq "Status" }).name
        fieldtext = ($draftIssue.fieldValues.nodes | Where-Object { $_.field.id -eq $($fieldtext.id) }).text
        
    }
}