private/Populate-GenerateConfig.Tests.ps1
$here = Split-Path -Parent $MyInvocation.MyCommand.Path $sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.' . "$here\$sut" Describe "Populate-GenerateConfig" -Tag 'Unit' { BeforeEach { function New-Clone { param ( [object]$InputObject ) $InputObject } } Context 'Behavior' { It 'Populates variant' { $GenerateConfig = @{ REPOSITORY_BASE_DIR = '/repo' VARIANTS = @( @{ tag = 'foo' } ) VARIANTS_SHARED = @{} } $GenerateConfigAfter = Populate-GenerateConfig -GenerateConfig $GenerateConfig $GenerateConfigAfter['VARIANTS'][0]['tag'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['tag_as_latest'] | Should -Be $false $GenerateConfigAfter['VARIANTS'][0]['tag_without_distro'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['components'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir_rel'].Replace('\', '/') | Should -Be 'variants/foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir'].Replace('\', '/') | Should -Be '/repo/variants/foo' } It 'Populates variant with specified distro (behind)' { $GenerateConfig = @{ REPOSITORY_BASE_DIR = '/repo' VARIANTS = @( @{ tag = 'foo-alpine' distro = 'alpine' } ) VARIANTS_SHARED = @{} } $GenerateConfigAfter = Populate-GenerateConfig -GenerateConfig $GenerateConfig $GenerateConfigAfter['VARIANTS'][0]['tag'] | Should -Be 'foo-alpine' $GenerateConfigAfter['VARIANTS'][0]['distro'] | Should -Be 'alpine' $GenerateConfigAfter['VARIANTS'][0]['tag_as_latest'] | Should -Be $false $GenerateConfigAfter['VARIANTS'][0]['tag_without_distro'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['components'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir_rel'].Replace('\', '/') | Should -Be 'variants/foo-alpine' $GenerateConfigAfter['VARIANTS'][0]['build_dir'].Replace('\', '/') | Should -Be '/repo/variants/foo-alpine' } It 'Populates variant with specified distro (middle)' { $GenerateConfig = @{ REPOSITORY_BASE_DIR = '/repo' VARIANTS = @( @{ tag = 'foo-alpine-bar' distro = 'alpine' } ) VARIANTS_SHARED = @{} } $GenerateConfigAfter = Populate-GenerateConfig -GenerateConfig $GenerateConfig $GenerateConfigAfter['VARIANTS'][0]['tag'] | Should -Be 'foo-alpine-bar' $GenerateConfigAfter['VARIANTS'][0]['distro'] | Should -Be 'alpine' $GenerateConfigAfter['VARIANTS'][0]['tag_as_latest'] | Should -Be $false $GenerateConfigAfter['VARIANTS'][0]['tag_without_distro'] | Should -Be 'foo-bar' $GenerateConfigAfter['VARIANTS'][0]['components'] | Should -Be 'foo', 'bar' $GenerateConfigAfter['VARIANTS'][0]['build_dir_rel'].Replace('\', '/') | Should -Be 'variants/foo-alpine-bar' $GenerateConfigAfter['VARIANTS'][0]['build_dir'].Replace('\', '/') | Should -Be '/repo/variants/foo-alpine-bar' } It 'Populates variant with specified distro (front)' { $GenerateConfig = @{ REPOSITORY_BASE_DIR = '/repo' VARIANTS = @( @{ tag = 'alpine-foo' distro = 'alpine' } ) VARIANTS_SHARED = @{} } $GenerateConfigAfter = Populate-GenerateConfig -GenerateConfig $GenerateConfig $GenerateConfigAfter['VARIANTS'][0]['tag'] | Should -Be 'alpine-foo' $GenerateConfigAfter['VARIANTS'][0]['distro'] | Should -Be 'alpine' $GenerateConfigAfter['VARIANTS'][0]['tag_as_latest'] | Should -Be $false $GenerateConfigAfter['VARIANTS'][0]['tag_without_distro'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['components'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir_rel'].Replace('\', '/') | Should -Be 'variants/alpine-foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir'].Replace('\', '/') | Should -Be '/repo/variants/alpine-foo' } It 'Populates variant with tag_as_latest' { $GenerateConfig = @{ REPOSITORY_BASE_DIR = '/repo' VARIANTS = @( @{ tag = 'foo' tag_as_latest = $true } ) VARIANTS_SHARED = @{} } $GenerateConfigAfter = Populate-GenerateConfig -GenerateConfig $GenerateConfig $GenerateConfigAfter['VARIANTS'][0]['tag'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['tag_as_latest'] | Should -Be $true $GenerateConfigAfter['VARIANTS'][0]['tag_without_distro'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['components'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir_rel'].Replace('\', '/') | Should -Be 'variants/foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir'].Replace('\', '/') | Should -Be '/repo/variants/foo' } It 'Populates variant with specified components' { $GenerateConfig = @{ REPOSITORY_BASE_DIR = '/repo' VARIANTS = @( @{ tag = 'foo' components = @( 'john' 'doe' ) } ) VARIANTS_SHARED = @{} } $GenerateConfigAfter = Populate-GenerateConfig -GenerateConfig $GenerateConfig $GenerateConfigAfter['VARIANTS'][0]['tag'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['tag_as_latest'] | Should -Be $false $GenerateConfigAfter['VARIANTS'][0]['tag_without_distro'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['components'] | Should -Be 'john', 'doe' $GenerateConfigAfter['VARIANTS'][0]['build_dir_rel'].Replace('\', '/') | Should -Be 'variants/foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir'].Replace('\', '/') | Should -Be '/repo/variants/foo' } It 'Populates variant with specified distro and components' { $GenerateConfig = @{ REPOSITORY_BASE_DIR = '/repo' VARIANTS = @( @{ tag = 'foo-alpine' distro = 'alpine' components = @( 'john' 'doe' ) } ) VARIANTS_SHARED = @{} } $GenerateConfigAfter = Populate-GenerateConfig -GenerateConfig $GenerateConfig $GenerateConfigAfter['VARIANTS'][0]['tag'] | Should -Be 'foo-alpine' $GenerateConfigAfter['VARIANTS'][0]['distro'] | Should -Be 'alpine' $GenerateConfigAfter['VARIANTS'][0]['tag_as_latest'] | Should -Be $false $GenerateConfigAfter['VARIANTS'][0]['tag_without_distro'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['components'] | Should -Be 'john', 'doe' $GenerateConfigAfter['VARIANTS'][0]['build_dir_rel'].Replace('\', '/') | Should -Be 'variants/foo-alpine' $GenerateConfigAfter['VARIANTS'][0]['build_dir'].Replace('\', '/') | Should -Be '/repo/variants/foo-alpine' } It 'Populates variant definition with buildContextFiles' { $GenerateConfig = @{ REPOSITORY_BASE_DIR = '/repo' GENERATE_TEMPLATES_DIR = '/repo/path/to/templates' VARIANTS = @( @{ tag = 'foo' buildContextFiles = @{ templates = @{ Dockerfile = @{ common = $true includeHeader = $true includeFooter = $true passes = @( @{ variables = @{ john = 'doe' } } @{ variables = @{ john = 'doe' } generatedFileNameOverride = 'Dockerfile2' } ) } } copies = @( '/bar' ) } } ) VARIANTS_SHARED = @{} } $GenerateConfigAfter = Populate-GenerateConfig -GenerateConfig $GenerateConfig $GenerateConfigAfter['VARIANTS'][0]['tag'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['tag_as_latest'] | Should -Be $false $GenerateConfigAfter['VARIANTS'][0]['tag_without_distro'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['components'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir_rel'].Replace('\', '/') | Should -Be 'variants/foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir'].Replace('\', '/') | Should -Be '/repo/variants/foo' $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['common'] | Should -Be $true $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['includeHeader'] | Should -Be $true $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['includeFooter'] | Should -Be $true $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['passes'][0]['variables']['john'] | Should -Be 'doe' $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['passes'][0]['file'].Replace('\', '/') | Should -Be '/repo/variants/foo/Dockerfile' $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['passes'][1]['variables']['john'] | Should -Be 'doe' $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['passes'][1]['file'].Replace('\', '/') | Should -Be '/repo/variants/foo/Dockerfile2' $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['templateDirectory'].Replace('\', '/') | Should -Be '/repo/path/to/templates' $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['subTemplates'] | Should -Be @() $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['copies'][0].Replace('\', '/') | Should -Be '/repo/bar' } It 'Populates variant definition with shared definition' { $GenerateConfig = @{ REPOSITORY_BASE_DIR = '/repo' GENERATE_TEMPLATES_DIR = '/repo/path/to/templates' VARIANTS = @( @{ tag = 'foo' } ) VARIANTS_SHARED = @{ buildContextFiles = @{ templates = @{ Dockerfile = @{ common = $true includeHeader = $true includeFooter = $true passes = @( @{ # These variables will be available in $PASS_VARIABLES hashtable when this template is processed variables = @{ john = 'doe' } } ) } } copies = @( '/bar' ) } } } $GenerateConfigAfter = Populate-GenerateConfig -GenerateConfig $GenerateConfig $GenerateConfigAfter['VARIANTS'][0]['tag'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['tag_as_latest'] | Should -Be $false $GenerateConfigAfter['VARIANTS'][0]['tag_without_distro'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['components'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir_rel'].Replace('\', '/') | Should -Be 'variants/foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir'].Replace('\', '/') | Should -Be '/repo/variants/foo' $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['common'] | Should -Be $true $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['includeHeader'] | Should -Be $true $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['includeFooter'] | Should -Be $true $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['passes'][0]['variables']['john'] | Should -Be 'doe' $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['copies'][0].Replace('\', '/') | Should -Be '/repo/bar' } It 'Prioritises variant definition over shared definition' { $GenerateConfig = @{ REPOSITORY_BASE_DIR = '/repo' GENERATE_TEMPLATES_DIR = '/repo/path/to/templates' VARIANTS = @( @{ tag = 'foo' buildContextFiles = @{ templates = @{ Dockerfile = @{ common = $false includeHeader = $false includeFooter = $false passes = @( @{ # These variables will be available in $PASS_VARIABLES hashtable when this template is processed variables = @{ john = '' } } ) } } copies = @( '/bar' ) } } ) VARIANTS_SHARED = @{ buildContextFiles = @{ templates = @{ Dockerfile = @{ common = $true includeHeader = $true includeFooter = $true passes = @( @{ # These variables will be available in $PASS_VARIABLES hashtable when this template is processed variables = @{ john = 'doe' } } ) } } copies = @( '/baz' ) } } } $GenerateConfigAfter = Populate-GenerateConfig -GenerateConfig $GenerateConfig $GenerateConfigAfter['VARIANTS'][0]['tag'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['tag_as_latest'] | Should -Be $false $GenerateConfigAfter['VARIANTS'][0]['tag_without_distro'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['components'] | Should -Be 'foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir_rel'].Replace('\', '/') | Should -Be 'variants/foo' $GenerateConfigAfter['VARIANTS'][0]['build_dir'].Replace('\', '/') | Should -Be '/repo/variants/foo' $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['common'] | Should -Be $false $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['includeHeader'] | Should -Be $false $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['includeFooter'] | Should -Be $false $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['templates']['Dockerfile']['passes'][0]['variables']['john'] | Should -Be '' $GenerateConfigAfter['VARIANTS'][0]['buildContextFiles']['copies'][0].Replace('\', '/') | Should -Be '/repo/bar' } It 'Populates variant with files' { $GenerateConfig = @{ REPOSITORY_BASE_DIR = '/repo' GENERATE_TEMPLATES_DIR = '/repo/path/to/templates' VARIANTS = @() FILES = @( 'foo' ) } $GenerateConfigAfter = Populate-GenerateConfig -GenerateConfig $GenerateConfig $GenerateConfigAfter['FILES'][0]['file'].Replace('\', '/') | Should -Be '/repo/foo' $GenerateConfigAfter['FILES'][0]['templateFile'].Replace('\', '/') | Should -Be '/repo/path/to/templates/foo.ps1' } } } |