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
79 changes: 79 additions & 0 deletions Test/public/project_item.test.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,85 @@
Assert-Count -Expected 0 -Presented $result.Keys
}

function Test_ResetProjectItem_Value_SUCCESS{

Reset-InvokeCommandMock
Mock_DatabaseRoot

$p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number
$item = $p.issue ; $itemId = $item.id
$f1 = $p.fieldtext.name ; $f1Value = "Any value" ;
$f2 = $p.fieldnumber.name ; $f2Value = 99 ;
MockCall_GetProject $p -SkipItems
MockCall_GetItem $itemId

Set-ProjectHelperEnvironment -Owner $owner -ProjectNumber $projectNumber

# Confirm actual values
$actualItem = Get-ProjectItem $itemId
$f1Actual = $actualItem.$f1
$f2Actual = $actualItem.$f2

# Edit values
Edit-ProjectItem -ItemId $itemId -fieldname $f1 -Value $f1Value
Edit-ProjectItem -ItemId $itemId -fieldname $f2 -Value $f2Value

# confirm that the vaules have changed as changes are staged
$changed = Get-ProjectItem $itemId
Assert-AreEqual -Expected $f1Value -Presented $changed.$f1
Assert-AreEqual -Expected $f2Value -Presented $changed.$f2

# Act - reset F1
Reset-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId $itemId -FieldName $f1

Check notice

Code scanning / PSScriptAnalyzer

Line has trailing whitespace Note

Line has trailing whitespace
$reset1 = Get-ProjectItem $itemId
Assert-AreEqual -Expected $f1Actual -Presented $reset1.$f1
Assert-AreEqual -Expected $f2Value -Presented $reset1.$f2

Check notice

Code scanning / PSScriptAnalyzer

Line has trailing whitespace Note

Line has trailing whitespace
# Act Reset F2

Check notice

Code scanning / PSScriptAnalyzer

Line has trailing whitespace Note

Line has trailing whitespace
Reset-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId $itemId -FieldName $f2
$reset2 = Get-ProjectItem $itemId
Assert-AreEqual -Expected $f1Actual -Presented $reset2.$f1
Assert-AreEqual -Expected $f2Actual -Presented $reset2.$f2
}

function Test_ResetProjectItem_SUCCESS{

Reset-InvokeCommandMock
Mock_DatabaseRoot

$p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number
$item = $p.issue ; $itemId = $item.id
$f1 = $p.fieldtext.name ; $f1Value = "Any value" ;
$f2 = $p.fieldnumber.name ; $f2Value = 99 ;
MockCall_GetProject $p -SkipItems
MockCall_GetItem $itemId

Set-ProjectHelperEnvironment -Owner $owner -ProjectNumber $projectNumber

# Confirm actual values
$actualItem = Get-ProjectItem $itemId
$f1Actual = $actualItem.$f1
$f2Actual = $actualItem.$f2

# Edit values
Edit-ProjectItem -ItemId $itemId -fieldname $f1 -Value $f1Value
Edit-ProjectItem -ItemId $itemId -fieldname $f2 -Value $f2Value

# confirm that the vaules have changed as changes are staged
$changed = Get-ProjectItem $itemId
Assert-AreEqual -Expected $f1Value -Presented $changed.$f1
Assert-AreEqual -Expected $f2Value -Presented $changed.$f2

# Act - reset F1
Reset-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId $itemId

Check notice

Code scanning / PSScriptAnalyzer

Line has trailing whitespace Note

Line has trailing whitespace
$reset = Get-ProjectItem $itemId
Assert-AreEqual -Expected $f1Actual -Presented $reset.$f1
Assert-AreEqual -Expected $f2Actual -Presented $reset.$f2
}

function Test_EditProjectItems_Direct{
Reset-InvokeCommandMock
Mock_DatabaseRoot
Expand Down
2 changes: 1 addition & 1 deletion private/projectDatabase/project_database_Async.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ function Sync-ProjectAsync {
"Saving [$($call.projectId)/$($call.itemId)/$($call.FieldId) ($($call.FieldName)) = ""$($call.Value)"" ] ..." | Write-MyHost

Set-ItemValue -Database $db -ItemId $call.itemId -FieldName $call.fieldName -Value $call.Value
Remove-ItemStaged -Database $db -ItemId $call.itemId -FieldId $call.FieldId
Remove-ItemValueStaged -Database $db -ItemId $call.itemId -FieldId $call.FieldId
}

"Done" | Write-MyHost
Expand Down
38 changes: 31 additions & 7 deletions private/projectDatabase/project_database_Item.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -190,20 +190,44 @@
function Remove-ItemStaged{
[CmdletBinding()]
param(
[Parameter(Position = 0)][object]$Database,
[Parameter(Position = 1)][string]$ItemId,
[Parameter(Position = 2)][string]$FieldId
[Parameter(Mandatory,Position = 0)][object]$Database,
[Parameter(Mandatory,Position = 1)][string]$ItemId
)

$db = $Database

# remove item
if($db.Staged.$ItemId) {
"Removing staged item [$ItemId] in project [$($db.ProjectId)]" | Write-MyDebug
$db.Staged.Remove($ItemId)
} else {
"Item [$ItemId] not staged in project [$($db.ProjectId)]" | Write-MyWarning
}
return
}

function Remove-ItemValueStaged{

Check warning

Code scanning / PSScriptAnalyzer

Function 'Remove-ItemValueStaged' has verb that could change system state. Therefore, the function has to support 'ShouldProcess'. Warning

Function 'Remove-ItemValueStaged' has verb that could change system state. Therefore, the function has to support 'ShouldProcess'.
[CmdletBinding()]
param(
[Parameter(Mandatory,Position = 0)][object]$Database,
[Parameter(Mandatory,Position = 1)][string]$ItemId,
[Parameter(Mandatory,Position = 2)][string]$FieldId
)

$db = $Database

# remove field from item

if ($db.Staged.$ItemId.$FieldId) {
# Remove value
"Removing staged field [$FieldId] for item [$ItemId] in project [$($db.ProjectId)]" | Write-MyDebug
$db.Staged.$ItemId.Remove($FieldId)
}

Check notice

Code scanning / PSScriptAnalyzer

Line has trailing whitespace Note

Line has trailing whitespace
# If no more fields in item remove item
if ($db.Staged.$ItemId.Count -eq 0) { $db.Staged.Remove($ItemId)}

# If no more fields in item remove item
if ($db.Staged.$ItemId.Count -eq 0) {
$db.Staged.Remove($ItemId)
} else {
"Field [$FieldId] not staged for item [$ItemId] in project [$($db.ProjectId)]" | Write-MyWarning
}
}

Expand Down
2 changes: 1 addition & 1 deletion private/projectDatabase/project_database_Sync.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ function Sync-Project{
Set-ItemValue -Database $db -ItemId $call.itemId -FieldName $call.FieldName -Value $value

# remove staged item field
Remove-ItemStaged -Database $db -ItemId $itemId -FieldId $fieldId
Remove-ItemValueStaged -Database $db -ItemId $itemId -FieldId $fieldId

"Done" | Write-MyHost
}
Expand Down
29 changes: 22 additions & 7 deletions public/driver/driver_gh.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ function Invoke-GitHubOrgProjectWithFields {

# Check if here are errors
if($response.errors){
"[$($response.errors[0].type)] $($response.errors[0].message)" | Write-MyError
getErrrorString -Errors $response.errors | Write-MyError
return
}

Expand Down Expand Up @@ -133,7 +133,7 @@ function InvokeGitHubOrgProject {

# Check if here are errors
if($response.errors){
"[$($response.errors[0].type)] $($response.errors[0].message)" | Write-MyError
getErrrorString -Errors $response.errors | Write-MyError
return
}

Expand Down Expand Up @@ -208,7 +208,7 @@ function Invoke-GitHubUpdateItemValues{
# Check if here are errors
if($response.errors){
$response.errors | ForEach-Object {
"RESPONSE Type[$($_.type)] $($_.message)" | Write-MyError
getErrrorString -Errors $response.errors | Write-MyError
}
return $null
}
Expand Down Expand Up @@ -277,7 +277,7 @@ function Invoke-GitHubClearItemValues{
# Check if here are errors
if($response.errors){
$response.errors | ForEach-Object {
"RESPONSE Type[$($_.type)] $($_.message)" | Write-MyError
getErrrorString -Errors $response.errors | Write-MyError
}
return $null
}
Expand Down Expand Up @@ -330,7 +330,7 @@ function Invoke-GetIssueOrPullRequest{

# Check if here are errors
if($response.errors){
"[$($response.errors[0].type)] $($response.errors[0].message)" | Write-MyError
getErrrorString -Errors $response.errors | Write-MyError
return
}

Expand Down Expand Up @@ -389,7 +389,7 @@ function Invoke-AddItemToProject{
# Check if here are errors
if($response.errors){
$response.errors | ForEach-Object {
"RESPONSE Type[$($_.type)] $($_.message)" | Write-MyError
getErrrorString -Errors $response.errors | Write-MyError
}
return $null
}
Expand Down Expand Up @@ -447,7 +447,7 @@ function Invoke-RemoveItemFromProject{
# Check if here are errors
if($response.errors){
$response.errors | ForEach-Object {
"RESPONSE Type[$($_.type)] $($_.message)" | Write-MyError
getErrrorString -Errors $response.errors | Write-MyError
}
return $null
}
Expand All @@ -456,6 +456,21 @@ function Invoke-RemoveItemFromProject{
return $response
} Export-ModuleMember -Function Invoke-RemoveItemFromProject

function getErrrorString{
param(
[Parameter(Mandatory=$true)] [object]$Errors
)

$errString = ""
foreach($err in $Errors){
$errString += "[$($err.path)] [$($err.type)] $($err.message) ||"
}
# remove last ||
if($errString.EndsWith("||")){
$errString = $errString.Substring(0, $errString.Length - 2)
}
return $errString
}

<#
.SYNOPSIS
Expand Down
111 changes: 71 additions & 40 deletions public/items/project_item.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -47,23 +47,6 @@

} Export-ModuleMember -Function Get-ProjectItem -Alias "gpi"

# function Set-ProjectItem {
# [CmdletBinding()]
# param(
# [Parameter(Mandatory, ValueFromPipeline, Position = 0)][object]$Item,
# [Parameter()][string]$Owner,
# [Parameter()][string]$ProjectNumber
# )
# ($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 $Owner -ProjectNumber $ProjectNumber
#
# Set-Item $db $item
#
# Save-ProjectDatabaseSafe -Database $db
# }

function Test-ProjectItem {
[CmdletBinding()]
[Alias ("tpi")]
Expand Down Expand Up @@ -316,6 +299,46 @@

} Export-ModuleMember -Function Edit-ProjectItem

function Reset-ProjectItem {

Check notice

Code scanning / PSScriptAnalyzer

The cmdlet 'Reset-ProjectItem' does not have a help comment. Note

The cmdlet 'Reset-ProjectItem' does not have a help comment.

Check warning

Code scanning / PSScriptAnalyzer

Function 'Reset-ProjectItem' has verb that could change system state. Therefore, the function has to support 'ShouldProcess'. Warning

Function 'Reset-ProjectItem' has verb that could change system state. Therefore, the function has to support 'ShouldProcess'.
[CmdletBinding()]
param(
[Parameter()][string]$Owner,
[Parameter()][string]$ProjectNumber,
[Parameter(Mandatory, ValueFromPipeline, Position = 1)][string]$ItemId,
[Parameter(Position = 2)][string]$FieldName
)

process{

($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 }

Check notice

Code scanning / PSScriptAnalyzer

Line has trailing whitespace Note

Line has trailing whitespace
# Force cache update
# Full sync if force. Skip items if not force
$db = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber -Force:$Force -SkipItems:$(-not $Force)

# Remove staged
if([string]::IsNullOrWhiteSpace($FieldName)){
# Remove all staged changes for the item
Remove-ItemStaged $db $ItemId
} else {
#Remove just the field staged change
$field = Get-Field $db $FieldName
if([string]::IsNullOrWhiteSpace($field)){
# Field not found
throw "Field [$FieldName] not found in project"
} else {
"Removing staged field [$FieldId] for item [$ItemId] in project [$($db.ProjectId)]" | Write-MyDebug
Remove-ItemValueStaged $db $ItemId $field.id
}
}

# Commit changes to the database
Save-ProjectDatabaseSafe -Database $db
}

} Export-ModuleMember -Function Reset-ProjectItem

function Add-ProjectItemDirect {
[CmdletBinding()]
[alias("Add-ProjectItem", "api")]
Expand Down Expand Up @@ -395,7 +418,7 @@
[Parameter()][string]$Owner,
[Parameter()][string]$ProjectNumber,
[Parameter(Mandatory, ValueFromPipelineByPropertyName,ValueFromPipeline, Position = 0)][Alias("Id")][string]$ItemId,
[Parameter()][switch]$NoCache
[Parameter()][switch]$Force
)

begin {
Expand All @@ -414,31 +437,39 @@

process {

if (-not $projectId) {
"Project ID not found for Owner [$Owner] and ProjectNumber [$ProjectNumber]" | Write-MyError
return
}
try{
if (-not $projectId) {
"Project ID not found for Owner [$Owner] and ProjectNumber [$ProjectNumber]" | Write-MyError
return $null
}

# Remove item from project
if ($PSCmdlet.ShouldProcess($ItemId, "RRemove from project $Owner/$ProjectNumber")) {
$response = Invoke-MyCommand -Command RemoveItemFromProject -Parameters @{ projectid = $projectId ; itemid = $ItemId }
} else {
return $ItemId
}

# check if the response is null
if ($response.errors) {
"[$($response.errors[0].type)] $($response.errors[0].message)" | Write-MyError
return $null
# Remove item from project
if ($PSCmdlet.ShouldProcess($ItemId, "RRemove from project $Owner/$ProjectNumber")) {
$response = Invoke-MyCommand -Command RemoveItemFromProject -Parameters @{ projectid = $projectId ; itemid = $ItemId }
} else {
# Fake execution return ItemId
return $ItemId

Check notice

Code scanning / PSScriptAnalyzer

The cmdlet 'Remove-ProjectItemDirect' returns an object of type 'System.String' but this type is not declared in the OutputType attribute. Note

The cmdlet 'Remove-ProjectItemDirect' returns an object of type 'System.String' but this type is not declared in the OutputType attribute.
}

Check notice

Code scanning / PSScriptAnalyzer

Line has trailing whitespace Note

Line has trailing whitespace
# check if FAILED
if ($response.errors -or ($response.data.deleteProjectV2Item.deletedItemId -ne $ItemId)) {
"Some issue removing [$ItemId] from project" | Write-MyError

if($Force){
"Force flag is set, removing item from cache anyway" | Write-Verbose
Remove-Item $db $ItemId
Save-ProjectDatabaseSafe -Database $db
return $null
}
}

Check notice

Code scanning / PSScriptAnalyzer

Line has trailing whitespace Note

Line has trailing whitespace
$ret = $response.data.deleteProjectV2Item.deletedItemId
}

if ($response.data.deleteProjectV2Item.deletedItemId -ne $ItemId) {
"Some issue removing [$ItemId] from project" | Write-MyError
return $null
catch {
"Item [$ItemId] not found in project [$Owner/$ProjectNumber]" | Write-MyWarning
return
}

$ret = $response.data.deleteProjectV2Item.deletedItemId


Check notice

Code scanning / PSScriptAnalyzer

Line has trailing whitespace Note

Line has trailing whitespace
# Remove item from cache
"Removing item [$ItemId] from cache" | Write-Verbose
Remove-Item $db $ItemId
Expand Down
2 changes: 1 addition & 1 deletion public/items/project_item_show.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ function Show-ProjectItem{
[CmdletBinding()]
[Alias("shpi")]
param(
[Parameter(ValueFromPipeline)][string]$ItemId,
[Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline, Position = 0)][Alias("id")][string]$ItemId,
[Parameter()][array[]]$FieldsToShow
)

Expand Down
Loading