diff --git a/Test/private/MockCall_Project700.ps1 b/Test/private/MockCall_Project700.ps1 index 57cb88e..16ae130 100644 --- a/Test/private/MockCall_Project700.ps1 +++ b/Test/private/MockCall_Project700.ps1 @@ -85,6 +85,7 @@ function Get-Mock_Project_700 { $issue = $pActual.items.nodes | Where-Object { $_.content.title -eq "Issue for development" } $fss = $issue.fieldValues.nodes | Where-Object { $_.field.id -eq $($fieldsingleselect.id) } $project.issue = @{ + order = 20 # order of this item when calling spi id = $issue.id number = $issue.content.number contentId = $issue.content.id diff --git a/Test/public/items/project_item_show.test.ps1 b/Test/public/items/project_item_show.test.ps1 index a77b6cc..e85b7c0 100644 --- a/Test/public/items/project_item_show.test.ps1 +++ b/Test/public/items/project_item_show.test.ps1 @@ -91,7 +91,7 @@ function Test_OpenInEditor{ $text = "Sample Text for Editor" - $command = '"{content}" | code -w - ' + $command = '"{content}" | code -w -' $command = $command -replace '\{content\}', $text MockCallToNull -Command $command diff --git a/Test/public/items/use_order.test.ps1 b/Test/public/items/use_order.test.ps1 new file mode 100644 index 0000000..ad5beea --- /dev/null +++ b/Test/public/items/use_order.test.ps1 @@ -0,0 +1,58 @@ +function Test_UserOrder_Success{ + MockCall_GetProject_700 + + $p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number + + $list = Search-ProjectItem -Owner $owner -ProjectNumber $projectNumber -IncludeDone + + # Act + $result = $list | Use-Order + + Assert-Count -Expected $($p.items.totalCount +4) -Presented $result + +} + +function Test_UserOrder_Success_GetItem{ + MockCall_GetProject_700 + + $p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number + + $list = Search-ProjectItem -Owner $owner -ProjectNumber $projectNumber -IncludeDone + + # Act + $result = $list | Use-Order 1 -PassThru + + Assert-AreEqual -Expected $($list[1].id) -Presented $result.id +} + +function Test_UserOrder_Success_OpenBrowser{ + MockCall_GetProject_700 + + $p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number + $order = $p.issue.order ; $url = $p.issue.url + + MockCallToNull -command "Invoke-ProjectHelperOpenUrl -Url $url" + + $list = Search-ProjectItem -Owner $owner -ProjectNumber $projectNumber -IncludeDone + + # Act + $result = $list | Use-Order $order -OpenInBrowser + + # Assert + Assert-IsNull -Object $result +} + +function Test_UserOrder_Success_Passthru{ + MockCall_GetProject_700 + + $p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number + $order = $p.issue.order ; $id = $p.issue.id + + $list = Search-ProjectItem -Owner $owner -ProjectNumber $projectNumber -IncludeDone + + # Act + $result = $list | Use-Order $order -PassThru + + # Assert + Assert-AreEqual -Expected $id -Presented $result.id +} diff --git a/Test/traceInvoke.log b/Test/traceInvoke.log index 1f1dcb2..b0266c8 100644 --- a/Test/traceInvoke.log +++ b/Test/traceInvoke.log @@ -29,7 +29,7 @@ Invoke-CreateDraftItem -ProjectId PVT_kwDOAlIw4c4BCe3V -Title "DraftIssue create Invoke-CreateIssue -RepositoryId R_kgDOPrRnkQ -Title "Random value title" -Body "Random value body" Invoke-GetIssueOrPullRequest -Url https://github.com/octodemo/rulasg-dev-1/issues/46 Invoke-AddItemToProject -ProjectId PVT_kwDOAlIw4c4BCe3V -ContentId I_kwDOPrRnkc7T2Al2 -"Sample Text for Editor" | code -w - +"Sample Text for Editor" | code -w - Invoke-RemoveItemFromProject -ProjectId PVT_kwDOAlIw4c4BCe3V -ItemId PVTI_lADOAlIw4c4BCe3VzggVZH8 Invoke-RemoveIssue -IssueId I_kwDOPrRnkc7T2Al2 Import-Module /Users/rulasg/code/ProjectHelper ; Invoke-GitHubUpdateItemValues -ProjectId PVT_kwDOAlIw4c4BCe3V -ItemId PVTI_lADOAlIw4c4BCe3Vzgeiodc -FieldId PVTF_lADOAlIw4c4BCe3Vzg0rhko -Value "new value of the comment 10" -Type text @@ -80,3 +80,4 @@ Invoke-GetUser -Handle rauldibildos Invoke-UpdateProjectV2Collaborators -ProjectId PVT_kwDOAlIw4c4BCe3V -collaborators "MDQ6VXNlcjY4ODQ0MDg= U_kgDOC_E3gw" -Role "WRITER" Invoke-GitHubOrgProjectWithFields -Owner octodemo -ProjectNumber 700 -afterFields "" -afterItems "" -query "updated:>=2024-02-18" Invoke-GitHubOrgProjectWithFields -Owner octodemo -ProjectNumber 700 -afterFields "" -afterItems "" -query "updated:>=2025-03-15" +Invoke-ProjectHelperOpenUrl -Url https://github.com/octodemo/rulasg-dev-1/issues/26 diff --git a/include/openFilesUrls.ps1 b/include/openFilesUrls.ps1 index 1a2c366..7306bc7 100644 --- a/include/openFilesUrls.ps1 +++ b/include/openFilesUrls.ps1 @@ -1,13 +1,17 @@ -function Open-Url { + +# Include openFilesUrls.ps1 +# Provides controls to open files and URLs in the default system applications. +# Use $MODULE_NAME variable to set up functions names + +Set-MyInvokeCommandAlias -Alias OpenUrl -Command "Invoke-$($MODULE_NAME)OpenUrl -Url {url}" + +function Invoke-ModuleNameOpenUrl{ [CmdletBinding()] - param ( - [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)] - [ValidateNotNullOrEmpty()] - [string]$Url + param( + [Parameter(Mandatory = $true)][string]$Url ) - process { - try { + try { # Determine the operating system if ($IsWindows -or $env:OS -match "Windows") { # Windows - use Start-Process @@ -47,6 +51,21 @@ function Open-Url { catch { Write-Error "Failed to open URL: $_" } +} +Copy-Item -path Function:Invoke-ModuleNameOpenUrl -Destination Function:"Invoke-$($MODULE_NAME)OpenUrl" +Export-ModuleMember -Function "Invoke-$($MODULE_NAME)OpenUrl" + + +function Open-Url { + [CmdletBinding()] + param ( + [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)] + [ValidateNotNullOrEmpty()] + [string]$Url + ) + + process { + Invoke-MyCommand -Command OpenUrl -Parameters @{url = $Url} } } diff --git a/public/items/project_item.ps1 b/public/items/project_item.ps1 index 782b04a..b2ac986 100644 --- a/public/items/project_item.ps1 +++ b/public/items/project_item.ps1 @@ -216,11 +216,15 @@ function Format-ProjectItem{ $ret = [pscustomobject]::new() foreach($a in $Attributes){ - if( ! $Item.$a){ + # just in case attribute has an empty name + if( [string]::IsNullOrWhiteSpace($a) ){ continue } - $ret | Add-Member -MemberType NoteProperty -Name $a -Value $Item.$a -force + # Add value even if it't empty value + $value = $Item.$a ?? "" + + $ret | Add-Member -MemberType NoteProperty -Name $a -Value $value -force } return $ret @@ -750,4 +754,4 @@ function AreEqual { $ret = $Object1 -eq $Object2 return $ret -} \ No newline at end of file +} diff --git a/public/items/project_item_show.ps1 b/public/items/project_item_show.ps1 index 6c47e21..5d7f734 100644 --- a/public/items/project_item_show.ps1 +++ b/public/items/project_item_show.ps1 @@ -1,4 +1,4 @@ -Set-MyinvokeCommandAlias -Alias ShowInEditor -Command '"{content}" | code -w - ' +Set-MyinvokeCommandAlias -Alias ShowInEditor -Command '"{content}" | code -w -' function Show-ProjectItem{ [CmdletBinding()] @@ -10,7 +10,7 @@ function Show-ProjectItem{ [Parameter()][array[]]$FieldsToShow, [Parameter()][switch]$AllComments, [Parameter()][switch]$OpenInEditor, - [Parameter()][Alias("W")][switch]$OpenInWebBrowser + [Parameter()][Alias("W")][switch]$OpenInBrowser ) begin{ @@ -26,7 +26,7 @@ function Show-ProjectItem{ $item = Get-ProjectItem -ItemId $ItemId - if($OpenInWebBrowser){ + if($OpenInBrowser){ Open-Url -Url $item.url } diff --git a/public/items/use_order.ps1 b/public/items/use_order.ps1 index 3cf3596..157cced 100644 --- a/public/items/use_order.ps1 +++ b/public/items/use_order.ps1 @@ -5,7 +5,8 @@ function Use-Order { [Parameter(Position = 0)][int]$Ordinal = -1, [Parameter(ValueFromPipeline)][array]$List, [Parameter()][switch]$OpenInEditor, - [Parameter()][Alias("w")][switch]$OpenInBrowser + [Parameter()][Alias("w")][switch]$OpenInBrowser, + [Parameter()][switch]$PassThru ) begin { @@ -28,21 +29,24 @@ function Use-Order { } end { - if ($Ordinal -gt -1) { - $itemId = $finallist[$Ordinal].id - - if($OpenInBrowser){ - # Open - $item = Get-ProjectItem -ItemId $itemId - Open-Url $($item.url) - } else { - # Show - Show-ProjectItem -Item $itemId -OpenInEditor:$OpenInEditor - } + # Show list of items + if ($Ordinal -lt 0) { + return $finalList | Format-Table -AutoSize } - else { - $finalList | Format-Table -AutoSize + + # Show a particular item + $itemId = $finalList[$Ordinal].id + + #return item + if($PassThru) { + $i = Get-ProjectItem -ItemId $itemId + return [PsCustomObject]$i } + + # Show item in console or editor + Show-ProjectItem -Item $itemId -OpenInEditor:$OpenInEditor -OpenInBrowser:$OpenInBrowser + return + } } Export-ModuleMember -Function Use-Order -Alias "uo" \ No newline at end of file