tests/Private/ConvertTo-CloudRecord.Tests.ps1
|
BeforeAll { Import-Module (Resolve-Path (Join-Path $PSScriptRoot '..\..\PSCumulus.psd1')).Path -Force } Describe 'ConvertTo-CloudRecord' { Context 'return type and type name' { It 'returns a PSCustomObject' { InModuleScope PSCumulus { $result = ConvertTo-CloudRecord -Name 'vm01' -Provider Azure $result | Should -BeOfType [pscustomobject] } } It 'stamps the PSCumulus.CloudRecord type name' { InModuleScope PSCumulus { $result = ConvertTo-CloudRecord -Name 'vm01' -Provider Azure $result.PSObject.TypeNames | Should -Contain 'PSCumulus.CloudRecord' } } It 'puts PSCumulus.CloudRecord at position 0' { InModuleScope PSCumulus { $result = ConvertTo-CloudRecord -Name 'vm01' -Provider Azure $result.PSObject.TypeNames[0] | Should -Be 'PSCumulus.CloudRecord' } } } Context 'required properties' { It 'sets Name correctly' { InModuleScope PSCumulus { $result = ConvertTo-CloudRecord -Name 'my-server' -Provider AWS $result.Name | Should -Be 'my-server' } } It 'sets Provider correctly' { InModuleScope PSCumulus { $result = ConvertTo-CloudRecord -Name 'vm' -Provider GCP $result.Provider | Should -Be 'GCP' } } } Context 'optional properties' { It 'sets Region when provided' { InModuleScope PSCumulus { $result = ConvertTo-CloudRecord -Name 'vm' -Provider Azure -Region 'eastus' $result.Region | Should -Be 'eastus' } } It 'sets Status when provided' { InModuleScope PSCumulus { $result = ConvertTo-CloudRecord -Name 'vm' -Provider AWS -Status 'Running' $result.Status | Should -Be 'Running' } } It 'sets Size when provided' { InModuleScope PSCumulus { $result = ConvertTo-CloudRecord -Name 'vm' -Provider Azure -Size 'Standard_D2s_v3' $result.Size | Should -Be 'Standard_D2s_v3' } } It 'sets CreatedAt when provided' { InModuleScope PSCumulus { $ts = [datetime]'2026-01-01T00:00:00Z' $result = ConvertTo-CloudRecord -Name 'vm' -Provider AWS -CreatedAt $ts $result.CreatedAt | Should -Be $ts } } It 'sets Metadata when provided' { InModuleScope PSCumulus { $meta = @{ VpcId = 'vpc-123'; InstanceId = 'i-abc' } $result = ConvertTo-CloudRecord -Name 'vm' -Provider AWS -Metadata $meta $result.Metadata.VpcId | Should -Be 'vpc-123' $result.Metadata.InstanceId | Should -Be 'i-abc' } } It 'defaults Metadata to an empty hashtable' { InModuleScope PSCumulus { $result = ConvertTo-CloudRecord -Name 'vm' -Provider GCP $result.Metadata | Should -BeOfType [hashtable] $result.Metadata.Count | Should -Be 0 } } It 'defaults Tags to an empty hashtable' { InModuleScope PSCumulus { $result = ConvertTo-CloudRecord -Name 'vm' -Provider GCP $result.Tags | Should -BeOfType [hashtable] $result.Tags.Count | Should -Be 0 } } It 'sets Tags when provided' { InModuleScope PSCumulus { $tags = @{ environment = 'prod'; team = 'platform' } $result = ConvertTo-CloudRecord -Name 'vm' -Provider AWS -Tags $tags $result.Tags['environment'] | Should -Be 'prod' $result.Tags['team'] | Should -Be 'platform' } } } Context 'all standard properties are present' { It 'has all seven top-level properties' { InModuleScope PSCumulus { $result = ConvertTo-CloudRecord -Name 'vm' -Provider Azure $result.PSObject.Properties.Name | Should -Contain 'Name' $result.PSObject.Properties.Name | Should -Contain 'Provider' $result.PSObject.Properties.Name | Should -Contain 'Region' $result.PSObject.Properties.Name | Should -Contain 'Status' $result.PSObject.Properties.Name | Should -Contain 'Size' $result.PSObject.Properties.Name | Should -Contain 'CreatedAt' $result.PSObject.Properties.Name | Should -Contain 'Tags' $result.PSObject.Properties.Name | Should -Contain 'Metadata' } } } } |