Skip to content

Commit ae47e19

Browse files
committed
Test_SyncProjectItemsStaged_SUCCESS_SingleSelect
1 parent 9650ed2 commit ae47e19

3 files changed

Lines changed: 251 additions & 3 deletions

File tree

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
{
2+
"data": {
3+
"updateProjectV2ItemFieldValue": {
4+
"projectV2Item": {
5+
"content": {
6+
"__typename": "PullRequest",
7+
"body": "",
8+
"title": "PullRequest for development",
9+
"number": 25,
10+
"url": "https://github.com/octodemo/rulasg-dev-1/pull/25",
11+
"repository": {
12+
"nameWithOwner": "octodemo/rulasg-dev-1"
13+
}
14+
},
15+
"id": "PVTI_lADOAlIw4c4BCe3VzgeioBY",
16+
"fieldValues": {
17+
"nodes": [
18+
{
19+
"__typename": "ProjectV2ItemFieldUserValue",
20+
"users": {
21+
"nodes": [
22+
{
23+
"login": "rulasg"
24+
}
25+
]
26+
},
27+
"field": {
28+
"__typename": "ProjectV2Field",
29+
"id": "PVTF_lADOAlIw4c4BCe3Vzg0rg-Q",
30+
"name": "Assignees",
31+
"dataType": "ASSIGNEES"
32+
}
33+
},
34+
{
35+
"__typename": "ProjectV2ItemFieldRepositoryValue",
36+
"repository": {
37+
"url": "https://github.com/octodemo/rulasg-dev-1"
38+
},
39+
"field": {
40+
"__typename": "ProjectV2Field",
41+
"id": "PVTF_lADOAlIw4c4BCe3Vzg0rg-k",
42+
"name": "Repository",
43+
"dataType": "REPOSITORY"
44+
}
45+
},
46+
{
47+
"__typename": "ProjectV2ItemFieldMilestoneValue",
48+
"milestone": {
49+
"title": "Milestone 1: Project Setup",
50+
"description": "Initial project setup and basic infrastructure",
51+
"dueOn": "2025-09-20T00:00:00Z"
52+
},
53+
"field": {
54+
"__typename": "ProjectV2Field",
55+
"id": "PVTF_lADOAlIw4c4BCe3Vzg0rg-g",
56+
"name": "Milestone",
57+
"dataType": "MILESTONE"
58+
}
59+
},
60+
{
61+
"__typename": "ProjectV2ItemFieldTextValue",
62+
"text": "PullRequest for development",
63+
"field": {
64+
"__typename": "ProjectV2Field",
65+
"id": "PVTF_lADOAlIw4c4BCe3Vzg0rg-M",
66+
"name": "Title",
67+
"dataType": "TITLE"
68+
}
69+
},
70+
{
71+
"__typename": "ProjectV2ItemFieldSingleSelectValue",
72+
"name": "Todo",
73+
"field": {
74+
"__typename": "ProjectV2SingleSelectField",
75+
"id": "PVTSSF_lADOAlIw4c4BCe3Vzg0rg-U",
76+
"name": "Status",
77+
"dataType": "SINGLE_SELECT",
78+
"options": [
79+
{
80+
"id": "f75ad846",
81+
"name": "Todo"
82+
},
83+
{
84+
"id": "47fc9ee4",
85+
"name": "In Progress"
86+
},
87+
{
88+
"id": "98236657",
89+
"name": "Done"
90+
}
91+
]
92+
}
93+
},
94+
{
95+
"__typename": "ProjectV2ItemFieldNumberValue",
96+
"number": 111.0,
97+
"field": {
98+
"__typename": "ProjectV2Field",
99+
"id": "PVTF_lADOAlIw4c4BCe3Vzg0rhjU",
100+
"name": "field-number",
101+
"dataType": "NUMBER"
102+
}
103+
},
104+
{
105+
"__typename": "ProjectV2ItemFieldTextValue",
106+
"text": "text1",
107+
"field": {
108+
"__typename": "ProjectV2Field",
109+
"id": "PVTF_lADOAlIw4c4BCe3Vzg0rhko",
110+
"name": "field-text",
111+
"dataType": "TEXT"
112+
}
113+
},
114+
{
115+
"__typename": "ProjectV2ItemFieldSingleSelectValue",
116+
"name": "option-2",
117+
"field": {
118+
"__typename": "ProjectV2SingleSelectField",
119+
"id": "PVTSSF_lADOAlIw4c4BCe3Vzg0rhno",
120+
"name": "field-singleselect",
121+
"dataType": "SINGLE_SELECT",
122+
"options": [
123+
{
124+
"id": "7d96a925",
125+
"name": "option-1"
126+
},
127+
{
128+
"id": "cd02c585",
129+
"name": "option-2"
130+
},
131+
{
132+
"id": "6b66c93a",
133+
"name": "option-3"
134+
}
135+
]
136+
}
137+
},
138+
{
139+
"__typename": "ProjectV2ItemFieldIterationValue",
140+
"title": "field-iteration 1",
141+
"startDate": "2025-09-07",
142+
"duration": 14,
143+
"field": {
144+
"__typename": "ProjectV2IterationField",
145+
"id": "PVTIF_lADOAlIw4c4BCe3Vzg0rhqQ",
146+
"name": "field-iteration",
147+
"dataType": "ITERATION"
148+
}
149+
},
150+
{
151+
"__typename": "ProjectV2ItemFieldDateValue",
152+
"date": "2025-09-01",
153+
"field": {
154+
"__typename": "ProjectV2Field",
155+
"id": "PVTF_lADOAlIw4c4BCe3Vzg0rhlU",
156+
"name": "field-date",
157+
"dataType": "DATE"
158+
}
159+
}
160+
]
161+
}
162+
}
163+
}
164+
}
165+
}

Test/public/project_items_staged.test.ps1

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,88 @@ function Test_SyncProjectItemsStaged_SUCCESS_Date{
146146
Assert-AreEqual -Expected $fieldValueToUpdate -Presented $item1.$fieldName
147147
}
148148

149+
function Test_SyncProjectItemsStaged_SUCCESS_SingleSelect{
150+
Reset-InvokeCommandMock
151+
Mock_DatabaseRoot
152+
153+
$p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number
154+
155+
$projectId = $p.id
156+
157+
# project item issuue
158+
$item = $p.pullrequest
159+
$field = $p.fieldsingleselect
160+
161+
$itemId1 = $item.id
162+
163+
$fieldName = $field.name
164+
$fieldId = $field.id
165+
$type = "singleSelectOptionId"
166+
167+
$fieldBeforeValueSingleSelect = $item.fieldsingleselect.name
168+
$fieldNewValue = $field.options[1].name
169+
$fieldNewValueId = $field.options[1].id
170+
171+
$mockItems = @(
172+
@{
173+
ItemId = $itemId1
174+
FieldId = $fieldId
175+
Value = $fieldNewValue
176+
ResultFile = "invoke-GitHubUpdateItemValue-$itemId1-$fieldId.json"
177+
}
178+
)
179+
180+
# Loop through the array and set the mock commands
181+
foreach ($item in $mockItems) {
182+
$command = 'Invoke-GitHubUpdateItemValues -ProjectId {ProjectId} -ItemId {ItemId} -FieldId {FieldId} -Value "{Value}" -Type {Type}'
183+
$command = $command -replace '{ProjectId}', $projectId
184+
$command = $command -replace '{ItemId}', $item.ItemId
185+
$command = $command -replace '{FieldId}', $item.FieldId
186+
$command = $command -replace '{Value}', $fieldNewValueId
187+
$command = $command -replace '{Type}', $type
188+
189+
Set-InvokeCommandMock -Command "Get-MockFileContentJson -filename $($item.ResultFile)" -Alias $command
190+
}
191+
192+
# Mock get-project
193+
MockCall_GetProject -MockProject $p -Cache
194+
195+
196+
Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $itemId1 $fieldName $fieldNewValue
197+
198+
$expectedStaged = @{
199+
$($itemId1) = @{
200+
$($fieldId) = $fieldNewValue
201+
}
202+
}
203+
204+
# Act- Staged
205+
# Confirm that the changes are staged
206+
$staged = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber
207+
Assert-AreEqual -Expected $expectedStaged.Count -Presented $staged.Count -Comment "Items staged"
208+
foreach($id in $expectedStaged.Keys){
209+
foreach($field in $expectedStaged.$id.Keys){
210+
Assert-AreEqual -Expected $expectedStaged.$id.$field -Presented $staged.$id.$field.Value -Comment "Item $id Field $field"
211+
}
212+
}
213+
214+
$showStaged = Show-ProjectItemStaged -Owner $Owner -ProjectNumber $ProjectNumber | Show-ProjectItemStaged
215+
Assert-AreEqual -Expected $fieldNewValue -Presented $showStaged.$fieldName.Value
216+
Assert-AreEqual -Expected $fieldBeforeValueSingleSelect -Presented $showStaged.$fieldName.Before
217+
218+
# Act - Sync
219+
$result = Sync-ProjectItemStaged -Owner $Owner -ProjectNumber $ProjectNumber
220+
221+
# Assert
222+
Assert-IsTrue -Condition $result
223+
224+
$staged = Get-ProjectItemStaged -Owner $Owner -ProjectNumber $ProjectNumber
225+
Assert-Count -Expected 0 -Presented $staged
226+
227+
$item1 = Get-ProjectItem -Owner $Owner -ProjectNumber $ProjectNumber -ItemId $itemId1
228+
Assert-AreEqual -Expected $fieldNewValue -Presented $item1.$fieldName
229+
}
230+
149231
function Test_SyncProjectItemsStaged_SUCCESS_Content_Issue_NotCached {
150232
Reset-InvokeCommandMock
151233
Mock_DatabaseRoot

private/projectDatabase/project_database_Sync.ps1

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,10 @@ function Sync-Project{
4747
$FieldStagedId = $itemStaged.Keys | Copy-MyStringArray
4848
foreach($fieldId in $FieldStagedId){
4949

50-
# Staged has the display value.
50+
# Staged has the display value.
5151
# Convert to the update value
52-
$value = ConvertTo-FieldValue -Field $itemStaged.$fieldId.Field -Value $itemStaged.$fieldId.Value
52+
$value = $itemStaged.$fieldId.Value
53+
$valueToSend = ConvertTo-FieldValue -Field $itemStaged.$fieldId.Field -Value $value
5354
$field = $itemStaged.$fieldId.Field
5455

5556
$params = @{
@@ -59,7 +60,7 @@ function Sync-Project{
5960
FieldName = $field.name
6061
FieldType = $field.type
6162
FieldDataType = $field.dataType
62-
Value = $value
63+
Value = $valueToSend
6364
}
6465

6566
"Saving [$($params.Database.ProjectId)/$($params.ItemId)/$($params.FieldId) ($($params.FieldName)) = ""$($params.Value)"" ] ..." | Write-MyHost

0 commit comments

Comments
 (0)