__tests__/ConvertFromReadmeMD.tests.ps1

Describe "Convertfrom ReadmdMD" {

    BeforeAll {
        Import-Module $PSScriptRoot\..\ConvertFromMarkdown.psm1 -Force
    }

    AfterEach {
        Remove-Item $env:TEMP\manuscript -Recurse -Force -ErrorAction Ignore
        Remove-Item $env:TEMP\lintThis.ps1 -Force -ErrorAction Ignore
    }

    It "Should create a manuscript folder" {
        ConvertFrom-Markdown $PSScriptRoot\README.md $env:TEMP

        Test-Path $env:TEMP\manuscript | Should Be $true
        Test-Path $env:TEMP\lintThis.ps1 | Should Be $true
    }

    It "Should have six files in the manuscript directory" {
        ConvertFrom-Markdown $PSScriptRoot\README.md $env:TEMP

        (Get-ChildItem $env:TEMP\manuscript | Measure-Object ).Count | Should Be 6
    }

    It "Read from the web, should have six files in the manuscript directory" {
        ConvertFrom-Markdown https://raw.githubusercontent.com/dfinke/ConvertFromMarkdown/master/__tests__/README.md $env:TEMP
        (Get-ChildItem $env:TEMP\manuscript | Measure-Object ).Count | Should Be 6
    }

    It "Should have book.md in the manuscript directory" {
        ConvertFrom-Markdown $PSScriptRoot\README.md $env:TEMP

        Test-Path $env:TEMP\manuscript\book.txt | Should Be $true
    }

    It "Should have five chapter files in the manuscript directory" {
        ConvertFrom-Markdown $PSScriptRoot\README.md $env:TEMP

        (Get-ChildItem $env:TEMP\manuscript chapter*.txt | Measure-Object ).Count | Should Be 5
    }

    It "Should create a manuscript folder no code blocks" {
        ConvertFrom-Markdown $PSScriptRoot\READMEOneChapterNoCode.md $env:TEMP

        Test-Path $env:TEMP\manuscript | Should Be $true
        Test-Path $env:TEMP\lintThis.ps1 | Should Be $false
    }

    It "Should create a test code blocks and delete lint file" {
        $actual = Test-PSCodeBlock $PSScriptRoot\READMEGoodCode.md $env:TEMP
        $actual | Should Be "all analyzed - no issues"
        Test-Path $env:TEMP\lintThis.ps1 | Should Be $false
    }

    It "Reads from the web, should create a test code blocks and delete lint file" {
        $actual = Test-PSCodeBlock https://raw.githubusercontent.com/dfinke/ConvertFromMarkdown/master/__tests__/READMEGoodCode.md $env:TEMP
        $actual | Should Be "all analyzed - no issues"
        Test-Path $env:TEMP\lintThis.ps1 | Should Be $false
    }

    It "Should keep lint file" {
        $actual = Test-PSCodeBlock $PSScriptRoot\READMEGoodCode.md $env:TEMP -KeepLintFile
        $actual | Should Be "all analyzed - no issues"

        Test-Path $env:TEMP\lintThis.ps1 | Should Be $true
    }

    It "Should handle errors in the fenced blocks" {
        $actual = Test-PSCodeBlock $PSScriptRoot\READMECodeThatErrors.md $env:TEMP
        $actual | Should Not Be "all analyzed - no issues"

        Test-Path $env:TEMP\lintThis.ps1 | Should Be $true
    }

    It "Should respect excluded blocks" {
        $actual = Test-PSCodeBlock $PSScriptRoot\READMEExcludeCode.md $env:TEMP
        $actual | Should Be "all analyzed - no issues"

        Test-Path $env:TEMP\lintThis.ps1 | Should Be $false
    }

    It "Should fail as a Uri" {
        Test-IsUri .\README.md | Should Be $false
    }

    It "Should be a Uri" {
        Test-IsUri https://raw.githubusercontent.com/dfinke/ConvertFromMarkdown/master/README.md | Should Be $true
    }

    AfterAll {
        Remove-Item $env:TEMP\manuscript -Recurse -Force -ErrorAction Ignore
        Remove-Item $env:TEMP\lintThis.ps1 -Force -ErrorAction Ignore
    }
}

Describe "Test markdown file with no chapters and no code" {
    BeforeAll {
        Import-Module $PSScriptRoot\..\ConvertFromMarkdown.psm1 -Force
    }

    It "Should report no code" {
        $actual = ConvertFrom-Markdown $PSScriptRoot\changelog.md -OutputType PDF

        $actual.Count | Should Be 2

        $actual[0] | Should Be 'no code found'
        $actual[1] | Should Be 'No chapters found'
    }

    AfterAll {
        Remove-Item $env:TEMP\manuscript -Recurse -Force -ErrorAction Ignore
        Remove-Item $env:TEMP\lintThis.ps1 -Force -ErrorAction Ignore
    }

}