LocalToUtc.Tests.ps1
#Requires -Module Pester if ((Get-Module).Name -contains 'LocalToUtc') { Remove-Module -Name LocalToUtc } Import-Module "$PSScriptRoot\LocalToUtc.psm1" Describe 'LocalToUtc' { $testTime = "2017-09-04 08:25:00" It 'Parses ISO8601 properly' { $result = Convert-LocalToUTC -LocalTime $testTime $expected = [System.DateTime]::Parse($testTime) $result.LocalTime | Should Be $expected } It 'Converts local time to UTC time when the local time is defined' { $result = Convert-LocalToUTC -LocalTime $testTime -TimeZone "Eastern Standard Time" $expectedUtc = [System.DateTime]::Parse($testTime).AddHours(4) $expectedLocal = [System.DateTime]::Parse($testTime) $result.UtcTime | Should Be $expectedUtc $result.LocalTime | Should Be $expectedLocal } It 'Treats the current local time as the specified timezone local time' { # UTC is "2017-09-04 08:25:00" # CST is "2017-09-04 03:25:00" -5 # PST is "2017-09-04 01:25:00" -7 Mock -ModuleName LocalToUtc Invoke-GetTimeZone { $cst = Get-TimeZone "Central Standard Time" return $cst } Mock -ModuleName LocalToUtc Get-UtcTime { $utcTime = [System.DateTime]::Parse("2017-09-04 08:25:00") $utc = [System.DateTime]::SpecifyKind($utcTime, [System.DateTimeKind]::Utc) return $utc } Mock -ModuleName LocalToUtc Get-LocalTime { $cstTime = "2017-09-04 03:25:00" $localTime = [System.DateTime]::Parse($cstTime) return $localTime } $utcTime = "2017-09-04 08:25:00" $pstTime = "2017-09-04 01:25:00" # PDT is 7 hours behind UTC (daylight savings) $expectedUtc = [System.DateTime]::Parse($utcTime) $expectedLocal = [System.DateTime]::Parse($pstTime) $result = Convert-LocalToUTC -TimeZone "Pacific Standard Time" $result.UtcTime | Should Be $expectedUtc $result.LocalTime | Should Be $expectedLocal } It 'Adds hours, minutes, seconds correclty' { $result = Convert-LocalToUTC -LocalTime $testTime -AddDays 1 -AddHours 2 -AddMinutes 3 $expected = [System.DateTime]::Parse($testTime).AddDays(1).AddHours(2).AddMinutes(3) $result.LocalTime | Should Be $expected } } Describe 'UtcToLocal' { $testTime= "2017-09-04 08:25:00" It 'Parses ISO8601 properly' { $result = Convert-UTCToLocal -UtcTime $testTime $expected = [System.DateTime]::Parse($testTime) $result.UtcTime | Should Be $expected } It 'Converts UTC time to local time correctly' { $result = Convert-UTCToLocal -UtcTime $testTime -TimeZone "Eastern Standard Time" $expected = [System.DateTime]::Parse($testTime).AddHours(-4) $result.LocalTime | Should Be $expected } It 'Adds hours, minutes, seconds correclty' { $result = Convert-UTCToLocal -UtcTime $testTime -AddDays 1 -AddHours 2 -AddMinutes 3 $expected = [System.DateTime]::Parse($testTime).AddDays(1).AddHours(2).AddMinutes(3) $result.UtcTime | Should Be $expected } } Remove-Module -Name LocalToUtc |