Skip to content

[Issue]: Add Pester tests for linting scripts (5 scripts) #197

@WilliamBerryiii

Description

@WilliamBerryiii

Summary

Create unit tests for the core linting PowerShell scripts that perform markdown, link, and PSScriptAnalyzer validation.

Parent Issue: #190

Requirements

Create test files for each linting script:

  • scripts/tests/linting/Invoke-LinkLanguageCheck.Tests.ps1
  • scripts/tests/linting/Invoke-PSScriptAnalyzer.Tests.ps1
  • scripts/tests/linting/Link-Lang-Check.Tests.ps1
  • scripts/tests/linting/Markdown-Link-Check.Tests.ps1
  • scripts/tests/linting/Validate-MarkdownFrontmatter.Tests.ps1

Implementation Details

Scripts Under Test

Script Purpose Key Functions
Invoke-LinkLanguageCheck.ps1 Link language validation Parameter handling, output formatting
Invoke-PSScriptAnalyzer.ps1 PowerShell analysis PSScriptAnalyzer invocation, result processing
Link-Lang-Check.ps1 Link validation URL checking, result aggregation
Markdown-Link-Check.ps1 Markdown link checking File discovery, link extraction
Validate-MarkdownFrontmatter.ps1 Frontmatter validation YAML parsing, schema validation

Test Pattern

BeforeAll {
    # Use dot-sourcing pattern for scripts
    . $PSScriptRoot/../../linting/ScriptName.ps1
}

Describe 'Script-Name.ps1' {
    Context 'Parameter Validation' {
        It 'Should accept valid parameters' {
            # Test parameter binding
        }
        
        It 'Should reject invalid parameters' {
            { Invoke-Script -InvalidParam 'value' } | Should -Throw
        }
    }

    Context 'Core Functionality' {
        BeforeEach {
            # Mock external dependencies
            Mock Get-ChildItem { return @() }
            Mock Invoke-ExternalTool { return $null }
        }

        It 'Should process files correctly' {
            # Test main logic
        }
    }

    Context 'Output Formatting' {
        It 'Should produce valid JSON output' {
            $result = Invoke-Script -OutputFormat Json
            { $result | ConvertFrom-Json } | Should -Not -Throw
        }
    }
}

Shared Mocks Usage

BeforeAll {
    # Import shared test utilities
    . $PSScriptRoot/../TestHelpers/SharedMocks.ps1
    
    # Get mock file system
    $mockFiles = Get-MockMarkdownFiles
}

Acceptance Criteria

  • Test file exists for each of the 5 linting scripts
  • Parameter validation tests for each script
  • Core logic tests with mocked dependencies
  • Output format tests (JSON, console)
  • Error handling tests
  • All tests pass in CI environment

Dependencies

Estimated Effort

4-6 hours (5 scripts)


Additional Context

Target Scripts

  • scripts/linting/Invoke-LinkLanguageCheck.ps1
  • scripts/linting/Invoke-PSScriptAnalyzer.ps1
  • scripts/linting/Link-Lang-Check.ps1
  • scripts/linting/Markdown-Link-Check.ps1
  • scripts/linting/Validate-MarkdownFrontmatter.ps1

Testing Priority

  1. Validate-MarkdownFrontmatter.ps1 (complex schema logic)
  2. Invoke-PSScriptAnalyzer.ps1 (integrates with external tool)
  3. Remaining scripts

Related Issues

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions