Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions Test/public/project_items_staged.test.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -1042,6 +1042,97 @@ function Test_Sync_ProjectDatabase_ClearValues{
Assert-StringIsNullOrEmpty -Presented $item1.$fieldPriority1
}

function Test_ResetProjectItemStaged_SUCCESS_AllItems {

# Arrange
Reset-InvokeCommandMock

$p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number
$item1 = $p.issue
$item2 = $p.pullrequest
$fieldText = $p.fieldtext

MockCall_GetProject -MockProject $p -Cache

# Stage changes to two items
Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $item1.id $fieldText.name "value1"
Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $item2.id $fieldText.name "value2"

# Confirm staged changes exist
$stagedBefore = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber
Assert-Count -Expected 2 -Presented $stagedBefore

# Act - Reset all staged items
Reset-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber

# Assert
$stagedAfter = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber
Assert-Count -Expected 0 -Presented $stagedAfter
}

function Test_ResetProjectItemStaged_SUCCESS_SingleItem {

# Arrange
Reset-InvokeCommandMock

$p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number
$item1 = $p.issue
$item2 = $p.pullrequest
$fieldText = $p.fieldtext

MockCall_GetProject -MockProject $p -Cache

# Stage changes to two items
Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $item1.id $fieldText.name "value1"
Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $item2.id $fieldText.name "value2"

# Confirm staged changes exist for both items
$stagedBefore = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber
Assert-Count -Expected 2 -Presented $stagedBefore

# Act - Reset only item1
Reset-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber -ItemId $item1.id

# Assert - item1 should be reset, item2 should remain staged
$stagedAfter = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber
Assert-Count -Expected 1 -Presented $stagedAfter
Assert-IsNull -Object $stagedAfter.($item1.id)
Assert-IsTrue -Condition ($null -ne $stagedAfter.($item2.id))
}

function Test_ResetProjectItemStaged_SUCCESS_Pipeline {

# Arrange
Reset-InvokeCommandMock

$p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number
$item1 = $p.issue
$item2 = $p.pullrequest
$item3 = $p.draftissue
$fieldText = $p.fieldtext

MockCall_GetProject -MockProject $p -Cache

# Stage changes to three items
Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $item1.id $fieldText.name "value1"
Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $item2.id $fieldText.name "value2"
Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $item3.id $fieldText.name "value3"

# Confirm staged changes exist for all items
$stagedBefore = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber
Assert-Count -Expected 3 -Presented $stagedBefore

# Act - Reset item1 and item2 via pipeline
@([PSCustomObject]@{id=$item1.id}, [PSCustomObject]@{id=$item2.id}) | Reset-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber

# Assert - item1 and item2 should be reset, item3 should remain staged
$stagedAfter = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber
Assert-Count -Expected 1 -Presented $stagedAfter
Assert-IsNull -Object $stagedAfter.($item1.id)
Assert-IsNull -Object $stagedAfter.($item2.id)
Assert-IsTrue -Condition ($null -ne $stagedAfter.($item3.id))
}

# For some reason Stop-MyTranscript is failing calling Export-MyTranscript for one test.
# Merging both functions here to avoid the issue for this test.
function Stop-MyTranscript2 {
Expand Down
29 changes: 23 additions & 6 deletions public/items/project_item_staged.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -99,17 +99,34 @@ function Reset-ProjectItemStaged{
[CmdletBinding()]
param(
[Parameter()][string]$Owner,
[Parameter()][string]$ProjectNumber
[Parameter()][string]$ProjectNumber,
[Parameter(ValueFromPipelineByPropertyName)][Alias("id")][string]$ItemId

)

($Owner,$ProjectNumber) = Get-OwnerAndProjectNumber -Owner $Owner -ProjectNumber $ProjectNumber
if([string]::IsNullOrWhiteSpace($owner) -or [string]::IsNullOrWhiteSpace($ProjectNumber)){ "Owner and ProjectNumber are required" | Write-MyError; return $null}
begin{
($Owner,$ProjectNumber) = Get-OwnerAndProjectNumber -Owner $Owner -ProjectNumber $ProjectNumber
if([string]::IsNullOrWhiteSpace($owner) -or [string]::IsNullOrWhiteSpace($ProjectNumber)){ "Owner and ProjectNumber are required" | Write-MyError; return $null}

$db = Get-Project $Owner $ProjectNumber
$db = Get-Project $Owner $ProjectNumber
}

process {

$db.Staged = $null
if([string]::IsNullOrWhiteSpace($ItemId)){
# reset all staged changes
$db.Staged = $null
"All staged changes have been discarded" | Write-MyDebug
} else {
# reset a specific item
$db.Staged.Remove($ItemId)
"Staged changes for item $ItemId have been discarded" | Write-MyDebug
}
}

Save-ProjectDatabaseSafe -Database $db
end{
Save-ProjectDatabaseSafe -Database $db
}

} Export-ModuleMember -Function Reset-ProjectItemStaged

Expand Down
Loading