diff --git a/Test/private/Mock_Today.ps1 b/Test/private/Mock_Today.ps1 index e903445..3955223 100644 --- a/Test/private/Mock_Today.ps1 +++ b/Test/private/Mock_Today.ps1 @@ -1,7 +1,7 @@ function Get-Mock_Today{ $ret = @{ - # today = "2024-06-30" today = "2025-03-15" + past = "2024-02-18" } return $ret diff --git a/Test/public/project/updateprojectrecent.test.ps1 b/Test/public/project/updateprojectrecent.test.ps1 index b0c2a80..fbe6669 100644 --- a/Test/public/project/updateprojectrecent.test.ps1 +++ b/Test/public/project/updateprojectrecent.test.ps1 @@ -36,30 +36,80 @@ function Test_UpdateProjectRecent_FirstCAll_SetRecentUpdate_toToday{ # Verify Set-EnvItem_Last_RecentUpdate_Today was NOT called - env item should be null/empty $envValue = Invoke-PrivateContext { Get-EnvItem_Last_RecentUpdate -Owner "octodemo" -ProjectNumber 700 } - Assert-IsNotNull -Object $envValue Assert-AreEqual -Expected $today -Presented $envValue } -function Test_UpdateProjectRecent_UpdateBasedOn_SetRecentUpdate{ +function Test_UpdateProjectRecent_UpdateBasedOn_FirstTime{ # Arrange + $p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number + $today = (Get-Mock_Today).today - # Cache project - MockCall_GetProject_700 -Cache + # Act - use the mock to run the project full sync to set the last recent update to today + MockCall_GetProject_700 + + $result = Update-ProjectRecent -Owner $owner -ProjectNumber $projectNumber + + ## Assert check that the EnvironmentCache_Last_RecentUpdate_octodemo_700.json is set to today + $envValue = Invoke-PrivateContext { Get-EnvItem_Last_RecentUpdate -Owner "octodemo" -ProjectNumber 700 } + Assert-AreEqual -Expected $today -Presented $envValue + +} + +function Test_UpdateProjectRecent_UpdateBasedOn_SetToToday{ + # Arrange + $p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number + $today = (Get-Mock_Today).today + # Act - use the mock to run the project full sync to set the last recent update to today + MockCall_GetProject_700 -Cache + + ## Assert check that the EnvironmentCache_Last_RecentUpdate_octodemo_700.json is set to today + $envValue = Invoke-PrivateContext { Get-EnvItem_Last_RecentUpdate -Owner "octodemo" -ProjectNumber 700 } + Assert-AreEqual -Expected $today -Presented $envValue + # Reset Mocks to ensure no mocks functions left from caching project Reset_Test_Mock -NoResetDatabase - $p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number - $today = (Get-Mock_Today).today - $query = "updated:<$today" + # Mock the call to GitHubOrgProjectWithFields with the query to get only recently updated items + $query = "updated:>=$today" # not real query just a mock file with some items reply $fileName = $p.getProjectWithQuery.getProjectWithQueryMockFile + # Set te only sync allowed on Update-ProjectRecent + MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -Query $query -FileName $fileName + + # Act second time - call Update-ProjectRecent again to ensure it uses the last recent update date + $result = Update-ProjectRecent -Owner $owner -ProjectNumber $projectNumber + Assert-IsTrue $result +} + +function Test_UpdateProjectRecent_UpdateBasedOn_SetToTehPast{ + # Arrange + $p = Get-Mock_Project_700 ; $owner = $p.owner ; $projectNumber = $p.number + $d = Get-Mock_Today ; $today = $d.today ; $pastDate = $d.past + + # Act - use the mock to run the project full sync to set the last recent update to today + MockCall_GetProject_700 -Cache + + ## Assert check that the EnvironmentCache_Last_RecentUpdate_octodemo_700.json is set to today + Invoke-PrivateContext { Set-EnvItem_Last_RecentUpdate -Owner "octodemo" -ProjectNumber 700 -Value "2024-02-18" } + + + # Reset Mocks to ensure no mocks functions left from caching project + Reset_Test_Mock -NoResetDatabase + # Mock the call to GitHubOrgProjectWithFields with the query to get only recently updated items + $query = "updated:>=$pastDate" + # not real query just a mock file with some items reply + $fileName = $p.getProjectWithQuery.getProjectWithQueryMockFile # Set te only sync allowed on Update-ProjectRecent MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -Query $query -FileName $fileName # Act second time - call Update-ProjectRecent again to ensure it uses the last recent update date $result = Update-ProjectRecent -Owner $owner -ProjectNumber $projectNumber Assert-IsTrue $result + + # ASsert that value has changed to today + $envValue = Invoke-PrivateContext { Get-EnvItem_Last_RecentUpdate -Owner "octodemo" -ProjectNumber 700 } + Assert-AreEqual -Expected $today -Presented $envValue } diff --git a/public/project/updateprojectrecent.ps1 b/public/project/updateprojectrecent.ps1 index 1f1f294..7749855 100644 --- a/public/project/updateprojectrecent.ps1 +++ b/public/project/updateprojectrecent.ps1 @@ -1,3 +1,6 @@ + +$RECENT_QUERY = "updated:>={date}" + function Update-ProjectRecent{ [CmdletBinding()] param( @@ -11,29 +14,35 @@ function Update-ProjectRecent{ } # Get Last update date - $last = Get-EnvItem_Last_RecentUpdate -Owner $Owner -ProjectNumber $ProjectNumber - $query = ($null -eq $last) ? $null : "updated:<$last" + $query = Get-UpdateRecentQuery -Owner $Owner -ProjectNumber $ProjectNumber $ret = Update-Project -Owner $Owner -ProjectNumber $ProjectNumber -SkipItems:$SkipItems -Query $Query - if($result){ + if($ret){ Set-EnvItem_Last_RecentUpdate_Today -Owner $Owner -ProjectNumber $ProjectNumber } return $ret } Export-ModuleMember -Function Update-ProjectRecent -function Set-EnvItem_Last_RecentUpdate_Today{ +function Get-UpdateRecentQuery{ [CmdletBinding()] param( - [Parameter(Mandatory)][string]$Owner, - [Parameter(Mandatory)][int]$ProjectNumber + [Parameter()][string]$Owner, + [Parameter()][int]$ProjectNumber ) - $now = Get-DateToday - Set-EnvItem -Name "EnvironmentCache_Last_RecentUpdate_$($Owner)_$($ProjectNumber)" -Value $now + $last = Get-EnvItem_Last_RecentUpdate -Owner $Owner -ProjectNumber $ProjectNumber -} + # If no last update return no filter to update all + if ($null -eq $last){ + return "" + } + + $ret = $RECENT_QUERY -replace "{date}", $last + + return $ret +} Export-ModuleMember -Function Get-UpdateRecentQuery function Get-EnvItem_Last_RecentUpdate{ [CmdletBinding()] @@ -44,5 +53,34 @@ function Get-EnvItem_Last_RecentUpdate{ $last = Get-EnvItem -Name "EnvironmentCache_Last_RecentUpdate_$($Owner)_$($ProjectNumber)" + Write-MyDebug "EnvItem_Last_RecentUpdate" "Last recent update for $Owner/$ProjectNumber is $last" + return $last +} + +function Set-EnvItem_Last_RecentUpdate{ + [CmdletBinding()] + param( + [Parameter(Mandatory)][string]$Owner, + [Parameter(Mandatory)][int]$ProjectNumber, + [Parameter(Mandatory)][string]$Value + ) + + Set-EnvItem -Name "EnvironmentCache_Last_RecentUpdate_$($Owner)_$($ProjectNumber)" -Value $Value + + Write-MyDebug "EnvItem_Last_RecentUpdate" "Set last recent update for $Owner/$ProjectNumber to $Value" + +} + +function Set-EnvItem_Last_RecentUpdate_Today{ + [CmdletBinding()] + param( + [Parameter(Mandatory)][string]$Owner, + [Parameter(Mandatory)][int]$ProjectNumber + ) + + $now = Get-DateToday + + Set-EnvItem_Last_RecentUpdate -Owner $Owner -ProjectNumber $ProjectNumber -Value $now + } \ No newline at end of file