tests/Set-FileTime.Tests.ps1

#requires -Module Pester

Set-StrictMode -Version Latest

Import-Module -Name '..\Aerie.FileUtility.psd1' -Force

Describe "Set-FileTime" {
    InModuleScope "Aerie.FileUtility" {

        Context "CreationTime の変更" {
            It "CreationTime を変更する場合、その他の値は変更されない" {
                $file = New-Item 'TestDrive:\test1.txt'
                $lastWriteTime = $file.LastWriteTime
                $lastAccessTime = $file.LastAccessTime

                $file = Set-FileTime -Path $file -CreationTime '2018-02-03' -PassThru

                if ($IsWindows) {
                    $file.CreationTime | Should -Be ([DateTime]'2018-02-03')
                }

                $file.LastWriteTime | Should -Be $lastWriteTime
                $file.LastAccessTime | Should -Be $lastAccessTime
            }
        }

        Context "LastWriteTime の変更" {
            It "LastWriteTime を変更する場合、その他の値は変更されない" {
                $file = New-Item 'TestDrive:\test1.txt'
                $creationTime = $file.CreationTime
                $lastAccessTime = $file.LastAccessTime

                $file = Set-FileTime -Path $file -LastWriteTime '2018-02-04' -PassThru

                if ($IsWindows) {
                    $file.CreationTime | Should -Be $creationTime
                }
                
                $file.LastWriteTime | Should -Be ([DateTime]'2018-02-04')
                $file.LastAccessTime | Should -Be $lastAccessTime
            }
        }

        Context "LastAccessTime の変更" {
            It "LastAccessTime を変更する場合、その他の値は変更されない" {
                $file = New-Item 'TestDrive:\test1.txt'
                $creationTime = $file.CreationTime
                $lastWriteTime = $file.LastWriteTime

                $file = Set-FileTime -Path $file -LastAccessTime '2018-02-05' -PassThru

                if ($IsWindows) {
                    $file.CreationTime | Should -Be $creationTime
                }

                $file.LastAccessTime | Should -Be ([DateTime]'2018-02-05')
                $file.LastWriteTime | Should -Be $lastWriteTime
            }
        }

        Context "パラメーター制約のテスト" {
            It "3つの時刻パラメーターを何も指定しない場合はエラー" {
                $file = New-Item 'TestDrive:\test1.txt'
                { Set-FileTime -Path $file } | Should -Throw
            }
        }
    }
}