Well, this reminds us to refactor the testing suite... This currently is pretty dangerous, since the scopes are mixed up and there is no proper isolation between test blocks.
157 lines
4.3 KiB
PowerShell
Executable file
157 lines
4.3 KiB
PowerShell
Executable file
#!/usr/bin/env pwsh
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
BeforeAll {
|
|
Import-Module (Join-Path $PSScriptRoot 'PSConfluencePublisher.psd1') -Force
|
|
}
|
|
|
|
AfterAll {
|
|
|
|
}
|
|
|
|
|
|
Describe 'Get-Manifest' `
|
|
{
|
|
Context 'Parameterized' `
|
|
{
|
|
It 'can successfully validate against the schema' `
|
|
{
|
|
InModuleScope Manifest `
|
|
{
|
|
Mock Get-Content {
|
|
return '{"pages":{}, "attachments": {}}'
|
|
}
|
|
|
|
#mocking Get-Content, therefore file name can be bogus
|
|
Get-Manifest 'foobar.x'
|
|
}
|
|
}
|
|
|
|
It 'throws on schema mismatch' `
|
|
{
|
|
InModuleScope Manifest `
|
|
{
|
|
Mock Get-Content {
|
|
return '{"pagges":{}, "attsdachments": {}}'
|
|
}
|
|
|
|
#mocking Get-Content, therefore file name can be bogus
|
|
{Get-Manifest 'foobar.x'} | Should -Throw
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
Describe 'Set-Manifest' `
|
|
{
|
|
Context 'noBackup' `
|
|
{
|
|
It 'can successfully validate against the schema' `
|
|
{
|
|
InModuleScope Manifest `
|
|
{
|
|
$mockManifest = @{
|
|
'pages' = @{}
|
|
'attachments' = @{}
|
|
}
|
|
|
|
Mock Set-Content {
|
|
Should -Invoke -CommandName 'Set-Content' -Exactly -Times 1
|
|
|
|
$Path | Should -Be 'foobar.x'
|
|
|
|
$Value | Should -Be ($mockManifest | ConvertTo-JSON)
|
|
}
|
|
|
|
#mocking Get-Content, therefore file name can be bogus
|
|
Set-Manifest `
|
|
-Manifest $mockManifest `
|
|
-File 'foobar.x'
|
|
}
|
|
}
|
|
|
|
It 'declines setting invalid schema' `
|
|
{
|
|
InModuleScope Manifest `
|
|
{
|
|
$mockManifest = @{
|
|
'pagges' = @{}
|
|
'attachments' = @{}
|
|
}
|
|
|
|
#mocking Get-Content, therefore file name can be bogus
|
|
{
|
|
Set-Manifest `
|
|
-Manifest $mockManifest `
|
|
-File 'foobar.x'
|
|
} | Should -Throw
|
|
}
|
|
}
|
|
}
|
|
|
|
Context 'Backup' `
|
|
{
|
|
It 'creates a backup when it should' `
|
|
{
|
|
InModuleScope Manifest `
|
|
{
|
|
$mockManifest = @{
|
|
'pages' = @{}
|
|
'attachments' = @{}
|
|
}
|
|
|
|
Mock Set-Content {
|
|
#FIXME: the scope is completely wrong
|
|
Should -Invoke -CommandName 'Set-Content' -Exactly -Times 1
|
|
}
|
|
|
|
Mock Copy-Item {
|
|
#FIXME: the scope is completely wrong
|
|
Should -Invoke -CommandName 'Copy-Item' -Exactly -Times 1 `
|
|
|
|
$Path | Should -Be 'foobar.x'
|
|
|
|
$Destination | Should -Be 'foobar.x.bck'
|
|
}
|
|
|
|
#mocking Get-Content, therefore file name can be bogus
|
|
Set-Manifest `
|
|
-Manifest $mockManifest `
|
|
-File 'foobar.x' `
|
|
-Backup $true
|
|
}
|
|
}
|
|
|
|
It 'handles paths outside of the current working directory correctly' `
|
|
{
|
|
InModuleScope Manifest `
|
|
{
|
|
$mockManifest = @{
|
|
'pages' = @{}
|
|
'attachments' = @{}
|
|
}
|
|
|
|
Mock Set-Content {
|
|
#FIXME: the scope is completely wrong
|
|
Should -Invoke -CommandName 'Set-Content' -Exactly -Times 1
|
|
}
|
|
|
|
Mock Copy-Item {
|
|
#FIXME: the scope is completely wrong
|
|
Should -Invoke -CommandName 'Copy-Item' -Exactly -Times 1 `
|
|
|
|
$Path | Should -Be 'foo/bar/foobar.x'
|
|
|
|
$Destination | Should -Be 'foo/bar/foobar.x.bck'
|
|
}
|
|
|
|
#mocking Get-Content, therefore file name can be bogus
|
|
Set-Manifest `
|
|
-Manifest $mockManifest `
|
|
-File 'foo/bar/foobar.x' `
|
|
-Backup $true
|
|
}
|
|
}
|
|
}
|
|
}
|