functions/Get-ExtensionAvailableTasks.Tests.ps1
|
# <copyright file="Get-ExtensionAvailableTasks.Tests.ps1" company="Endjin Limited"> # Copyright (c) Endjin Limited. All rights reserved. # </copyright> BeforeAll { $here = Split-Path -Parent $PSCommandPath $sut = (Split-Path -Leaf $PSCommandPath) -replace ".Tests" . "$here/$sut" # dot source dependencies . "$here/Get-TasksFileListFromExtension.ps1" Set-StrictMode -Version Latest } Describe 'Get-ExtensionAvailableTasks' { BeforeAll { Mock Write-Warning {} Mock Write-Verbose {} } Context 'Tasks directory does not exist' { BeforeAll { $testPath = Join-Path TestDrive: 'NoTasksDir' New-Item -Path $testPath -ItemType Directory -Force | Out-Null } It 'Should return an empty array and warn' { $result = Get-ExtensionAvailableTasks -ExtensionPath $testPath $result | Should -BeNullOrEmpty Should -Invoke Write-Warning -ParameterFilter { $Message -like "No tasks directory found*" } } } Context 'Tasks directory exists' { BeforeAll { $extensionPath = Join-Path TestDrive: 'WithTasks' $tasksPath = Join-Path $extensionPath 'tasks' New-Item -Path $tasksPath -ItemType Directory -Force | Out-Null # Create dummy task files Set-Content -Path (Join-Path $tasksPath 'valid.tasks.ps1') -Value "task 'ValidTask'" Set-Content -Path (Join-Path $tasksPath '_private.tasks.ps1') -Value "task 'PrivateTask'" Set-Content -Path (Join-Path $tasksPath 'multi.tasks.ps1') -Value "task 'TaskA'; task 'TaskB'" } It 'Should return all public tasks' { $result = Get-ExtensionAvailableTasks -ExtensionPath $extensionPath $result | Should -Contain 'ValidTask' $result | Should -Contain 'TaskA' $result | Should -Contain 'TaskB' $result.Count | Should -Be 3 } It 'Should not return private tasks' { $result = Get-ExtensionAvailableTasks -ExtensionPath $extensionPath $result | Should -Not -Contain 'PrivateTask' } } Context 'Task file with errors' { BeforeAll { $extensionPath = Join-Path TestDrive: 'ErrorTasks' $tasksPath = Join-Path $extensionPath 'tasks' New-Item -Path $tasksPath -ItemType Directory -Force | Out-Null Set-Content -Path (Join-Path $tasksPath 'error.tasks.ps1') -Value "throw 'Oops'" Set-Content -Path (Join-Path $tasksPath 'valid.tasks.ps1') -Value "task 'ValidTask'" } It 'Should suppress errors and continue' { [array]$result = Get-ExtensionAvailableTasks -ExtensionPath $extensionPath $result | Should -Contain 'ValidTask' $result.Count | Should -Be 1 } } } |