Tests/Add-PsmData.Tests.ps1

$moduleRoot = Resolve-Path "$PSScriptRoot\.."
$moduleName = Split-Path $moduleRoot -Leaf
Import-Module "$moduleRoot\PSModuleBuilder.psm1"

Describe "Add-PsmData" -Tag "Unit" {
    
    Context 'When in an initialized module folder' {   
        BeforeAll { 
            Write-Host -for DarkGreen "In Describe BeforeAll" 
            
            Write-Verbose "Creating new directory PsmData"
            Remove-ItemIfExists "$PSScriptRoot\TestPester\PsmData"
            New-Item "$PSScriptRoot\TestPester\PsmData" -ItemType Directory -Force
            
            Write-Verbose "Changing location to PsmData"
            Get-ChildItem "$PSScriptRoot\TestPester\PsmData"
            Set-Location "$PSScriptRoot\TestPester\PsmData"
            
            Initialize-Psm -y
        }

        Add-PsmData "some-file.txt" "some text data..."
        Get-ChildItem "$PSScriptRoot\TestPester\PsmData\"
        it "should create data file" {
            Test-Path "$PSScriptRoot\TestPester\PsmData\Data\some-file.txt" | Should -be $true
        }

        $testCases = @(
            @{ file = "jsonfile.json"; data = (@{test = "data"; some = "stuff"} | ConvertTo-Json) }
            @{ file = "csvfile.csv"; data = "top,row,2,1" }
            @{ file = "something.js"; data = "console.log('looky here');" }
        )

        It "Add-PsmData <file> should create file" -TestCases $testCases {
            param ($file, $data)
            Add-PsmData $file $data 
            Test-Path "$PSScriptRoot\TestPester\PsmData\Data\$a" | Should -Be $true
        }
    }

    Context 'When in a non-initialized module folder' {   
        BeforeAll { 
            Write-Host -for DarkGreen "In Describe BeforeAll" 
            Set-Location "$PSScriptRoot\TestPester"
        }
        
        InModuleScope PSModuleBuilder {  
            it "should throw due to missing folders #1" {
                { Add-PsmData "some-file.txt" "some text data..." } | Should -Throw
            }
            it "should throw due to missing folders #2" {
                Mock Confirm-IsInitializedModulePath { return }  
                { Add-PsmData "some-file.txt" "some text data..." } | Should -Throw
            }
            it "should throw due to data folder" {
                Mock Confirm-IsInitializedModulePath { }  
                Mock Import-CliXml -MockWith { @{ RootModule = "SomeModule" } }  
                { Add-PsmData "some-file.txt" "some text data..." } | Should -Throw
            }
        }
    }

    AfterAll {
        Write-Host "Changing back to moduleRoot: $PSScriptRoot"
        Set-Location $PSScriptRoot
    }
}