public/Generate-DockerImageVariants.Tests.ps1
$here = Split-Path -Parent $MyInvocation.MyCommand.Path $sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.' . "$here\$sut" Set-StrictMode -Version latest Describe "Generate-DockerImageVariants" -Tag 'Unit' { function New-GenerateConfig {} function New-GenerationFolder {} function Get-Definition {} function Get-VariantsPrototype {} function Get-FilesPrototype {} function Validate-Object {} function Populate-GenerateConfig {} function New-RepositoryVariantBuildContext {} function New-RepositoryFile {} Context 'Behavior' { It 'Outputs version' { $script:GENERATE_DOCKERIMAGEVARIANTS_VERSION = 'v0.0.0' $version = Generate-DockerImageVariants -Version $version | Should -Match '^v\d+\.\d+\.\d+$' } It 'Initializes the /generate folder' { $projectPath = 'foo' Mock Test-Path -ParameterFilter { $Path -eq $projectPath } { $true } Mock New-GenerationFolder {} Generate-DockerImageVariants -ProjectPath $projectPath -Init Assert-MockCalled New-GenerationFolder -Times 1 } It 'Gets variants definitions' { $projectPath = 'foo' Mock Test-Path -ParameterFilter { $Path -eq $projectPath } { $true } Mock New-GenerateConfig { $GenerateConfig = [ordered]@{ GENERATE_DEFINITIONS_VARIANTS_FILE = 'variants.ps1' GENERATE_DEFINITIONS_FILES_FILE = 'files.ps1' VARIANTS = @() VARIANTS_SHARED = @{} FILES = @() } $GenerateConfig } Mock Test-Path -ParameterFilter { $Path -eq 'files.ps1' } { $false } Mock Get-Definition {} Generate-DockerImageVariants -ProjectPath $projectPath Assert-MockCalled Get-Definition -Times 2 } It 'Gets variants and files definitions' { $projectPath = 'foo' Mock Test-Path -ParameterFilter { $Path -eq $projectPath } { $true } Mock New-GenerateConfig { $GenerateConfig = [ordered]@{ GENERATE_DEFINITIONS_VARIANTS_FILE = 'variants.ps1' GENERATE_DEFINITIONS_FILES_FILE = 'files.ps1' VARIANTS = @() VARIANTS_SHARED = @{} FILES = @() } $GenerateConfig } Mock Test-Path -ParameterFilter { $Path -eq 'files.ps1' } { $true } Mock Get-Definition {} Generate-DockerImageVariants -ProjectPath $projectPath Assert-MockCalled Get-Definition -Times 3 } It 'Gets variants and files definitions' { $projectPath = 'foo' Mock Test-Path -ParameterFilter { $Path -eq $projectPath } { $true } Mock New-GenerateConfig { $GenerateConfig = [ordered]@{ GENERATE_DEFINITIONS_VARIANTS_FILE = 'variants.ps1' GENERATE_DEFINITIONS_FILES_FILE = 'files.ps1' VARIANTS = @() VARIANTS_SHARED = @{} FILES = @() } $GenerateConfig } Mock Test-Path -ParameterFilter { $Path -eq 'files.ps1' } { $true } Mock Get-Definition {} Generate-DockerImageVariants -ProjectPath $projectPath Assert-MockCalled Get-Definition -Times 3 } It 'Validates variants definitions' { $projectPath = 'foo' Mock Test-Path -ParameterFilter { $Path -eq $projectPath } { $true } Mock New-GenerateConfig { $GenerateConfig = [ordered]@{ GENERATE_DEFINITIONS_VARIANTS_FILE = 'variants.ps1' GENERATE_DEFINITIONS_FILES_FILE = 'files.ps1' VARIANTS = @() VARIANTS_SHARED = @{} FILES = @() } $GenerateConfig } Mock Test-Path -ParameterFilter { $Path -eq 'files.ps1' } { $true } Mock Validate-Object{} Generate-DockerImageVariants -ProjectPath $projectPath Assert-MockCalled Validate-Object -Times 1 } It 'Validates variants and files definition' { $projectPath = 'foo' Mock Test-Path -ParameterFilter { $Path -eq $projectPath } { $true } Mock New-GenerateConfig { $GenerateConfig = [ordered]@{ GENERATE_DEFINITIONS_VARIANTS_FILE = 'variants.ps1' GENERATE_DEFINITIONS_FILES_FILE = 'files.ps1' VARIANTS = @() VARIANTS_SHARED = @{} FILES = @( 'foo' ) } $GenerateConfig } Mock Test-Path -ParameterFilter { $Path -eq 'files.ps1' } { $true } Mock Validate-Object {} Generate-DockerImageVariants -ProjectPath $projectPath Assert-MockCalled Validate-Object -Times 2 } It 'Populates variants and files definition' { $projectPath = 'foo' Mock Test-Path -ParameterFilter { $Path -eq $projectPath } { $true } Mock New-GenerateConfig { $GenerateConfig = [ordered]@{ GENERATE_DEFINITIONS_VARIANTS_FILE = 'variants.ps1' GENERATE_DEFINITIONS_FILES_FILE = 'files.ps1' VARIANTS = @() VARIANTS_SHARED = @{} FILES = @( 'foo' ) } $GenerateConfig } Mock Test-Path -ParameterFilter { $Path -eq 'files.ps1' } { $true } Mock Populate-GenerateConfig {} Generate-DockerImageVariants -ProjectPath $projectPath Assert-MockCalled Populate-GenerateConfig -Times 1 } It 'Generates target repository variant build context' { $projectPath = 'foo' Mock Test-Path -ParameterFilter { $Path -eq $projectPath } { $true } Mock New-GenerateConfig { $GenerateConfig = [ordered]@{ GENERATE_DEFINITIONS_VARIANTS_FILE = 'variants.ps1' GENERATE_DEFINITIONS_FILES_FILE = 'files.ps1' VARIANTS = @( @{ tag = 'foo' } ) VARIANTS_SHARED = @{} FILES = @() } $GenerateConfig } Mock New-RepositoryVariantBuildContext {} Generate-DockerImageVariants -ProjectPath $projectPath Assert-MockCalled New-RepositoryVariantBuildContext -Times 1 } It 'Generates target repository files' { $projectPath = 'foo' Mock Test-Path -ParameterFilter { $Path -eq $projectPath } { $true } Mock New-GenerateConfig { $GenerateConfig = [ordered]@{ GENERATE_DEFINITIONS_VARIANTS_FILE = 'variants.ps1' GENERATE_DEFINITIONS_FILES_FILE = 'files.ps1' VARIANTS = @() VARIANTS_SHARED = @{} FILES = @( 'foo' ) } $GenerateConfig } Mock Test-Path -ParameterFilter { $Path -eq 'files.ps1' } { $true } Mock New-RepositoryFile {} Generate-DockerImageVariants -ProjectPath $projectPath Assert-MockCalled New-RepositoryFile -Times 1 } } } |