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
25 changes: 1 addition & 24 deletions Test/public/project_item.test.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -225,29 +225,6 @@ function Test_UpdateProjectDatabase_Fail_With_Staged{

}


function Test_SearchProjectItem_SUCCESS{

Reset-InvokeCommandMock
Mock_DatabaseRoot

MockCall_GetProject_700

$p = Get-Mock_Project_700; $owner = $p.owner ; $projectNumber = $p.number


"development", "96", "rulasg-dev-1" | ForEach-Object{

$result = Search-ProjectItem -Owner $owner -ProjectNumber $projectNumber -Filter $_ -IncludeDone

Assert-Count -Expected $p.searchInAnyField.$_.totalCount -Presented $result

foreach ($r in $result) {
Assert-Contains -Expected $r.Title -Presented $p.searchInAnyField.$_.Titles
}
}
}

function Test_GetItemDirect_SUCCESS{
Reset-InvokeCommandMock
Mock_DatabaseRoot
Expand Down Expand Up @@ -302,7 +279,7 @@ function Test_ShowProjectItem_SUCCESS_Multiple{
$p = Get-Mock_Project_700; $Owner = $p.owner; $ProjectNumber = $p.number

# Arrange - get a few items using search-projectitem
$items = Search-ProjectItemByTitle -Owner $owner -ProjectNumber $projectNumber -Title $p.searchInTitle.titleFilter
$items = Search-ProjectItem -Owner $owner -ProjectNumber $projectNumber -Filter $p.searchInTitle.titleFilter
$itemsCount = $items.Count
Assert-Count -Expected $p.searchInTitle.totalCount -Presented $items

Expand Down
72 changes: 0 additions & 72 deletions Test/public/project_item_list.test.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -95,76 +95,4 @@ function Test_ProjectItemList_ExcludeDone{
Assert-AreEqual -Expected ($itemsCount - $itemsDone) -Presented $result.Keys.Count
}

function Test_SearchProjectItemByTitle_SUCCESS{

Reset-InvokeCommandMock
Mock_DatabaseRoot

MockCall_GetProject_700

$p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number

# title refrence with differnt case and spaces
$title = $p.searchInTitle.titleFilter

# Act
$result = Search-ProjectItemByTitle -Owner $owner -ProjectNumber $projectNumber -Title $title

Assert-Count -Expected $p.searchInTitle.totalCount -Presented $result

$p.searchInTitle.Titles | ForEach-Object {
Assert-Contains -Expected $_ -Presented $result.Title
}

}


function Test_SearchProjectItemByTitle_FAIL{

Reset-InvokeCommandMock
Mock_DatabaseRoot

$Owner = "SomeOrg" ; $ProjectNumber = 164
$erroMessage= "Error: Project not found. Check owner and projectnumber"

Mock_DatabaseRoot

MockCall_GitHubOrgProjectWithFields_Null -Owner $owner -ProjectNumber $projectNumber

# Run the command
Start-MyTranscript
$result = Search-ProjectItemByTitle -Owner $Owner -ProjectNumber $ProjectNumber
$tt = Stop-MyTranscript

Assert-IsNull -Object $result
Assert-Contains -Expected $erroMessage -Presented $tt
}

function Test_SearchProjectItem_SUCCESS{

Reset-InvokeCommandMock
Mock_DatabaseRoot

$Owner = "SomeOrg" ; $ProjectNumber = 164

# title refrence with differnt case and spaces
$filter = "epic"

MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -FileName 'projectV2.json'

$result = Search-ProjectItem -Owner $owner -ProjectNumber $projectNumber -Filter $filter -Fields ("id","title","url","id")

Assert-Count -Expected 2 -Presented $result

Assert-Contains -Expected "EPIC 1 " -Presented $result.title
Assert-Contains -Expected "PVTI_lADOBCrGTM4ActQazgMtRO0" -Presented $result.id
Assert-Contains -Expected "EPIC 2" -Presented $result.title
Assert-Contains -Expected "PVTI_lADOBCrGTM4ActQazgMtRPg" -Presented $result.id


$result = Search-ProjectItem 684
Assert-AreEqual -Expected "Issue 455d29e3" -Presented $result[0].title
Assert-AreEqual -Expected "PVTI_lADNJr_OALnx2s4Fqq8p" -Presented $result[0].id
Assert-AreEqual -Expected "https://github.com/SomeOrg/ProjectDemoTest-repo-front/issues/3" -Presented $result[0].url

}
64 changes: 64 additions & 0 deletions Test/public/project_item_search.test.pd1
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
function Test_SearchProjectItem_SUCCESS_Title{

Reset-InvokeCommandMock
Mock_DatabaseRoot

MockCall_GetProject_700

$p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number

# title refrence with differnt case and spaces
$title = $p.searchInTitle.titleFilter

# Act
$result = Search-ProjectItem -Owner $owner -ProjectNumber $projectNumber -Filter $title

Assert-Count -Expected $p.searchInTitle.totalCount -Presented $result

$p.searchInTitle.Titles | ForEach-Object {
Assert-Contains -Expected $_ -Presented $result.Title
}
}

function Test_SearchProjectItem_SUCCESS_AnyField{

Reset-InvokeCommandMock
Mock_DatabaseRoot

MockCall_GetProject_700

$p = Get-Mock_Project_700; $owner = $p.owner ; $projectNumber = $p.number


"development", "96", "rulasg-dev-1" | ForEach-Object{

$result = Search-ProjectItem -Owner $owner -ProjectNumber $projectNumber -Filter $_ -IncludeDone -AnyField

Assert-Count -Expected $p.searchInAnyField.$_.totalCount -Presented $result

foreach ($r in $result) {
Assert-Contains -Expected $r.Title -Presented $p.searchInAnyField.$_.Titles
}
}
}

function Test_SearchProjectItem_FAIL{

Reset-InvokeCommandMock
Mock_DatabaseRoot

$Owner = "SomeOrg" ; $ProjectNumber = 164
$erroMessage= "Error: Project not found. Check owner and projectnumber"

Mock_DatabaseRoot

MockCall_GitHubOrgProjectWithFields_Null -Owner $owner -ProjectNumber $projectNumber

# Run the command
Start-MyTranscript
$result = Search-ProjectItem -Owner $Owner -ProjectNumber $ProjectNumber -filter "any"
$tt = Stop-MyTranscript

Assert-IsNull -Object $result
Assert-Contains -Expected $erroMessage -Presented $tt
}
9 changes: 7 additions & 2 deletions public/project_item.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,8 @@ function Search-ProjectItem {
[Parameter()][string]$ProjectNumber,
[Parameter()][switch]$IncludeDone,
[Parameter()][switch]$Force,
[Parameter()][switch]$PassThru
[Parameter()][switch]$PassThru,
[Parameter()][switch]$AnyField
)

if([string]::IsNullOrWhiteSpace($Attributes)){
Expand All @@ -116,7 +117,11 @@ function Search-ProjectItem {
# return if #items is null
if ($null -eq $items) { return $null }

$found = $items.Values | Where-Object { Test-ProjectItemIsLikeAnyField -Item $_ -Value $Filter }
if($AnyField){
$found = $items.Values | Where-Object { Test-ProjectItemIsLikeAnyField -Item $_ -Value $Filter }
} else {
$found = $items.Values | Where-Object { $_.Title -like "*$Filter*" -or $_.id -like "*$Filter*" }
}

if($PassThru){
$ret = $found
Expand Down
124 changes: 0 additions & 124 deletions public/project_item_List.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -90,127 +90,3 @@ function Get-ProjectItemList{

} Export-ModuleMember -Function Get-ProjectItemList

function Test-ItemIsDone($Item){

$ret = $Item.Status -eq "Done"

return $ret
}

<#
.SYNOPSIS
Searches for project items by title using wildcard matching.

.DESCRIPTION
Searches for project items where the title contains the specified text using wildcard matching.

.PARAMETER Owner
The owner of the GitHub repository containing the project.

.PARAMETER ProjectNumber
The project number in the repository.

.PARAMETER Title
The text to search for within item titles. Uses wildcard matching (*Title*).

.PARAMETER Force
Forces a refresh of the project data from GitHub.

.OUTPUTS
System.Object[]
Returns an array of project item objects that contain the specified title text.

.EXAMPLE
Search-ProjectItemByTitle -Owner "octocat" -ProjectNumber "1" -Title "bug"
Searches for all items in project 1 that contain "bug" in their title.
#>
function Search-ProjectItemByTitle{
[CmdletBinding()]
param(
[Parameter(Position = 0)] [string]$Owner,
[Parameter(Position = 1)] [string]$ProjectNumber,
[Parameter(Position = 2)] [string]$Title,
[Parameter()][switch]$Force
)

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

$items = Get-ProjectItemList -Owner $Owner -ProjectNumber $ProjectNumber -Force:$Force

# return if #db is null
if($null -eq $items){ return $null}

$ret = $items.Values | Where-Object { $_.Title -like "*$Title*" }

return $ret

} Export-ModuleMember -Function Search-ProjectItemByTitle

<#
.SYNOPSIS
Searches for project items using a filter across multiple fields.

.DESCRIPTION
Searches for project items using a filter that can match across multiple fields including title,
comments, and other project item properties. Returns items formatted for display.

.PARAMETER filter
The search filter to apply across project item fields.

.PARAMETER Owner
The owner of the GitHub repository containing the project.

.PARAMETER ProjectNumber
The project number in the repository.

.PARAMETER Fields
An array of field names to display in the results. If not specified, uses environment default display fields.

.PARAMETER Force
Forces a refresh of the project data from GitHub.

.OUTPUTS
System.Object[]
Returns an array of formatted project item objects that match the filter.

.EXAMPLE
Search-ProjectItem -filter "bug" -Owner "octocat" -ProjectNumber "1"
Searches for all items in project 1 that contain "bug" in any field.

.EXAMPLE
Search-ProjectItem -filter "urgent" -Owner "octocat" -ProjectNumber "1" -Fields @("Title", "Status")
Searches for items containing "urgent" and displays only Title and Status fields.
#>
function Search-ProjectItem{
[CmdletBinding()]
param(
[Parameter(Position = 0)] [string]$Filter,
[Parameter()][string]$Owner,
[Parameter()][string]$ProjectNumber,
[Parameter()][string[]]$Fields,
[Parameter()][switch]$Force
)

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

$Fields = Get-EnvironmentDisplayFields -Fields $Fields

$itemList = Get-ProjectItemList -Owner $Owner -ProjectNumber $ProjectNumber -Force:$Force

if($null -eq $itemList){ return $null}

$itemListValues = $itemList.Values | FilterItems -Filter $Filter

$items = $itemListValues | ConvertToItemDisplay -Fields $Fields

Write-MyHost
"Filter: $Filter" | Write-MyHost
Write-MyHost

return $items

} Export-ModuleMember -Function Search-ProjectItem

# TODO !! - Figure a way to show table always