lib/actions/base/ReleaseRemediationAction.Tests.ps1
|
BeforeAll { . "$PSScriptRoot/../../StateModel.ps1" . "$PSScriptRoot/../../Logging.ps1" . "$PSScriptRoot/../../GitHubApi.ps1" . "$PSScriptRoot/RemediationAction.ps1" . "$PSScriptRoot/ReleaseRemediationAction.ps1" # Load a concrete implementation to test base class methods . "$PSScriptRoot/../releases/CreateReleaseAction/CreateReleaseAction.ps1" } Describe "ReleaseRemediationAction Base Class" { BeforeEach { $script:state = [RepositoryState]::new() $script:state.RepoOwner = "test-owner" $script:state.RepoName = "test-repo" $script:state.ApiUrl = "https://api.github.com" $script:state.ServerUrl = "https://github.com" $script:state.Token = "test-token" } Context "Constructor" { It "Should set TagName property" { # Use CreateReleaseAction as a concrete implementation $action = [CreateReleaseAction]::new("v1.0.0", $true) $action.TagName | Should -Be "v1.0.0" $action.Version | Should -Be "v1.0.0" } } Context "Issue Status Helpers" { It "Should mark issue as unfixable when Execute encounters 422 error" { # Create issue in state $issue = [ValidationIssue]::new("missing_release", "error", "Release missing") $issue.Version = "v1.0.0" $issue.Status = "pending" $script:state.Issues = @($issue) # Mock the API to return an unfixable error Mock New-GitHubRelease { @{ Success = $false; Unfixable = $true } } $action = [CreateReleaseAction]::new("v1.0.0", $true) $result = $action.Execute($script:state) $result | Should -Be $false $issue.Status | Should -Be "unfixable" } It "Should not return manual commands when issue is unfixable" { # Create unfixable issue $issue = [ValidationIssue]::new("missing_release", "error", "Release missing") $issue.Version = "v1.0.0" $issue.Status = "unfixable" $script:state.Issues = @($issue) $action = [CreateReleaseAction]::new("v1.0.0", $true) $commands = $action.GetManualCommands($script:state) $commands | Should -HaveCount 0 } It "Should return manual commands when issue is not unfixable" { # Create pending issue $issue = [ValidationIssue]::new("missing_release", "error", "Release missing") $issue.Version = "v1.0.0" $issue.Status = "pending" $script:state.Issues = @($issue) $action = [CreateReleaseAction]::new("v1.0.0", $true) $commands = $action.GetManualCommands($script:state) $commands | Should -Not -BeNullOrEmpty } } } |