Skip to content

Commit 2cb3bda

Browse files
authored
Merge pull request #200 from rulasg/rulasg/issue194
feat(Prompt): Add Title to project Prompt and many more
2 parents c89a57d + faf042a commit 2cb3bda

17 files changed

+351
-48
lines changed

Test/private/MockCall_Project.ps1

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ function Get-Mock_Project_625 {
2020
$project.id = $p.id
2121
$project.owner = $p.owner.login
2222
$project.number = $p.number
23+
$project.title = $p.title
2324
$project.url = $p.url
2425

2526
# Add Items to mock

Test/private/MockCall_Project700.ps1

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ function Get-Mock_Project_700 {
4444
# Project info
4545
$project.id = $pActual.id
4646
$project.owner = $pActual.owner.login
47+
$project.title = $pActual.title
4748
$project.number = $pActual.number
4849
$project.url = $pActual.url
4950
$project.cacheFileName = "$($pActual.owner.login)_$($pActual.number).json"
@@ -69,6 +70,8 @@ function Get-Mock_Project_700 {
6970
$project.issueToCreateAddAndRemove= @{
7071
id = $id
7172
number = 46
73+
title = "Issue for development"
74+
body = "Body of issue for development"
7275
url = "https://github.com/octodemo/rulasg-dev-1/issues/46"
7376
getIssueOrPullRequestMockFile = "invoke-getissueorpullrequest-46.json"
7477
itemId = $itemId
@@ -126,7 +129,9 @@ function Get-Mock_Project_700 {
126129
$draftIssue = $pActual.items.nodes | Where-Object { $_.content.title -eq "DraftIssue for development" }
127130
$fss = $draftIssue.fieldValues.nodes | Where-Object { $_.field.id -eq $($fieldsingleselect.id) }
128131
$project.draftissue = @{
132+
order = 11 # order of this item when calling spi
129133
id = $draftIssue.id
134+
url = "https://github.com/orgs/$($project.owner)/projects/$($project.number)/views/1?pane=issue&itemId=$($draftIssue.fullDatabaseId)"
130135
contentId = $draftIssue.content.id
131136
title = $draftIssue.content.title
132137
status = ($draftIssue.fieldValues.nodes | Where-Object { $_.field.name -eq "Status" }).name
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
function Test_SetProjectParameters_SUCCESS{
2+
3+
$p = Get-Mock_Project_700 ; $owner = $p.Owner ; $projectNumber = $p.Number ; $projectTitle = $p.title
4+
MockCall_GetProject $p
5+
$dbPath = Get-Mock_DatabaseRootPath
6+
7+
# Act
8+
Set-ProjectParameters -Owner $owner -ProjectNumber $projectNumber
9+
10+
$v = @{
11+
Owner = @{value =$owner ; file = $($dbPath | Join-Path -Child "EnvironmentCache_Owner.json")}
12+
ProjectNumber = @{value =$projectNumber ; file = $($dbPath | Join-Path -Child "EnvironmentCache_ProjectNumber.json")}
13+
ProjectTitle = @{value =$projectTitle ; file = $($dbPath | Join-Path -Child "EnvironmentCache_ProjectTitle.json")}
14+
}
15+
16+
$v.keys | ForEach-Object {
17+
$key = $_
18+
Assert-AreEqual -Expected $v[$key].value -Presented (Get-Content -Path $v[$key].file | ConvertFrom-Json)
19+
}
20+
}

Test/public/getPrompt.test.ps1

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
function Test_GetProjecthelperPrompt {
22

3-
$owner = "octodemo"
4-
$projectNumber = "625"
5-
$s = $ProjecthelperPromoptSettings
3+
$p = Get-Mock_Project_625 ; $owner = $p.owner ; $projectNumber = $p.number ; $projectTitle = $p.title
4+
MockCall_GetProject -MockProject $p
5+
6+
$Mock_ProjectHelperPromptSettingsVariableName = "Mock_ProjectHelperPromptSettingsVariableName"
7+
Clear-Variable -Name $Mock_ProjectHelperPromptSettingsVariableName -Scope Global -ErrorAction SilentlyContinue
8+
MockCallToString -Command "echo ProjecthelperPromoptSettings" -OutString $Mock_ProjectHelperPromptSettingsVariableName
69

710
MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -FileName "invoke-GitHubOrgProjectWithFields-octodemo-625-skipitems.json" -SkipItems
811
MockCallJson -Command 'Invoke-GetItem -itemid id1' -FileName "invoke-getitem-id1.json"
@@ -17,21 +20,27 @@ function Test_GetProjecthelperPrompt {
1720
Assert-IsNull -Object $(($result | select-string -Pattern "^\[$" ).LineNumber)
1821

1922
# Set environment with empty values
20-
Set-ProjectHelperEnvironment -Owner $owner -ProjectNumber $projectNumber
23+
Set-ProjectParameters -Owner $owner -ProjectNumber $projectNumber
2124

2225
# With environment, without new line
2326
$result = Invoke-WriteProjecthelperPrompt
2427
# Find the line with '[' character
2528
$resultLine = ($result | select-string -Pattern "^\[$" ).LineNumber
2629

30+
$s = (Get-Variable -Name $Mock_ProjectHelperPromptSettingsVariableName -Scope Global).Value
31+
2732
Assert-AreEqual -Presented $result[$resultLine - 1] -Expected $s.BeforeStatus.PreText
2833
Assert-AreEqual -Presented $result[$resultLine] -Expected $($($s.OwnerStatus.PreText)+$owner)
2934
Assert-AreEqual -Presented $result[$resultLine + 1] -Expected $s.DelimStatus1.PreText
3035
Assert-AreEqual -Presented $result[$resultLine + 2] -Expected $($($s.NumberStatus.PreText)+$projectNumber)
3136
Assert-AreEqual -Presented $result[$resultLine + 3] -Expected "" # $s.DelimStatus2.PreText is " " that is converted to "" by posh-git"
32-
Assert-AreEqual -Presented $result[$resultLine + 4] -Expected $s.OKStatus.PreText
33-
Assert-AreEqual -Presented $result[$resultLine + 5] -Expected $s.AfterStatus.PreText
34-
Assert-AreEqual -Presented $result[$resultLine + 6] -Expected "" # $s.SpaceStatus.PreText " " that is converted to "" by posh-git
37+
38+
Assert-AreEqual -Presented $result[$resultLine + 4] -Expected $($($s.TitleStatus.PreText)+$projectTitle)
39+
Assert-AreEqual -Presented $result[$resultLine + 5] -Expected "" # $s.DelimStatus2.PreText is " " that is converted to "" by posh-git"
40+
41+
Assert-AreEqual -Presented $result[$resultLine + 6] -Expected $s.OKStatus.PreText
42+
Assert-AreEqual -Presented $result[$resultLine + 7] -Expected $s.AfterStatus.PreText
43+
Assert-AreEqual -Presented $result[$resultLine + 8] -Expected "" # $s.SpaceStatus.PreText " " that is converted to "" by posh-git
3544

3645
# With environment, without new line
3746
$result = Invoke-WriteProjecthelperPrompt -withnewline
@@ -43,24 +52,28 @@ function Test_GetProjecthelperPrompt {
4352
Assert-AreEqual -Presented $result[$resultLine + 1] -Expected $s.DelimStatus1.PreText
4453
Assert-AreEqual -Presented $result[$resultLine + 2] -Expected $($($s.NumberStatus.PreText)+$projectNumber)
4554
Assert-AreEqual -Presented $result[$resultLine + 3] -Expected "" # $s.DelimStatus2.PreText is " " that is converted to "" by posh-git"
46-
Assert-AreEqual -Presented $result[$resultLine + 4] -Expected $s.OKStatus.PreText
47-
Assert-AreEqual -Presented $result[$resultLine + 5] -Expected $s.AfterStatus.PreText
48-
Assert-AreEqual -Presented $result[$resultLine + 6] -Expected "" # SpaceStatus.PreText
49-
Assert-AreEqual -Presented $result[$resultLine + 7] -Expected $s.NewlineStatus.PreText
55+
56+
Assert-AreEqual -Presented $result[$resultLine + 4] -Expected $($($s.TitleStatus.PreText)+$projectTitle)
57+
Assert-AreEqual -Presented $result[$resultLine + 5] -Expected "" # $s.DelimStatus2.PreText is " " that is converted to "" by posh-git"
58+
59+
Assert-AreEqual -Presented $result[$resultLine + 6] -Expected $s.OKStatus.PreText
60+
Assert-AreEqual -Presented $result[$resultLine + 7] -Expected $s.AfterStatus.PreText
61+
Assert-AreEqual -Presented $result[$resultLine + 8] -Expected "" # SpaceStatus.PreText
62+
Assert-AreEqual -Presented $result[$resultLine + 9] -Expected $s.NewlineStatus.PreText
5063

5164
# Add some staged items
5265
Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId "id1" -FieldName "sf_Text1" -Value "value1"
53-
Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId "id1" -FieldName "sf_Text2" -Value "value2"
66+
# Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId "id1" -FieldName "sf_Text2" -Value "value2"
5467
Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId "id2" -FieldName "sf_Text1" -Value "value1"
55-
Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId "id2" -FieldName "sf_Text2" -Value "value2"
56-
$itemstaged = 4
68+
# Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId "id2" -FieldName "sf_Text2" -Value "value2"
69+
$itemstaged = 2
5770

5871
# With items staged
5972
$result = Invoke-WriteProjecthelperPrompt
6073
# Find the line with '[' character
6174
$resultLine = ($result | select-string -Pattern "^\[$" ).LineNumber
6275

63-
Assert-AreEqual -Presented $result[$resultLine + 4] -Expected $($($s.KOStatus.PreText)+$itemstaged)
76+
Assert-AreEqual -Presented $result[$resultLine + 6] -Expected $($($s.KOStatus.PreText)+$itemstaged)
6477

6578
}
6679

Test/public/issues/New-ProjectIssue.test.ps1

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,54 @@ function Test_NewProjectIssue{
5656

5757
Assert-AreEqual -Expected $result -Presented $i.itemId
5858
}
59+
60+
function Test_CopyProjectIssue_SUCCESS {
61+
62+
$p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number
63+
$r = $p.repo
64+
$i = $p.issueToCreateAddAndRemove
65+
$sourceItemId = $p.issue.id
66+
67+
MockCall_GetProject $p -cache
68+
69+
$createString = 'Invoke-CreateIssue -RepositoryId {repoid} -Title "{title}" -Body "{body}"'
70+
$createString = $createString -replace "{repoid}", $r.id
71+
$createString = $createString -replace "{title}", $i.title
72+
$createString = $createString -replace "{body}", $i.body
73+
74+
MockCallJson -Command "Invoke-Repository -Owner $($r.owner) -Name $($r.name)" -FileName $r.getRepoMockFile
75+
MockCallToObject -Command $createString -OutObject @{ data = @{ createIssue = @{ issue = @{ url = $i.url } } } }
76+
MockCallJson -Command "Invoke-GetIssueOrPullRequest -Url $($i.url)" -FileName $i.getIssueOrPullRequestMockFile
77+
MockCallJson -Command "Invoke-AddItemToProject -ProjectId $($p.id) -ContentId $($i.id)" -FileName $i.addIssueToOProjectMockFile
78+
79+
# Act
80+
$result = Copy-ProjectIssue -ItemId $sourceItemId -ProjectOwner $owner -ProjectNumber $projectNumber -RepoOwner $r.owner -RepoName $r.name
81+
82+
# Assert
83+
Assert-AreEqual -Expected $i.itemId -Presented $result
84+
}
85+
86+
function Test_CopyProjectIssue_SUCCESS_DoNotAddToProject {
87+
88+
$p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number
89+
$r = $p.repo
90+
$i = $p.issueToCreateAddAndRemove
91+
$sourceItemId = $p.issue.id
92+
93+
MockCall_GetProject $p -cache
94+
95+
$createString = 'Invoke-CreateIssue -RepositoryId {repoid} -Title "{title}" -Body "{body}"'
96+
$createString = $createString -replace "{repoid}", $r.id
97+
$createString = $createString -replace "{title}", $i.title
98+
$createString = $createString -replace "{body}", $i.body
99+
100+
MockCallJson -Command "Invoke-Repository -Owner $($r.owner) -Name $($r.name)" -FileName $r.getRepoMockFile
101+
MockCallToObject -Command $createString -OutObject @{ data = @{ createIssue = @{ issue = @{ url = $i.url } } } }
102+
103+
# Act
104+
$result = Copy-ProjectIssue -ItemId $sourceItemId -ProjectOwner $owner -ProjectNumber $projectNumber -RepoOwner $r.owner -RepoName $r.name -DoNotAddToProject
105+
106+
# Assert
107+
Assert-AreEqual -Expected $sourceItemId -Presented $result
108+
109+
}

Test/public/items/use_order.test.ps1

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,30 @@ function Test_UserOrder_Success_OpenBrowser{
5252
$p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number
5353
$order = $p.issue.order ; $url = $p.issue.url
5454

55-
MockCallToNull -command "Invoke-ProjectHelperOpenUrl -Url $url"
55+
$command = 'Invoke-ProjectHelperOpenUrl -Url "{url}"'
56+
$command = $command -replace "{url}", $url
57+
MockCallToNull -command $command
58+
59+
# We need to have the environment set to get item details in PassThru
60+
Set-ProjectHelperEnvironment -Owner $owner -ProjectNumber $projectNumber
61+
$list = Search-ProjectItem -IncludeDone
62+
63+
# Act
64+
$result = $list | Use-Order $order -OpenInBrowser
65+
66+
# Assert
67+
Assert-IsNull -Object $result
68+
}
69+
70+
function Test_UserOrder_Success_OpenBrowser_DRAFT{
71+
MockCall_GetProject_700
72+
73+
$p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number
74+
$order = $p.draftissue.order ; $url = $p.draftissue.url
75+
76+
$command = 'Invoke-ProjectHelperOpenUrl -Url "{url}"'
77+
$command = $command -replace "{url}", $url
78+
MockCallToNull -command $command
5679

5780
# We need to have the environment set to get item details in PassThru
5881
Set-ProjectHelperEnvironment -Owner $owner -ProjectNumber $projectNumber

Test/public/project_item.test.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ function Test_GetProjectItemUrl_SUCCESS_FromApiWhenMissingInCache {
126126

127127
# Arrange
128128
Reset-InvokeCommandMock
129-
$p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number
129+
$p = Get-Mock_Project_625 ; $owner = $p.owner ; $projectNumber = $p.number
130130
$itemId = "id1"
131131
MockCall_GetProject -MockProject $p -SkipItems
132132
MockCallJson -Command "Invoke-GetItem -itemid $itemId" -FileName "invoke-getitem-id1.json"

Test/traceInvoke.log

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,5 @@ Invoke-UpdateProjectV2Collaborators -ProjectId PVT_kwDOAlIw4c4BCe3V -collaborato
8181
Invoke-GitHubOrgProjectWithFields -Owner octodemo -ProjectNumber 700 -afterFields "" -afterItems "" -query "updated:>=2024-02-18"
8282
Invoke-GitHubOrgProjectWithFields -Owner octodemo -ProjectNumber 700 -afterFields "" -afterItems "" -query "updated:>=2025-03-15"
8383
Invoke-ProjectHelperOpenUrl -Url https://github.com/octodemo/rulasg-dev-1/issues/26
84+
echo ProjecthelperPromoptSettings
85+
Invoke-CreateIssue -RepositoryId R_kgDOPrRnkQ -Title "Issue for development" -Body "Body of issue for development"

include/openFilesUrls.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Provides controls to open files and URLs in the default system applications.
44
# Use $MODULE_NAME variable to set up functions names
55

6-
Set-MyInvokeCommandAlias -Alias OpenUrl -Command "Invoke-$($MODULE_NAME)OpenUrl -Url {url}"
6+
Set-MyInvokeCommandAlias -Alias OpenUrl -Command $('Invoke-{modulename}OpenUrl -Url "{url}"' -replace "{modulename}", $MODULE_NAME)
77

88
function Invoke-ModuleNameOpenUrl{
99
[CmdletBinding()]

private/projectDatabase/project_database.ps1

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ function Save-ProjectV2toDatabase{
7676
param(
7777
[Parameter(Position = 0)][object]$ProjectV2,
7878
[Parameter(Position = 1)][hashtable]$Items,
79-
[Parameter(Position = 2)][Object[]]$Fields,
80-
[Parameter()][switch]$ItemsUpdate
79+
[Parameter(Position = 1)][hashtable]$QueryItems,
80+
[Parameter(Position = 2)][Object[]]$Fields
8181
)
8282

8383
$owner = $ProjectV2.owner.login
@@ -96,14 +96,15 @@ function Save-ProjectV2toDatabase{
9696
$db.owner = $owner
9797
$db.number = $projectnumber
9898

99-
if($ItemsUpdate){
99+
# Full list update
100+
$db.items = $Items
101+
102+
# Update just a few items
103+
if($QueryItems){
100104
# Update each of the items to avoid replacing all
101-
foreach ($item in $items.Values){
105+
foreach ($item in $QueryItems.Values){
102106
Set-Item $db $item
103107
}
104-
} else {
105-
# Add items
106-
$db.items = $Items
107108
}
108109

109110
# Update fields
@@ -162,6 +163,13 @@ function Get-DatabaseKey{
162163
[Parameter(Position = 1)][int]$ProjectNumber
163164
)
164165

166+
if([string]::IsNullOrWhiteSpace($Owner)){
167+
throw "Owner is null or empty"
168+
}
169+
if($ProjectNumber -le 0){
170+
throw "ProjectNumber is null or not a positive integer"
171+
}
172+
165173
$ret = "$($owner)_$($projectnumber)"
166174

167175
return $ret

0 commit comments

Comments
 (0)