Test/public/project_item.test.ps1
function Test_GetProjectItem_SUCCESS{ Reset-InvokeCommandMock Mock_DatabaseRoot $p = Get-Mock_Project_700 ; $Owner = $p.owner ; $projectNumber = $p.number $i = $p.draftissue $f = $p.fieldtext $fieldComment = $f.name ; $fieldTitle = "Title" $itemId = $i.id $projectFieldTitleValue = $i.title $projectFieldCommentValue = $i.fieldtext $itemFieldTitleValue = $projectFieldTitleValue + " updated" $itemFieldCommentValue = $projectFieldCommentValue + " updated" # allow get project MockCall_GetProject_700 # Even if id is in project we make a direct call when with Force MockCallJson -Command "Invoke-GetItem -itemid $itemId" -FileName "invoke-getitem-$itemId-updated.json" # Act get value from project $result = Get-ProjectItem -Owner $Owner -ProjectNumber $ProjectNumber -ItemId $itemId Assert-AreEqual -Expected $itemId -Presented $result.id Assert-AreEqual -Expected $projectFieldCommentValue -Presented $result.$fieldComment Assert-AreEqual -Expected $projectFieldTitleValue -Presented $result.$fieldTitle # Act with force - get value from direct call $result = Get-ProjectItem -Owner $Owner -ProjectNumber $ProjectNumber -ItemId $itemId -Force Assert-AreEqual -Expected $itemId -Presented $result.id Assert-AreEqual -Expected $itemFieldCommentValue -Presented $result.$fieldComment Assert-AreEqual -Expected $itemFieldTitleValue -Presented $result.$fieldTitle # Edit to see the staged references $newFieldCommentValue = "new value of the comment 10.1" $newFieldTitleValue = "new value of the title 10.1" Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $itemId $fieldComment $newFieldCommentValue Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $itemId $fieldTitle $newFieldTitleValue # Act getting from cached project with staged values $result = Get-ProjectItem -Owner $Owner -ProjectNumber $ProjectNumber -ItemId $itemId Assert-AreEqual -Expected $itemId -Presented $result.id Assert-AreEqual -Expected $newFieldCommentValue -Presented $result.$fieldComment Assert-AreEqual -Expected $newFieldTitleValue -Presented $result.$fieldTitle } function Test_EditProjetItems_SUCCESS{ Reset-InvokeCommandMock Mock_DatabaseRoot $Owner = "octodemo" ; $ProjectNumber = 700 ; MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -FileName 'invoke-GitHubOrgProjectWithFields-octodemo-700.json' $before = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber # Item id 10 # $title = "A draft in the project" $itemId = "PVTI_lADOAlIw4c4BCe3Vzgeio4o" # $title_fieldid= "PVTF_lADOBCrGTM4ActQazgSkYm8" $title_fieldid= "title" $comment_fieldid = "PVTF_lADOAlIw4c4BCe3Vzg0rhko" $fieldComment = "field-text" ; $fieldCommentValue = "new value of the comment 10.1" ; $fieldCommentValue_Before = $before.items.$itemId.$fieldComment $fieldTitle = "Title" ; $fieldTitleValue = "new value of the title 10.1" ; $fieldTitleValue_Before = $before.items.$itemId.$fieldTitle # Act Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $itemId $fieldComment $fieldCommentValue # $prj = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $itemId $fieldTitle $fieldTitleValue # Assert # Confirm that the new value is staged but the original value is not changed $after = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber Assert-AreEqual -Expected $fieldCommentValue_Before -Presented $after.items.$itemId.$fieldComment -Comment "The original value should not be changed" Assert-AreEqual -Expected $fieldTitleValue_Before -Presented $after.items.$itemId.$fieldTitle -Comment "The original value should not be changed" # Cofirm that the new value is staged $result = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber Assert-Count -Expected 1 -Presented $result.Keys Assert-Contains -Expected $itemId -Presented $result.Keys Assert-Count -Expected 2 -Presented $result.$itemId Assert-AreEqual -Expected $fieldComment -Presented $result.$itemId.$comment_fieldid.Field.name Assert-AreEqual -Expected $fieldTitle -Presented $result.$itemId.$title_fieldid.Field.name Assert-AreEqual -Expected $fieldCommentValue -Presented $result.$itemId.$comment_fieldid.Value Assert-AreEqual -Expected $fieldTitleValue -Presented $result.$itemId.$title_fieldid.Value } function Test_EditProjetItems_SUCCESS_Transformations{ Reset-InvokeCommandMock Mock_DatabaseRoot $p = Get-Mock_Project_700 ; $Owner = $p.owner ; $ProjectNumber = $p.number MockCall_GetProject -MockProject $p -Cache $i = $p.issue $fieldTitle = "title" $itemId = $i.id $actualTitle = $i.title $actualRepoName = $i.repositoryName $newValue ="(*) [{{RepositoryName}}] {{Title}}" $finalValue = $newValue -replace '{{RepositoryName}}', $actualRepoName -replace '{{Title}}', $actualTitle # Act Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $i.id $fieldTitle $newValue $staged = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber Assert-AreEqual -Expected $finalValue -Presented $staged.$itemId.$fieldTitle.Value } function Test_EditProjectItems_SameValue{ Reset-InvokeCommandMock Mock_DatabaseRoot $Owner = "octodemo" ; $ProjectNumber = 700 MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -FileName 'invoke-GitHubOrgProjectWithFields-octodemo-700.json' $prj = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber #$actualtitle = $prj.items.$itemId."Title" # Item id 10 # $title = "A draft in the project" $itemId = "PVTI_lADOAlIw4c4BCe3Vzgeio4o" #$title_fieldid= "PVTF_lADOBCrGTM4ActQazgSkYm8" #$comment_fieldid = "PVTF_lADOBCrGTM4ActQazgSl5GU" $fieldComment = "field-text" ; $fieldCommentValue = $prj.items.$itemId."field-text" $fieldTitle = "Title" ; $fieldTitleValue = $prj.items.$itemId."Title" Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $itemId $fieldComment $fieldCommentValue Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $itemId $fieldTitle $fieldTitleValue $result = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber Assert-Count -Expected 0 -Presented $result.Keys } function Test_EditProjectItems_Direct{ Reset-InvokeCommandMock Mock_DatabaseRoot $Owner = "octodemo" ; $ProjectNumber = 700 # No sync of project with items allowed just with skipitems MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -FileName 'invoke-GitHubOrgProjectWithFields-octodemo-700-skipitems.json' -skipitems $itemId = "PVTI_lADOAlIw4c4BCe3Vzgeio4o" $fieldComment = "field-text" ; $fieldCommentValue = "new value of the comment 10.1" $fieldId = "PVTF_lADOAlIw4c4BCe3Vzg0rhko" # Mock the direct call for item MockCallJson -Command "Invoke-GetItem -itemid $itemId" -FileName "invoke-getitem-$itemId.json" # Direct edit of the item Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId $itemId -FieldName $fieldComment -Value $fieldCommentValue # Get the staged item $result = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber Assert-Count -Expected 1 -Presented $result.Keys Assert-AreEqual -Expected $itemId -Presented $result.Keys[0] Assert-AreEqual -Expected $fieldComment -Presented $result.$itemId.$fieldId.Field.name Assert-AreEqual -Expected $fieldCommentValue -Presented $result.$itemId.$fieldId.Value } function Test_UpdateProjectDatabase_Fail_With_Staged{ # When changes are staged list update should fail. # As Update-ProjectDatabase is a private function, we will test it through the public function Get-ProjectItemList with Force Reset-InvokeCommandMock Mock_DatabaseRoot MockCall_GetProject_700 $p = Get-Mock_Project_700 ; $Owner = $p.Owner ; $ProjectNumber = $p.Number $itemsCount = $p.items.totalCount $itemId = $p.issue.Id $fieldComment = "field-text" ; $fieldCommentValue = "new value of the comment 10.1" MockCall_GetItem -ItemId $itemId # Act empty as their is nothing staged yet $result = Get-ProjectItemList -Owner $Owner -ProjectNumber $ProjectNumber -Force Assert-Count -Expected $itemsCount -Presented $result # arrange modifyt to add staged Edit-ProjectItem -Owner $owner -ProjectNumber $projectNumber $itemId $fieldComment $fieldCommentValue # Act get staged. 1 modified $result = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber Assert-Count -Expected 1 -Presented $result.Keys Assert-AreEqual -Expected $itemId -Presented $result.Keys # This call should fail as there are staged changes Start-MyTranscript $result = Get-ProjectItemList -Owner $Owner -ProjectNumber $ProjectNumber -Force $tt = Stop-MyTranscript Assert-IsNull -Object $result $message = "Error: Can not get item list with Force [True]; There are unsaved changes. Restore changes with Reset-ProjectItemStaged or sync projects with Sync-ProjectItemStaged first and try again" Assert-Contains -Expected $message -Presented $tt # Reset the staged changes Reset-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber $result = Get-ProjectItemStaged -Owner $owner -ProjectNumber $projectNumber Assert-Count -Expected 0 -Presented $result.Keys $result = Get-ProjectItemList -Owner $Owner -ProjectNumber $ProjectNumber -Force Assert-Count -Expected $itemsCount -Presented $result } function Test_GetItemDirect_SUCCESS{ Reset-InvokeCommandMock Mock_DatabaseRoot $itemId = "PVTI_lADNJr_OADU3Ys4GAgVO" $itemUrl = "https://github.com/github/sales/issues/11742" $contentId ="I_kwDOAFbrpM6s_fNK" MockCallJson -Command "Invoke-GetItem -itemid $itemId" -FileName "invoke-getitem-$itemId.json" $result = Get-ProjectItemDirect -ItemId $itemId Assert-AreEqual -Expected $itemId -Presented $result.id Assert-AreEqual -Expected $itemUrl -Presented $result.url Assert-AreEqual -Expected $contentId -Presented $result.contentId } function Test_ShowProjectItem_SUCCESS{ Reset-InvokeCommandMock Mock_DatabaseRoot MockCall_GetProject_700 $p = Get-Mock_Project_700; $Owner = "octodemo" ; $ProjectNumber = 700 $i = $p.issue $id = $i.Id $title = $i.title $status = $i.status # title refrence with differnt case and spaces $item = Get-ProjectItem -Owner $owner -ProjectNumber $projectNumber -ItemId $id # Act 0 $result0 = $item | Show-ProjectItem Assert-Count -Expected 1 -Presented $result0 Assert-AreEqual -Expected $id -Presented $result0[0].id Assert-AreEqual -Expected $title -Presented $result0[0].Title $result1 = $item | Show-ProjectItem -Attributes "id","Title","Status" Assert-Count -Expected 1 -Presented $result1 Assert-AreEqual -Expected $id -Presented $result1[0].id Assert-AreEqual -Expected $title -Presented $result1[0].Title Assert-AreEqual -Expected $status -Presented $result1[0].Status } function Test_ShowProjectItem_SUCCESS_Multiple{ Reset-InvokeCommandMock Mock_DatabaseRoot MockCall_GetProject_700 $p = Get-Mock_Project_700; $Owner = $p.owner; $ProjectNumber = $p.number # Arrange - get a few items using search-projectitem $items = Search-ProjectItem -Owner $owner -ProjectNumber $projectNumber -Filter $p.searchInTitle.titleFilter -PassThru $itemsCount = $items.Count Assert-Count -Expected $p.searchInTitle.totalCount -Presented $items $result = $items | Show-ProjectItem -Attributes "id","url","Status" Assert-Count -Expected $itemsCount -Presented $result # Get properties of the first item to verify $expectedProperties = @("id","url","Status") # Verify all items have the same structure for ($i = 1; $i -lt $result.Count; $i++) { $itemProps = $result[$i].PSObject.Properties.Name Assert-Count -Expected 3 -Presented $itemProps -Comment "Item $i should only have 3 properties" foreach ($prop in $expectedProperties) { Assert-Contains -Expected $prop -Presented $itemProps -Comment "Item $i should contain $prop property" } } } |