feat(manifest): initialize manifest
This commit is contained in:
parent
b8221f9abf
commit
8533997b68
3 changed files with 139 additions and 49 deletions
|
|
@ -3,7 +3,6 @@ $ErrorActionPreference = "Stop"
|
||||||
|
|
||||||
BeforeAll {
|
BeforeAll {
|
||||||
Import-Module (Join-Path $PSScriptRoot 'PSConfluencePublisher.psd1') -Force
|
Import-Module (Join-Path $PSScriptRoot 'PSConfluencePublisher.psd1') -Force
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AfterAll {
|
AfterAll {
|
||||||
|
|
@ -13,57 +12,145 @@ AfterAll {
|
||||||
|
|
||||||
Describe 'Get-Manifest' `
|
Describe 'Get-Manifest' `
|
||||||
{
|
{
|
||||||
|
Context 'Parameterized' `
|
||||||
|
{
|
||||||
|
It 'can successfully validate against the schema' `
|
||||||
|
{
|
||||||
|
InModuleScope Manifest `
|
||||||
|
{
|
||||||
|
Mock Get-Content {
|
||||||
|
return '{"pages":{}, "attachments": {}}'
|
||||||
|
}
|
||||||
|
|
||||||
Context 'Parameterized' {
|
#mocking Get-Content, therefore file name can be bogus
|
||||||
|
Get-Manifest 'foobar.x'
|
||||||
It 'throws no exception' {
|
|
||||||
|
|
||||||
InModuleScope Connection {
|
|
||||||
|
|
||||||
Mock Get-PersonalAccessToken {'01234567890123456789'}
|
|
||||||
|
|
||||||
Mock Invoke-WebRequest {
|
|
||||||
return @{
|
|
||||||
'Content' = "{'type': 'known'}"
|
|
||||||
'StatusCode' = 200
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Test-Connection -Host 'confluence.contoso.com'
|
It 'throws on schema mismatch' `
|
||||||
}
|
{
|
||||||
|
InModuleScope Manifest `
|
||||||
|
{
|
||||||
|
Mock Get-Content {
|
||||||
|
return '{"pagges":{}, "attsdachments": {}}'
|
||||||
}
|
}
|
||||||
|
|
||||||
It 'detects anonymous authentication' {
|
#mocking Get-Content, therefore file name can be bogus
|
||||||
|
{Get-Manifest 'foobar.x'} | Should -Throw
|
||||||
InModuleScope Connection {
|
}
|
||||||
|
}
|
||||||
Mock Get-PersonalAccessToken {'01234567890123456789'}
|
}
|
||||||
|
}
|
||||||
Mock Invoke-WebRequest {
|
|
||||||
return @{
|
|
||||||
'Content' = "{'type': 'anonymous'}"
|
Describe 'Set-Manifest' `
|
||||||
'StatusCode' = 200
|
{
|
||||||
}
|
Context 'noBackup' `
|
||||||
}
|
{
|
||||||
|
It 'can successfully validate against the schema' `
|
||||||
{Test-Connection -Host 'confluence.contoso.com'} | Should -Throw
|
{
|
||||||
}
|
InModuleScope Manifest `
|
||||||
}
|
{
|
||||||
|
$mockManifest = @{
|
||||||
It 'detects non 200 status codes' {
|
'pages' = @{}
|
||||||
|
'attachments' = @{}
|
||||||
InModuleScope Connection {
|
}
|
||||||
|
|
||||||
Mock Get-PersonalAccessToken {'01234567890123456789'}
|
Mock Set-Content {
|
||||||
|
Should -Invoke -CommandName 'Set-Content' -Exactly -Times 1
|
||||||
Mock Invoke-WebRequest {
|
|
||||||
return @{
|
$args[1] | Should -Be 'foobar.x'
|
||||||
'Content' = "{'type': 'anonymous'}"
|
|
||||||
'StatusCode' = 500
|
$args[3] | Should -Be ($mockManifest | ConvertTo-JSON)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
#mocking Get-Content, therefore file name can be bogus
|
||||||
{Test-Connection -Host 'confluence.contoso.com'} | Should -Throw
|
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
|
||||||
|
|
||||||
|
$args[1] | Should -Be 'foobar.x'
|
||||||
|
|
||||||
|
$args[3] | 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
|
||||||
|
|
||||||
|
$args[1] | Should -Be 'foo/bar/foobar.x'
|
||||||
|
|
||||||
|
$args[3] | 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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,13 @@ function Get-Manifest
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$raw = Get-Content $File
|
$raw = Get-Content $File | Out-String
|
||||||
}
|
}
|
||||||
|
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
Write-Debug $_
|
||||||
|
|
||||||
$raw = '{"pages":{}, "attachments": {}}'
|
$raw = '{"pages":{}, "attachments": {}}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -66,6 +68,7 @@ function Set-Manifest
|
||||||
|
|
||||||
if ($Backup)
|
if ($Backup)
|
||||||
{
|
{
|
||||||
|
#FIXME: this always assumes the current working directory
|
||||||
Copy-Item -Path $File -Destination "$(Split-Path -Leaf $File).bck"
|
Copy-Item -Path $File -Destination "$(Split-Path -Leaf $File).bck"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue