psconfluencepublisher/tests/PageMeta.Tests.ps1
2023-08-14 05:10:57 +02:00

185 lines
4.3 KiB
PowerShell
Executable file

#!/usr/bin/env pwsh
$ErrorActionPreference = "Stop"
BeforeAll {
Import-Module "$PSScriptRoot/../src/PSConfluencePublisher.psd1"
}
Describe 'Get-PageMeta' `
{
BeforeAll `
{
Mock -ModuleName 'PageMeta' Get-PersonalAccessToken {
'012345678901234567890'
}
}
Context 'default' `
{
It 'uses index' `
{
$mockPageMeta = @{
'Title' = 'foobar'
'Id' = '0123456789'
}
$mockManifest = @(
@{},
$mockPageMeta
)
$mockIndex = @{
'foobar' = 1
}
$meta = Get-PageMeta `
-Host 'foobar' `
-Title 'foobar' `
-Space 'foobar' `
-Index $mockIndex `
-Manifest $mockManifest
$meta | Should -Be $mockPageMeta
}
It 'returns cache when page id present' `
{
$mockPageMeta = @{
'Title' = 'foobar'
'Id' = '0123456789'
}
$mockManifest = @(
$mockPageMeta
)
$meta = Get-PageMeta `
-Host 'foobar' `
-Title 'foobar' `
-Space 'foobar' `
-Manifest $mockManifest
$meta | Should -Be $mockPageMeta
}
}
Context 'locally cached' `
{
BeforeAll `
{
$mockManifest = @(
@{
'Title' = 'page0'
'Id' = 'id0'
},
@{
'Title' = 'page1'
'Id' = 'id1'
},
@{
'Title' = 'page2'
'Id' = 'id2'
}
)
}
It 'from parameter' `
{
$meta = Get-PageMeta `
-Host 'foobar' `
-Space 'foobar' `
-Manifest $mockManifest
$meta.Count | Should -Be 3
}
It 'from pipeline' `
{
$meta = $mockManifest | Get-PageMeta `
-Host 'foobar' `
-Space 'foobar'
$meta.Count | Should -Be 3
}
}
Context 'locally cached' `
{
BeforeAll `
{
$mockManifest = @(
@{
'Title' = 'page0'
'Id' = 'id0'
},
@{
'Title' = 'page1'
},
@{
'Title' = 'page2'
'Id' = 'id2'
}
)
Mock -ModuleName 'PageMeta' Invoke-WebRequest {
@{
'Content' = '{"results": [{"id": "remoteid", "_expandable": {"version": 1}}]}'
}
}
}
It 'only gets remote if necesary' `
{
$meta = Get-PageMeta `
-Host 'foobar' `
-Space 'foobar' `
-Manifest $mockManifest
Should -Invoke -CommandName Invoke-WebRequest `
-ModuleName 'PageMeta' `
-Exactly `
-Times 1
$meta.Count | Should -Be 3
$meta[0].Id | Should -Be 'id0'
$meta[0].Version | Should -Be $null
$meta[1].Id | Should -Be 'remoteid'
$meta[1].Version | Should -Be 1
}
It 'forcefully gets remote' `
{
$meta = Get-PageMeta `
-Host 'foobar' `
-Space 'foobar' `
-Force `
-Manifest $mockManifest
Should -Invoke -CommandName Invoke-WebRequest `
-ModuleName 'PageMeta' `
-Exactly `
-Times 3
$meta.Count | Should -Be 3
$meta[0].Id | Should -Be 'remoteid'
$meta[0].Version | Should -Be 1
$meta[1].Id | Should -Be 'remoteid'
$meta[1].Version | Should -Be 1
$meta[2].Id | Should -Be 'remoteid'
$meta[2].Version | Should -Be 1
}
}
}