mirror of
https://github.com/PowerShell/PSDscResources
synced 2026-06-21 13:45:29 +00:00
6626 lines
353 KiB
PowerShell
6626 lines
353 KiB
PowerShell
$errorActionPreference = 'Stop'
|
|
Set-StrictMode -Version 'Latest'
|
|
|
|
Describe 'Archive Unit Tests' {
|
|
BeforeAll {
|
|
# Import CommonTestHelper for Enter-DscResourceTestEnvironment, Exit-DscResourceTestEnvironment
|
|
$testsFolderFilePath = Split-Path $PSScriptRoot -Parent
|
|
$testHelperFolderFilePath = Join-Path -Path $testsFolderFilePath -ChildPath 'TestHelpers'
|
|
$commonTestHelperFilePath = Join-Path -Path $testHelperFolderFilePath -ChildPath 'CommonTestHelper.psm1'
|
|
Import-Module -Name $commonTestHelperFilePath
|
|
|
|
$script:testEnvironment = Enter-DscResourceTestEnvironment `
|
|
-DscResourceModuleName 'PSDscResources' `
|
|
-DscResourceName 'MSFT_Archive' `
|
|
-TestType 'Unit'
|
|
}
|
|
|
|
AfterAll {
|
|
$null = Exit-DscResourceTestEnvironment -TestEnvironment $script:testEnvironment
|
|
}
|
|
|
|
InModuleScope 'MSFT_Archive' {
|
|
$script:validChecksumValues = @( 'SHA-1', 'SHA-256', 'SHA-512', 'CreatedDate', 'ModifiedDate' )
|
|
|
|
$testUsername = 'TestUsername'
|
|
$testPassword = 'TestPassword'
|
|
$secureTestPassword = ConvertTo-SecureString -String $testPassword -AsPlainText -Force
|
|
|
|
$script:testCredential = New-Object -TypeName 'System.Management.Automation.PSCredential' -ArgumentList @( $testUsername, $secureTestPassword )
|
|
|
|
$script:testGuid = [System.Guid]::NewGuid()
|
|
|
|
Describe 'Get-TargetResource' {
|
|
$testPSDrive = @{
|
|
Root = 'Test PSDrive Name'
|
|
}
|
|
Mock -CommandName 'Mount-PSDriveWithCredential' -MockWith { return $testPSDrive }
|
|
|
|
$testInvalidArchivePathErrorMessage = 'Test invalid archive path error message'
|
|
Mock -CommandName 'Assert-PathExistsAsLeaf' -MockWith { throw $testInvalidArchivePathErrorMessage }
|
|
|
|
$testInvalidDestinationErrorMessage = 'Test invalid destination error message'
|
|
Mock -CommandName 'Assert-DestinationDoesNotExistAsFile' -MockWith { throw $testInvalidDestinationErrorMessage }
|
|
|
|
Mock -CommandName 'Test-Path' -MockWith { return $false }
|
|
Mock -CommandName 'Test-ArchiveExistsAtDestination' -MockWith { return $false }
|
|
Mock -CommandName 'Remove-PSDrive' -MockWith { }
|
|
|
|
Context 'When checksum specified and Validate not specified' {
|
|
$getTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Checksum = 'ModifiedDate'
|
|
}
|
|
|
|
It 'Should throw an error for Checksum specified while Validate is false' {
|
|
$errorMessage = $script:localizedData.ChecksumSpecifiedAndValidateFalse -f $getTargetResourceParameters.Checksum, $getTargetResourceParameters.Path, $getTargetResourceParameters.Destination
|
|
{ $null = Get-TargetResource @getTargetResourceParameters } | Should -Throw -ExpectedMessage $errorMessage
|
|
}
|
|
}
|
|
|
|
Context 'When invalid archive path specified' {
|
|
$getTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should throw an error for invalid archive path' {
|
|
{ $null = Get-TargetResource @getTargetResourceParameters } | Should -Throw -ExpectedMessage $testInvalidArchivePathErrorMessage
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Assert-PathExistsAsLeaf' -MockWith { }
|
|
|
|
Context 'When invalid destination specified' {
|
|
$getTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should throw an error for invalid destination' {
|
|
{ $null = Get-TargetResource @getTargetResourceParameters } | Should -Throw -ExpectedMessage $testInvalidDestinationErrorMessage
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Assert-DestinationDoesNotExistAsFile' -MockWith { }
|
|
|
|
Context 'When valid archive path and destination specified and destination does not exist' {
|
|
$getTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Get-TargetResource @getTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $getTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $getTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $getTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the specified archive exists at the specified destination' {
|
|
Assert-MockCalled -CommandName 'Test-ArchiveExistsAtDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
$getTargetResourceResult = Get-TargetResource @getTargetResourceParameters
|
|
|
|
It 'Should return a Hashtable' {
|
|
$getTargetResourceResult -is [System.Collections.Hashtable] | Should -BeTrue
|
|
}
|
|
|
|
It 'Should return a Hashtable with 3 properties' {
|
|
$getTargetResourceResult.Keys.Count | Should -Be 3
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Path property as the specified path' {
|
|
$getTargetResourceResult.Path | Should -Be $getTargetResourceParameters.Path
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Destination property as the specified destination' {
|
|
$getTargetResourceResult.Destination | Should -Be $getTargetResourceParameters.Destination
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Ensure property as Absent' {
|
|
$getTargetResourceResult.Ensure | Should -Be 'Absent'
|
|
}
|
|
}
|
|
|
|
Context 'When valid archive path and destination specified, destination does not exist, Validate specified as true, and Checksum specified' {
|
|
$getTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Validate = $true
|
|
Checksum = 'ModifiedDate'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Get-TargetResource @getTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $getTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $getTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $getTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the specified archive exists at the specified destination' {
|
|
Assert-MockCalled -CommandName 'Test-ArchiveExistsAtDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
$getTargetResourceResult = Get-TargetResource @getTargetResourceParameters
|
|
|
|
It 'Should return a Hashtable' {
|
|
$getTargetResourceResult -is [System.Collections.Hashtable] | Should -BeTrue
|
|
}
|
|
|
|
It 'Should return a Hashtable with 3 properties' {
|
|
$getTargetResourceResult.Keys.Count | Should -Be 3
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Path property as the specified path' {
|
|
$getTargetResourceResult.Path | Should -Be $getTargetResourceParameters.Path
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Destination property as the specified destination' {
|
|
$getTargetResourceResult.Destination | Should -Be $getTargetResourceParameters.Destination
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Ensure property as Absent' {
|
|
$getTargetResourceResult.Ensure | Should -Be 'Absent'
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-Path' -MockWith { return $true }
|
|
|
|
Context 'When valid archive path and destination specified, destination exists, and archive is not expanded at destination' {
|
|
$getTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Get-TargetResource @getTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $getTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $getTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $getTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified archive exists at the specified destination' {
|
|
$testArchiveExistsAtDestinationParameterFilter = {
|
|
$archiveSourcePathParameterCorrect = $ArchiveSourcePath -eq $getTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $getTargetResourceParameters.Destination
|
|
|
|
return $archiveSourcePathParameterCorrect -and $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveExistsAtDestination' -ParameterFilter $testArchiveExistsAtDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
$getTargetResourceResult = Get-TargetResource @getTargetResourceParameters
|
|
|
|
It 'Should return a Hashtable' {
|
|
$getTargetResourceResult -is [System.Collections.Hashtable] | Should -BeTrue
|
|
}
|
|
|
|
It 'Should return a Hashtable with 3 properties' {
|
|
$getTargetResourceResult.Keys.Count | Should -Be 3
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Path property as the specified path' {
|
|
$getTargetResourceResult.Path | Should -Be $getTargetResourceParameters.Path
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Destination property as the specified destination' {
|
|
$getTargetResourceResult.Destination | Should -Be $getTargetResourceParameters.Destination
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Ensure property as Absent' {
|
|
$getTargetResourceResult.Ensure | Should -Be 'Absent'
|
|
}
|
|
}
|
|
|
|
Context 'When valid archive path and destination specified, destination exists, archive is not expanded at destination, Validate specified as true, and Checksum specified' {
|
|
$getTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Validate = $true
|
|
Checksum = 'CreatedDate'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Get-TargetResource @getTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $getTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $getTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $getTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified archive exists at the specified destination' {
|
|
$testArchiveExistsAtDestinationParameterFilter = {
|
|
$archiveSourcePathParameterCorrect = $ArchiveSourcePath -eq $getTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $getTargetResourceParameters.Destination
|
|
$checksumParameterCorrect = $Checksum -eq $getTargetResourceParameters.Checksum
|
|
|
|
return $archiveSourcePathParameterCorrect -and $destinationParameterCorrect -and $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveExistsAtDestination' -ParameterFilter $testArchiveExistsAtDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
$getTargetResourceResult = Get-TargetResource @getTargetResourceParameters
|
|
|
|
It 'Should return a Hashtable' {
|
|
$getTargetResourceResult -is [System.Collections.Hashtable] | Should -BeTrue
|
|
}
|
|
|
|
It 'Should return a Hashtable with 3 properties' {
|
|
$getTargetResourceResult.Keys.Count | Should -Be 3
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Path property as the specified path' {
|
|
$getTargetResourceResult.Path | Should -Be $getTargetResourceParameters.Path
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Destination property as the specified destination' {
|
|
$getTargetResourceResult.Destination | Should -Be $getTargetResourceParameters.Destination
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Ensure property as Absent' {
|
|
$getTargetResourceResult.Ensure | Should -Be 'Absent'
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-ArchiveExistsAtDestination' -MockWith { return $true }
|
|
|
|
Context 'When valid archive path and destination specified, destination exists, and archive is expanded at destination' {
|
|
$getTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Get-TargetResource @getTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $getTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $getTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $getTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified archive exists at the specified destination' {
|
|
$testArchiveExistsAtDestinationParameterFilter = {
|
|
$archiveSourcePathParameterCorrect = $ArchiveSourcePath -eq $getTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $getTargetResourceParameters.Destination
|
|
|
|
return $archiveSourcePathParameterCorrect -and $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveExistsAtDestination' -ParameterFilter $testArchiveExistsAtDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
$getTargetResourceResult = Get-TargetResource @getTargetResourceParameters
|
|
|
|
It 'Should return a Hashtable' {
|
|
$getTargetResourceResult -is [System.Collections.Hashtable] | Should -BeTrue
|
|
}
|
|
|
|
It 'Should return a Hashtable with 3 properties' {
|
|
$getTargetResourceResult.Keys.Count | Should -Be 3
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Path property as the specified path' {
|
|
$getTargetResourceResult.Path | Should -Be $getTargetResourceParameters.Path
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Destination property as the specified destination' {
|
|
$getTargetResourceResult.Destination | Should -Be $getTargetResourceParameters.Destination
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Ensure property as Present' {
|
|
$getTargetResourceResult.Ensure | Should -Be 'Present'
|
|
}
|
|
}
|
|
|
|
Context 'When valid archive path and destination specified, destination exists, archive is expanded at destination, Validate specified as true, and Checksum specified' {
|
|
$getTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Validate = $true
|
|
Checksum = 'CreatedDate'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Get-TargetResource @getTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $getTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $getTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $getTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified archive exists at the specified destination' {
|
|
$testArchiveExistsAtDestinationParameterFilter = {
|
|
$archiveSourcePathParameterCorrect = $ArchiveSourcePath -eq $getTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $getTargetResourceParameters.Destination
|
|
$checksumParameterCorrect = $Checksum -eq $getTargetResourceParameters.Checksum
|
|
|
|
return $archiveSourcePathParameterCorrect -and $destinationParameterCorrect -and $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveExistsAtDestination' -ParameterFilter $testArchiveExistsAtDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
$getTargetResourceResult = Get-TargetResource @getTargetResourceParameters
|
|
|
|
It 'Should return a Hashtable' {
|
|
$getTargetResourceResult -is [System.Collections.Hashtable] | Should -BeTrue
|
|
}
|
|
|
|
It 'Should return a Hashtable with 3 properties' {
|
|
$getTargetResourceResult.Keys.Count | Should -Be 3
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Path property as the specified path' {
|
|
$getTargetResourceResult.Path | Should -Be $getTargetResourceParameters.Path
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Destination property as the specified destination' {
|
|
$getTargetResourceResult.Destination | Should -Be $getTargetResourceParameters.Destination
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Ensure property as Present' {
|
|
$getTargetResourceResult.Ensure | Should -Be 'Present'
|
|
}
|
|
}
|
|
|
|
Context 'When valid archive path and destination specified, destination exists, archive is expanded at destination, and credential specified' {
|
|
$getTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Credential = $script:testCredential
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Get-TargetResource @getTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should mount a PSDrive' {
|
|
$mountPSDriveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $getTargetResourceParameters.Path
|
|
$credentialParameterCorrect = $null -eq (Compare-Object -ReferenceObject $getTargetResourceParameters.Credential -DifferenceObject $Credential)
|
|
|
|
return $pathParameterCorrect -and $credentialParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -ParameterFilter $mountPSDriveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $getTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $getTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $getTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified archive exists at the specified destination' {
|
|
$testArchiveExistsAtDestinationParameterFilter = {
|
|
$archiveSourcePathParameterCorrect = $ArchiveSourcePath -eq $getTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $getTargetResourceParameters.Destination
|
|
|
|
return $archiveSourcePathParameterCorrect -and $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveExistsAtDestination' -ParameterFilter $testArchiveExistsAtDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the mounted PSDrive' {
|
|
$removePSDriveParameterFilter = {
|
|
$nameParameterCorrect = $null -eq (Compare-Object -ReferenceObject $testPSDrive -DifferenceObject $Name)
|
|
$forceParameterCorrect = $Force -eq $true
|
|
|
|
return $nameParameterCorrect -and $forceParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -ParameterFilter $removePSDriveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
$getTargetResourceResult = Get-TargetResource @getTargetResourceParameters
|
|
|
|
It 'Should return a Hashtable' {
|
|
$getTargetResourceResult -is [System.Collections.Hashtable] | Should -BeTrue
|
|
}
|
|
|
|
It 'Should return a Hashtable with 3 properties' {
|
|
$getTargetResourceResult.Keys.Count | Should -Be 3
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Path property as the specified path' {
|
|
$getTargetResourceResult.Path | Should -Be $getTargetResourceParameters.Path
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Destination property as the specified destination' {
|
|
$getTargetResourceResult.Destination | Should -Be $getTargetResourceParameters.Destination
|
|
}
|
|
|
|
It 'Should return a Hashtable with the Ensure property as Present' {
|
|
$getTargetResourceResult.Ensure | Should -Be 'Present'
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Set-TargetResource' {
|
|
$testPSDrive = @{
|
|
Root = 'Test PSDrive Name'
|
|
}
|
|
Mock -CommandName 'Mount-PSDriveWithCredential' -MockWith { return $testPSDrive }
|
|
|
|
$testInvalidArchivePathErrorMessage = 'Test invalid archive path error message'
|
|
Mock -CommandName 'Assert-PathExistsAsLeaf' -MockWith { throw $testInvalidArchivePathErrorMessage }
|
|
|
|
$testInvalidDestinationErrorMessage = 'Test invalid destination error message'
|
|
Mock -CommandName 'Assert-DestinationDoesNotExistAsFile' -MockWith { throw $testInvalidDestinationErrorMessage }
|
|
|
|
Mock -CommandName 'Test-Path' -MockWith { return $false }
|
|
Mock -CommandName 'Expand-ArchiveToDestination' -MockWith { }
|
|
Mock -CommandName 'Remove-ArchiveFromDestination' -MockWith { }
|
|
Mock -CommandName 'New-Item' -MockWith { }
|
|
Mock -CommandName 'Remove-PSDrive' -MockWith { }
|
|
|
|
Context 'When checksum specified and Validate not specified' {
|
|
$setTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Checksum = 'ModifiedDate'
|
|
}
|
|
|
|
It 'Should throw an error for Checksum specified while Validate is false' {
|
|
$errorMessage = $script:localizedData.ChecksumSpecifiedAndValidateFalse -f $setTargetResourceParameters.Checksum, $setTargetResourceParameters.Path, $setTargetResourceParameters.Destination
|
|
{ Set-TargetResource @setTargetResourceParameters } | Should -Throw -ExpectedMessage $errorMessage
|
|
}
|
|
}
|
|
|
|
Context 'When invalid archive path specified' {
|
|
$setTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should throw an error for invalid archive path' {
|
|
{ Set-TargetResource @setTargetResourceParameters } | Should -Throw -ExpectedMessage $testInvalidArchivePathErrorMessage
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Assert-PathExistsAsLeaf' -MockWith { }
|
|
|
|
Context 'When invalid destination specified' {
|
|
$setTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should throw an error for invalid destination' {
|
|
{ Set-TargetResource @setTargetResourceParameters } | Should -Throw -ExpectedMessage $testInvalidDestinationErrorMessage
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Assert-DestinationDoesNotExistAsFile' -MockWith { }
|
|
|
|
Context 'When valid archive path and destination specified, destination does not exist, and Ensure specified as Present' {
|
|
$setTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Present'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Set-TargetResource @setTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $setTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $setTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should create a new directory at the specified destination' {
|
|
$newItemParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $setTargetResourceParameters.Destination
|
|
$itemTypeParameterCorrect = $ItemType -eq 'Directory'
|
|
|
|
return $pathParameterCorrect -and $itemTypeParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'New-Item' -ParameterFilter $newItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should expand the archive to the specified destination' {
|
|
$expandArchiveToDestinationParameterFilter = {
|
|
$archiveSourcePathParameterCorrect = $ArchiveSourcePath -eq $setTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
$forceParameterCorrect = $Force -eq $false
|
|
|
|
return $archiveSourcePathParameterCorrect -and $destinationParameterCorrect -and $forceParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Expand-ArchiveToDestination' -ParameterFilter $expandArchiveToDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove the content of the opened archive from the directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'Remove-ArchiveFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return' {
|
|
Set-TargetResource @setTargetResourceParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Context 'When valid archive path and destination specified, destination does not exist, and Ensure specified as Absent' {
|
|
$setTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Absent'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Set-TargetResource @setTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $setTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $setTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create a new directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to expand the archive to the specified destination' {
|
|
Assert-MockCalled -CommandName 'Expand-ArchiveToDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove the content of the opened archive from the directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'Remove-ArchiveFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return' {
|
|
Set-TargetResource @setTargetResourceParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Context 'When valid archive path and destination specified, destination does not exist, Ensure specified as Present, Validate specified as true, and Checksum specified' {
|
|
$setTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Present'
|
|
Validate = $true
|
|
Checksum = 'ModifiedDate'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Set-TargetResource @setTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $setTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $setTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should create a new directory at the specified destination' {
|
|
$newItemParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $setTargetResourceParameters.Destination
|
|
$itemTypeParameterCorrect = $ItemType -eq 'Directory'
|
|
|
|
return $pathParameterCorrect -and $itemTypeParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'New-Item' -ParameterFilter $newItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should expand the archive to the specified destination based on the specified Checksum method' {
|
|
$expandArchiveToDestinationParameterFilter = {
|
|
$archiveSourcePathParameterCorrect = $ArchiveSourcePath -eq $setTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
$checksumParameterCorrect = $Checksum -eq $setTargetResourceParameters.Checksum
|
|
$forceParameterCorrect = $Force -eq $false
|
|
|
|
return $archiveSourcePathParameterCorrect -and $destinationParameterCorrect -and $checksumParameterCorrect -and $forceParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Expand-ArchiveToDestination' -ParameterFilter $expandArchiveToDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove the content of the opened archive from the directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'Remove-ArchiveFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return' {
|
|
Set-TargetResource @setTargetResourceParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Context 'When valid archive path and destination specified, destination does not exist, Ensure specified as Absent, Validate specified as true, and Checksum specified' {
|
|
$setTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Absent'
|
|
Validate = $true
|
|
Checksum = 'SHA-256'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Set-TargetResource @setTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $setTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $setTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create a new directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to expand the archive to the specified destination' {
|
|
Assert-MockCalled -CommandName 'Expand-ArchiveToDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove the content of the opened archive from the directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'Remove-ArchiveFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return' {
|
|
Set-TargetResource @setTargetResourceParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-Path' -MockWith { return $true }
|
|
|
|
Context 'When valid archive path and destination specified, destination exists, and Ensure specified as Present' {
|
|
$setTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Present'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Set-TargetResource @setTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $setTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $setTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create a new directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should expand the archive to the specified destination' {
|
|
$expandArchiveToDestinationParameterFilter = {
|
|
$archiveSourcePathParameterCorrect = $ArchiveSourcePath -eq $setTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
$forceParameterCorrect = $Force -eq $false
|
|
|
|
return $archiveSourcePathParameterCorrect -and $destinationParameterCorrect -and $forceParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Expand-ArchiveToDestination' -ParameterFilter $expandArchiveToDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove the content of the opened archive from the directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'Remove-ArchiveFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return' {
|
|
Set-TargetResource @setTargetResourceParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Context 'When valid archive path and destination specified, destination exists, and Ensure specified as Absent' {
|
|
$setTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Absent'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Set-TargetResource @setTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $setTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $setTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create a new directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to expand the archive to the specified destination' {
|
|
Assert-MockCalled -CommandName 'Expand-ArchiveToDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the content of the opened archive from the directory at the specified destination' {
|
|
$removeArchiveFromDestinationParameterFilter = {
|
|
$archiveSourcePathParameterCorrect = $ArchiveSourcePath -eq $setTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
|
|
return $archiveSourcePathParameterCorrect -and $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-ArchiveFromDestination' -ParameterFilter $removeArchiveFromDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return' {
|
|
Set-TargetResource @setTargetResourceParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Context 'When valid archive path and destination specified, destination exists, Ensure specified as Present, Validate specified as true, and Checksum specified' {
|
|
$setTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Present'
|
|
Validate = $true
|
|
Checksum = 'CreatedDate'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Set-TargetResource @setTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $setTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $setTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create a new directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should expand the archive to the specified destination based on the specified Checksum method' {
|
|
$expandArchiveToDestinationParameterFilter = {
|
|
$archiveSourcePathParameterCorrect = $ArchiveSourcePath -eq $setTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
$checksumParameterCorrect = $Checksum -eq $setTargetResourceParameters.Checksum
|
|
$forceParameterCorrect = $Force -eq $false
|
|
|
|
return $archiveSourcePathParameterCorrect -and $destinationParameterCorrect -and $checksumParameterCorrect -and $forceParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Expand-ArchiveToDestination' -ParameterFilter $expandArchiveToDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove the content of the opened archive from the directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'Remove-ArchiveFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return' {
|
|
Set-TargetResource @setTargetResourceParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Context 'When valid archive path and destination specified, destination exists, Ensure specified as Absent, Validate specified as true, and Checksum specified' {
|
|
$setTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Absent'
|
|
Validate = $true
|
|
Checksum = 'SHA-512'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Set-TargetResource @setTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should not attempt to mount a PSDrive' {
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $setTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $setTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create a new directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to expand the archive to the specified destination' {
|
|
Assert-MockCalled -CommandName 'Expand-ArchiveToDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the content of the opened archive from the directory at the specified destination' {
|
|
$removeArchiveFromDestinationParameterFilter = {
|
|
$archiveSourcePathParameterCorrect = $ArchiveSourcePath -eq $setTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
$checksumParameterCorrect = $Checksum -eq $setTargetResourceParameters.Checksum
|
|
|
|
return $archiveSourcePathParameterCorrect -and $destinationParameterCorrect -and $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-ArchiveFromDestination' -ParameterFilter $removeArchiveFromDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove a mounted PSDrive' {
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return' {
|
|
Set-TargetResource @setTargetResourceParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Context 'When valid archive path and destination specified, destination exists, and credential specified' {
|
|
$setTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Credential = $script:testCredential
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Set-TargetResource @setTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should mount a PSDrive' {
|
|
$mountPSDriveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $setTargetResourceParameters.Path
|
|
$credentialParameterCorrect = $null -eq (Compare-Object -ReferenceObject $setTargetResourceParameters.Credential -DifferenceObject $Credential)
|
|
|
|
return $pathParameterCorrect -and $credentialParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Mount-PSDriveWithCredential' -ParameterFilter $mountPSDriveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified archive path is valid' {
|
|
$assertPathExistsAsLeafParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $setTargetResourceParameters.Path
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-PathExistsAsLeaf' -ParameterFilter $assertPathExistsAsLeafParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should assert that the specified destination is valid' {
|
|
$assertDestinationDoesNotExistAsFileParameterFilter = {
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
return $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Assert-DestinationDoesNotExistAsFile' -ParameterFilter $assertDestinationDoesNotExistAsFileParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified destination exists' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $setTargetResourceParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create a new directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should expand the archive to the specified destination' {
|
|
$expandArchiveToDestinationParameterFilter = {
|
|
$archiveSourcePathParameterCorrect = $ArchiveSourcePath -eq $setTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $setTargetResourceParameters.Destination
|
|
$forceParameterCorrect = $Force -eq $false
|
|
|
|
return $archiveSourcePathParameterCorrect -and $destinationParameterCorrect -and $forceParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Expand-ArchiveToDestination' -ParameterFilter $expandArchiveToDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove the content of the opened archive from the directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'Remove-ArchiveFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the mounted PSDrive' {
|
|
$removePSDriveParameterFilter = {
|
|
$nameParameterCorrect = $null -eq (Compare-Object -ReferenceObject $testPSDrive -DifferenceObject $Name)
|
|
$forceParameterCorrect = $Force -eq $true
|
|
|
|
return $nameParameterCorrect -and $forceParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-PSDrive' -ParameterFilter $removePSDriveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return' {
|
|
Set-TargetResource @setTargetResourceParameters | Should -Be $null
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Test-TargetResource' {
|
|
Mock -CommandName 'Get-TargetResource' -MockWith { return @{ Ensure = 'Absent' } }
|
|
|
|
Context 'When archive with specified path is not expanded at the specified destination and Ensure is specified as Present' {
|
|
$testTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Present'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-TargetResource @testTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve the state of the specified archive' {
|
|
$getTargetResourceParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $testTargetResourceParameters.Destination
|
|
|
|
return $pathParameterCorrect -and $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-TargetResource' -ParameterFilter $getTargetResourceParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-TargetResource @testTargetResourceParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Context 'When archive with specified path is not expanded at the specified destination and Ensure is specified as Absent' {
|
|
$testTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Absent'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-TargetResource @testTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve the state of the specified archive' {
|
|
$getTargetResourceParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $testTargetResourceParameters.Destination
|
|
|
|
return $pathParameterCorrect -and $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-TargetResource' -ParameterFilter $getTargetResourceParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return true' {
|
|
Test-TargetResource @testTargetResourceParameters | Should -BeTrue
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-TargetResource' -MockWith { return @{ Ensure = 'Present' } }
|
|
|
|
Context 'When archive with specified path is expanded at the specified destination and Ensure is specified as Present' {
|
|
$testTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Present'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-TargetResource @testTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve the state of the specified archive' {
|
|
$getTargetResourceParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $testTargetResourceParameters.Destination
|
|
|
|
return $pathParameterCorrect -and $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-TargetResource' -ParameterFilter $getTargetResourceParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return true' {
|
|
Test-TargetResource @testTargetResourceParameters | Should -BeTrue
|
|
}
|
|
}
|
|
|
|
Context 'When archive with specified path is expanded at the specified destination and Ensure is specified as Absent' {
|
|
$testTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Absent'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-TargetResource @testTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve the state of the specified archive' {
|
|
$getTargetResourceParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $testTargetResourceParameters.Destination
|
|
|
|
return $pathParameterCorrect -and $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-TargetResource' -ParameterFilter $getTargetResourceParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-TargetResource @testTargetResourceParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Context 'When archive with specified path is expanded at the specified destination, Validate and Checksum specified, and Ensure is specified as Present' {
|
|
$testTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Present'
|
|
Validate = $true
|
|
Checksum = 'SHA-256'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-TargetResource @testTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve the state of the specified archive' {
|
|
$getTargetResourceParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $testTargetResourceParameters.Destination
|
|
$validateParameterCorrect = $Validate -eq $testTargetResourceParameters.Validate
|
|
$checksumParameterCorrect = $Checksum -eq $testTargetResourceParameters.Checksum
|
|
|
|
return $pathParameterCorrect -and $destinationParameterCorrect -and $validateParameterCorrect -and $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-TargetResource' -ParameterFilter $getTargetResourceParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return true' {
|
|
Test-TargetResource @testTargetResourceParameters | Should -BeTrue
|
|
}
|
|
}
|
|
|
|
Context 'When archive with specified path is expanded at the specified destination, Credential specified, and Ensure is specified as Present' {
|
|
$testTargetResourceParameters = @{
|
|
Path = 'TestPath'
|
|
Destination = 'TestDestination'
|
|
Ensure = 'Present'
|
|
Credential = $script:testCredential
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-TargetResource @testTargetResourceParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve the state of the specified archive' {
|
|
$getTargetResourceParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testTargetResourceParameters.Path
|
|
$destinationParameterCorrect = $Destination -eq $testTargetResourceParameters.Destination
|
|
$credentialParameterCorrect = $null -eq (Compare-Object -ReferenceObject $testTargetResourceParameters.Credential -DifferenceObject $Credential)
|
|
|
|
return $pathParameterCorrect -and $destinationParameterCorrect -and $credentialParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-TargetResource' -ParameterFilter $getTargetResourceParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return true' {
|
|
Test-TargetResource @testTargetResourceParameters | Should -BeTrue
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Mount-PSDriveWithCredential' {
|
|
Mock -CommandName 'Test-Path' -MockWith { return $true }
|
|
Mock -CommandName 'New-Guid' -MockWith { return $script:testGuid }
|
|
Mock -CommandName 'Invoke-NewPSDrive' -MockWith { throw 'Test error from New-PSDrive' }
|
|
|
|
Context 'When specified path is already accessible' {
|
|
$mountPSDriveWithCredentialParameters = @{
|
|
Path = 'TestPath'
|
|
Credential = $script:testCredential
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Mount-PSDriveWithCredential @mountPSDriveWithCredentialParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should test if the given path is already accessible' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $mountPSDriveWithCredentialParameters.Path
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create a new guid' {
|
|
Assert-MockCalled -CommandName 'New-Guid' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create a new PSDrive' {
|
|
Assert-MockCalled -CommandName 'Invoke-NewPSDrive' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
$mountPSDriveWithCredentialResult = Mount-PSDriveWithCredential @mountPSDriveWithCredentialParameters
|
|
|
|
It 'Should return null' {
|
|
$mountPSDriveWithCredentialResult | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-Path' -MockWith { return $false }
|
|
|
|
Context 'When specified path is not accessible, path contains a backslash but does not end with a backslash, and new PSDrive creation fails' {
|
|
$mountPSDriveWithCredentialParameters = @{
|
|
Path = 'Test\Path'
|
|
Credential = $script:testCredential
|
|
}
|
|
|
|
It 'Should throw an error for failed PSDrive creation' {
|
|
$expectedPath = $mountPSDriveWithCredentialParameters.Path.Substring(0, $mountPSDriveWithCredentialParameters.Path.IndexOf('\'))
|
|
$expectedErrorMessage = $script:localizedData.ErrorCreatingPSDrive -f $expectedPath, $mountPSDriveWithCredentialParameters.Credential.UserName
|
|
{ $null = Mount-PSDriveWithCredential @mountPSDriveWithCredentialParameters } | Should -Throw -ExpectedMessage $expectedErrorMessage
|
|
}
|
|
}
|
|
|
|
$expectedPSDrive = New-MockObject -Type 'System.Management.Automation.PSDriveInfo'
|
|
Mock -CommandName 'Invoke-NewPSDrive' -MockWith { return $expectedPSDrive }
|
|
|
|
Context 'When specified path is not accessible, path contains a backslash but does not end with a backslash, and new PSDrive creation succeeds' {
|
|
$mountPSDriveWithCredentialParameters = @{
|
|
Path = 'Test\Path'
|
|
Credential = $script:testCredential
|
|
}
|
|
|
|
$expectedPSDrivePath = $mountPSDriveWithCredentialParameters.Path.Substring(0, $mountPSDriveWithCredentialParameters.Path.IndexOf('\'))
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Mount-PSDriveWithCredential @mountPSDriveWithCredentialParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should test if the given path is already accessible' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $mountPSDriveWithCredentialParameters.Path
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should create a new guid' {
|
|
Assert-MockCalled -CommandName 'New-Guid' -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should create a new PSDrive' {
|
|
$newPSDriveParameterFilter = {
|
|
$nameParameterCorrect = $Parameters.Name -eq $script:testGuid
|
|
$psProviderParameterCorrect = $Parameters.PSProvider -eq 'FileSystem'
|
|
$rootParameterCorrect = $Parameters.Root -eq $expectedPSDrivePath
|
|
$scopeParameterCorrect = $Parameters.Scope -eq 'Script'
|
|
$credentialParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mountPSDriveWithCredentialParameters.Credential -DifferenceObject $Parameters.Credential)
|
|
|
|
return $nameParameterCorrect -and $psProviderParameterCorrect -and $rootParameterCorrect -and $scopeParameterCorrect -and $credentialParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Invoke-NewPSDrive' -ParameterFilter $newPSDriveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
$mountPSDriveWithCredentialResult = Mount-PSDriveWithCredential @mountPSDriveWithCredentialParameters
|
|
|
|
It 'Should return the PSDrive outputted from New-PSDrive' {
|
|
$mountPSDriveWithCredentialResult | Should -Be $expectedPSDrive
|
|
}
|
|
}
|
|
|
|
Context 'When specified path is not accessible, path ends with a backslash, and new PSDrive creation succeeds' {
|
|
$mountPSDriveWithCredentialParameters = @{
|
|
Path = 'TestPath\'
|
|
Credential = $script:testCredential
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Mount-PSDriveWithCredential @mountPSDriveWithCredentialParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should test if the given path is already accessible' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $mountPSDriveWithCredentialParameters.Path
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should create a new guid' {
|
|
Assert-MockCalled -CommandName 'New-Guid' -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should create a new PSDrive' {
|
|
$newPSDriveParameterFilter = {
|
|
$nameParameterCorrect = $Parameters.Name -eq $script:testGuid
|
|
$psProviderParameterCorrect = $Parameters.PSProvider -eq 'FileSystem'
|
|
$rootParameterCorrect = $Parameters.Root -eq $mountPSDriveWithCredentialParameters.Path
|
|
$scopeParameterCorrect = $Parameters.Scope -eq 'Script'
|
|
$credentialParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mountPSDriveWithCredentialParameters.Credential -DifferenceObject $Parameters.Credential)
|
|
|
|
return $nameParameterCorrect -and $psProviderParameterCorrect -and $rootParameterCorrect -and $scopeParameterCorrect -and $credentialParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Invoke-NewPSDrive' -ParameterFilter $newPSDriveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
$mountPSDriveWithCredentialResult = Mount-PSDriveWithCredential @mountPSDriveWithCredentialParameters
|
|
|
|
It 'Should return the PSDrive outputted from New-PSDrive' {
|
|
$mountPSDriveWithCredentialResult | Should -Be $expectedPSDrive
|
|
}
|
|
}
|
|
|
|
Context 'When specified path is not accessible and path does not contain a backslash' {
|
|
$mountPSDriveWithCredentialParameters = @{
|
|
Path = 'TestPath'
|
|
Credential = $script:testCredential
|
|
}
|
|
|
|
It 'Should throw an error for an invalid path' {
|
|
$expectedErrorMessage = $script:localizedData.PathDoesNotContainValidPSDriveRoot -f $mountPSDriveWithCredentialParameters.Path
|
|
{ $null = Mount-PSDriveWithCredential @mountPSDriveWithCredentialParameters } | Should -Throw -ExpectedMessage $expectedErrorMessage
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Assert-PathExistsAsLeaf' {
|
|
Mock -CommandName 'Test-Path' -MockWith { return $true }
|
|
|
|
Context 'When path exists as a leaf' {
|
|
$assertPathExistsAsLeafParameters = @{
|
|
Path = 'TestPath'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Assert-PathExistsAsLeaf @assertPathExistsAsLeafParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should test if path exists as a leaf' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $assertPathExistsAsLeafParameters.Path
|
|
$pathTypeParameterCorrect = $PathType -eq 'Leaf'
|
|
|
|
return $literalPathParameterCorrect -and $pathTypeParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-Path' -MockWith { return $false }
|
|
|
|
Context 'When path does not exist' {
|
|
$assertPathExistsAsLeafParameters = @{
|
|
Path = 'TestPath'
|
|
}
|
|
|
|
It 'Should throw an error for non-existent path' {
|
|
$expectedErrorMessage = $script:localizedData.PathDoesNotExistAsLeaf -f $assertPathExistsAsLeafParameters.Path
|
|
{ Assert-PathExistsAsLeaf @assertPathExistsAsLeafParameters } | Should -Throw -ExpectedMessage $expectedErrorMessage
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Assert-DestinationDoesNotExistAsFile' {
|
|
Mock -CommandName 'Get-Item' -MockWith { return $null }
|
|
|
|
Context 'When item at destination does not exist' {
|
|
$assertDestinationDoesNotExistAsFileParameters = @{
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Assert-DestinationDoesNotExistAsFile @assertDestinationDoesNotExistAsFileParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve item at destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $assertDestinationDoesNotExistAsFileParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
}
|
|
|
|
$directoryItem = New-Object -TypeName 'System.IO.DirectoryInfo' -ArgumentList @( 'TestDirectory' )
|
|
Mock -CommandName 'Get-Item' -MockWith { return $directoryItem }
|
|
|
|
Context 'When item at destination exists as a directory' {
|
|
$assertDestinationDoesNotExistAsFileParameters = @{
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Assert-DestinationDoesNotExistAsFile @assertDestinationDoesNotExistAsFileParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve item at destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $assertDestinationDoesNotExistAsFileParameters.Destination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
}
|
|
|
|
$fileItem = New-Object -TypeName 'System.IO.FileInfo' -ArgumentList @( 'TestFile' )
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return $fileItem }
|
|
|
|
Context 'When item at destination exists as a file' {
|
|
$assertDestinationDoesNotExistAsFileParameters = @{
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should throw error for file at destination' {
|
|
$expectedErrorMessage = $script:localizedData.DestinationExistsAsFile -f $assertDestinationDoesNotExistAsFileParameters.Destination
|
|
{ Assert-DestinationDoesNotExistAsFile @assertDestinationDoesNotExistAsFileParameters } | Should -Throw -ExpectedMessage $expectedErrorMessage
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Test-ChecksumIsSha' {
|
|
Context 'When specified checksum method name is a SHA method name' {
|
|
$testChecksumIsShaParameters = @{
|
|
Checksum = 'SHA-256'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-ChecksumIsSha @testChecksumIsShaParameters } | Should -Not -Throw
|
|
}
|
|
|
|
$testChecksumIsShaResult = Test-ChecksumIsSha @testChecksumIsShaParameters
|
|
|
|
It 'Should return true' {
|
|
$testChecksumIsShaResult | Should -BeTrue
|
|
}
|
|
}
|
|
|
|
Context 'When specified checksum method name is not a SHA method name' {
|
|
$testChecksumIsShaParameters = @{
|
|
Checksum = 'CreatedDate'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-ChecksumIsSha @testChecksumIsShaParameters } | Should -Not -Throw
|
|
}
|
|
|
|
$testChecksumIsShaResult = Test-ChecksumIsSha @testChecksumIsShaParameters
|
|
|
|
It 'Should return false' {
|
|
$testChecksumIsShaResult | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Context 'When specified checksum method name is less than 3 characters' {
|
|
$testChecksumIsShaParameters = @{
|
|
Checksum = 'AB'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-ChecksumIsSha @testChecksumIsShaParameters } | Should -Not -Throw
|
|
}
|
|
|
|
$testChecksumIsShaResult = Test-ChecksumIsSha @testChecksumIsShaParameters
|
|
|
|
It 'Should return false' {
|
|
$testChecksumIsShaResult | Should -BeFalse
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'ConvertTo-PowerShellHashAlgorithmName' {
|
|
$convertToPowerShellHashAlgorithmNameParameters = @{
|
|
DscHashAlgorithmName = 'SHA-256'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = ConvertTo-PowerShellHashAlgorithmName @convertToPowerShellHashAlgorithmNameParameters } | Should -Not -Throw
|
|
}
|
|
|
|
$convertToPowerShellHashAlgorithmNameResult = ConvertTo-PowerShellHashAlgorithmName @convertToPowerShellHashAlgorithmNameParameters
|
|
|
|
It 'Should return the specified algorithm name without the hyphen' {
|
|
$convertToPowerShellHashAlgorithmNameResult | Should -Be 'SHA256'
|
|
}
|
|
}
|
|
|
|
Describe 'Test-FileHashMatchesArchiveEntryHash' {
|
|
$testArchiveEntryFullName = 'TestArchiveEntryFullName'
|
|
$expectedPowerShellHashAlgorithmName = 'SHA256'
|
|
|
|
$mockArchiveEntry = New-MockObject -Type 'System.IO.Compression.ZipArchiveEntry'
|
|
$mockFileStream = New-MockObject -Type 'System.IO.FileStream'
|
|
|
|
Mock -CommandName 'Get-ArchiveEntryFullName' -MockWith { return $testArchiveEntryFullName }
|
|
Mock -CommandName 'ConvertTo-PowerShellHashAlgorithmName' -MockWith { return $expectedPowerShellHashAlgorithmName }
|
|
Mock -CommandName 'Open-ArchiveEntry' -MockWith { throw 'Error opening archive entry' }
|
|
Mock -CommandName 'New-Object' -MockWith { throw 'Error opening stream to file' }
|
|
Mock -CommandName 'Get-FileHash' -MockWith { throw 'Error retrieving hash'}
|
|
Mock -CommandName 'Close-Stream' -MockWith { }
|
|
|
|
Context 'When opening the specified archive entry fails' {
|
|
$testFileHashMatchesArchiveEntryHashParameters = @{
|
|
FilePath = 'TestPath'
|
|
ArchiveEntry = $mockArchiveEntry
|
|
HashAlgorithmName = 'SHA-256'
|
|
}
|
|
|
|
It 'Should throw error for failure while opening archive entry' {
|
|
$expectedErrorMessage = $script:localizedData.ErrorComparingHashes -f $testFileHashMatchesArchiveEntryHashParameters.FilePath, $testArchiveEntryFullName, $testFileHashMatchesArchiveEntryHashParameters.HashAlgorithmName
|
|
{ $null = Test-FileHashMatchesArchiveEntryHash @testFileHashMatchesArchiveEntryHashParameters } | Should -Throw -ExpectedMessage $expectedErrorMessage
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Open-ArchiveEntry' -MockWith { return $mockFileStream }
|
|
|
|
Context 'When opening a stream to the specified file fails' {
|
|
$testFileHashMatchesArchiveEntryHashParameters = @{
|
|
FilePath = 'TestPath'
|
|
ArchiveEntry = $mockArchiveEntry
|
|
HashAlgorithmName = 'SHA-256'
|
|
}
|
|
|
|
It 'Should throw error for failure while opening a stream to the file' {
|
|
$expectedErrorMessage = $script:localizedData.ErrorComparingHashes -f $testFileHashMatchesArchiveEntryHashParameters.FilePath, $testArchiveEntryFullName, $testFileHashMatchesArchiveEntryHashParameters.HashAlgorithmName
|
|
{ $null = Test-FileHashMatchesArchiveEntryHash @testFileHashMatchesArchiveEntryHashParameters } | Should -Throw -ExpectedMessage $expectedErrorMessage
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'New-Object' -MockWith { return $mockFileStream }
|
|
|
|
Context 'When retrieving the file hash fails' {
|
|
$testFileHashMatchesArchiveEntryHashParameters = @{
|
|
FilePath = 'TestPath'
|
|
ArchiveEntry = $mockArchiveEntry
|
|
HashAlgorithmName = 'SHA-256'
|
|
}
|
|
|
|
It 'Should throw error for failure to retrieve the file hash or archive entry hash' {
|
|
$expectedErrorMessage = $script:localizedData.ErrorComparingHashes -f $testFileHashMatchesArchiveEntryHashParameters.FilePath, $testArchiveEntryFullName, $testFileHashMatchesArchiveEntryHashParameters.HashAlgorithmName
|
|
{ $null = Test-FileHashMatchesArchiveEntryHash @testFileHashMatchesArchiveEntryHashParameters } | Should -Throw -ExpectedMessage $expectedErrorMessage
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-FileHash' -MockWith {
|
|
return @{
|
|
Algorithm = 'SHA-256'
|
|
Hash = 'TestHash1'
|
|
}
|
|
}
|
|
|
|
Context 'When file hash matches archive entry hash' {
|
|
$testFileHashMatchesArchiveEntryHashParameters = @{
|
|
FilePath = 'TestPath'
|
|
ArchiveEntry = $mockArchiveEntry
|
|
HashAlgorithmName = 'SHA-256'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-FileHashMatchesArchiveEntryHash @testFileHashMatchesArchiveEntryHashParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should convert the specified DSC hash algorithm name to a PowerShell hash algorithm name' {
|
|
$convertToPowerShellHashAlgorithmNameParameterFilter = {
|
|
$dscHashAlgorithmNameParameterCorrect = $DscHashAlgorithmName -eq $testFileHashMatchesArchiveEntryHashParameters.HashAlgorithmName
|
|
return $dscHashAlgorithmNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'ConvertTo-PowerShellHashAlgorithmName' -ParameterFilter $convertToPowerShellHashAlgorithmNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should open the specified archive entry' {
|
|
$openArchiveEntryParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-ArchiveEntry' -ParameterFilter $openArchiveEntryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should open a stream to the specified file' {
|
|
$expectedArgumentList = @( $testFileHashMatchesArchiveEntryHashParameters.FilePath, [System.IO.FileMode]::Open )
|
|
|
|
$newObjectParameterFilter = {
|
|
$typeNameParameterCorrect = $TypeName -eq 'System.IO.FileStream'
|
|
$argumentListParameterCorrect = $null -eq (Compare-Object -ReferenceObject $expectedArgumentList -DifferenceObject $ArgumentList)
|
|
|
|
return $typeNameParameterCorrect -and $argumentListParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'New-Object' -ParameterFilter $newObjectParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
|
|
|
|
It 'Should retrieve the hashes of the specified file and the specified archive entry with the specified hash algorithm name' {
|
|
$getFileHashParameterFilter = {
|
|
$inputStreamParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockFileStream -DifferenceObject $InputStream)
|
|
$algorithmParameterCorrect = $Algorithm -eq $expectedPowerShellHashAlgorithmName
|
|
|
|
return $inputStreamParameterCorrect -and $algorithmParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-FileHash' -ParameterFilter $getFileHashParameterFilter -Exactly 2 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the file stream and the archive entry stream' {
|
|
$closeStreamParameterFilter = {
|
|
$streamParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockFileStream -DifferenceObject $Stream)
|
|
return $streamParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Stream' -ParameterFilter $closeStreamParameterFilter -Exactly 2 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return true' {
|
|
Test-FileHashMatchesArchiveEntryHash @testFileHashMatchesArchiveEntryHashParameters | Should -BeTrue
|
|
}
|
|
}
|
|
|
|
$script:timesGetFileHashCalled = 0
|
|
|
|
Mock -CommandName 'Get-FileHash' -MockWith {
|
|
$script:timesGetFileHashCalled++
|
|
|
|
if ($script:timesGetFileHashCalled -eq 1)
|
|
{
|
|
return @{
|
|
Algorithm = 'SHA-256'
|
|
Hash = 'TestHash1'
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return @{
|
|
Algorithm = 'SHA-1'
|
|
Hash = 'TestHash2'
|
|
}
|
|
}
|
|
}
|
|
|
|
Context 'When file hash does not match archive entry hash' {
|
|
$testFileHashMatchesArchiveEntryHashParameters = @{
|
|
FilePath = 'TestPath'
|
|
ArchiveEntry = $mockArchiveEntry
|
|
HashAlgorithmName = 'SHA-256'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-FileHashMatchesArchiveEntryHash @testFileHashMatchesArchiveEntryHashParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should convert the specified DSC hash algorithm name to a PowerShell hash algorithm name' {
|
|
$convertToPowerShellHashAlgorithmNameParameterFilter = {
|
|
$dscHashAlgorithmNameParameterCorrect = $DscHashAlgorithmName -eq $testFileHashMatchesArchiveEntryHashParameters.HashAlgorithmName
|
|
return $dscHashAlgorithmNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'ConvertTo-PowerShellHashAlgorithmName' -ParameterFilter $convertToPowerShellHashAlgorithmNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should open the specified archive entry' {
|
|
$openArchiveEntryParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-ArchiveEntry' -ParameterFilter $openArchiveEntryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should open a stream to the specified file' {
|
|
$expectedArgumentList = @( $testFileHashMatchesArchiveEntryHashParameters.FilePath, [System.IO.FileMode]::Open )
|
|
|
|
$newObjectParameterFilter = {
|
|
$typeNameParameterCorrect = $TypeName -eq 'System.IO.FileStream'
|
|
$argumentListParameterCorrect = $null -eq (Compare-Object -ReferenceObject $expectedArgumentList -DifferenceObject $ArgumentList)
|
|
|
|
return $typeNameParameterCorrect -and $argumentListParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'New-Object' -ParameterFilter $newObjectParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the hashes of the specified file and the specified archive entry with the specified hash algorithm name' {
|
|
$getFileHashParameterFilter = {
|
|
$inputStreamParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockFileStream -DifferenceObject $InputStream)
|
|
$algorithmParameterCorrect = $Algorithm -eq $expectedPowerShellHashAlgorithmName
|
|
|
|
return $inputStreamParameterCorrect -and $algorithmParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-FileHash' -ParameterFilter $getFileHashParameterFilter -Exactly 2 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the file stream and the archive entry stream' {
|
|
$closeStreamParameterFilter = {
|
|
$streamParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockFileStream -DifferenceObject $Stream)
|
|
return $streamParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Stream' -ParameterFilter $closeStreamParameterFilter -Exactly 2 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return false' {
|
|
$script:timesGetFileHashCalled = 0
|
|
Test-FileHashMatchesArchiveEntryHash @testFileHashMatchesArchiveEntryHashParameters | Should -BeFalse
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Get-ChecksumFromFileTimestamp' {
|
|
$testFileInfo = New-Object -TypeName 'System.IO.FileInfo' -ArgumentList @( $TestDrive )
|
|
$testFileCreationTimeChecksum = (Get-Date -Date $testFileInfo.CreationTime -Format 'G')
|
|
$testFileLastWriteTimeChecksum = (Get-Date -Date $testFileInfo.LastWriteTime -Format 'G')
|
|
|
|
Context 'When checksum specified as CreatedDate' {
|
|
$getChecksumFromFileTimestampParameters = @{
|
|
File = $testFileInfo
|
|
Checksum = 'CreatedDate'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Get-ChecksumFromFileTimestamp @getChecksumFromFileTimestampParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should return the creation time of the file as a Checksum' {
|
|
Get-ChecksumFromFileTimestamp @getChecksumFromFileTimestampParameters | Should -Be $testFileCreationTimeChecksum
|
|
}
|
|
}
|
|
|
|
Context 'When checksum specified as ModifiedDate' {
|
|
$getChecksumFromFileTimestampParameters = @{
|
|
File = $testFileInfo
|
|
Checksum = 'ModifiedDate'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Get-ChecksumFromFileTimestamp @getChecksumFromFileTimestampParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should return the last write time of the file' {
|
|
Get-ChecksumFromFileTimestamp @getChecksumFromFileTimestampParameters | Should -Be $testFileLastWriteTimeChecksum
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Get-TimestampForChecksum' {
|
|
$testFileInfo = New-Object -TypeName 'System.IO.FileInfo' -ArgumentList @( $TestDrive )
|
|
|
|
Context 'When checksum specified as CreatedDate' {
|
|
$getTimestampForChecksumParameters = @{
|
|
File = $testFileInfo
|
|
Checksum = 'CreatedDate'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Get-TimestampForChecksum @getTimestampForChecksumParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should return the creation time of the file as a Checksum' {
|
|
Get-TimestampForChecksum @getTimestampForChecksumParameters | Should -Be $testFileInfo.CreationTime
|
|
}
|
|
}
|
|
|
|
Context 'When checksum specified as ModifiedDate' {
|
|
$getTimestampForChecksumParameters = @{
|
|
File = $testFileInfo
|
|
Checksum = 'ModifiedDate'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Get-TimestampForChecksum @getTimestampForChecksumParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should return the last write time of the file' {
|
|
Get-TimestampForChecksum @getTimestampForChecksumParameters | Should -Be $testFileInfo.LastWriteTime
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Get-TimestampFromFile' {
|
|
$testFileInfo = New-Object -TypeName 'System.IO.FileInfo' -ArgumentList @( $TestDrive )
|
|
|
|
Context 'When Timestamp specified as CreationTime' {
|
|
$getTimestampFromFileParameters = @{
|
|
File = $testFileInfo
|
|
Timestamp = 'CreationTime'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Get-TimestampFromFile @getTimestampFromFileParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should return the creation time of the file as a Checksum' {
|
|
Get-TimestampFromFile @getTimestampFromFileParameters | Should -Be $testFileInfo.CreationTime
|
|
}
|
|
}
|
|
|
|
Context 'When Timestamp specified as LastWriteTime' {
|
|
$getTimestampFromFileParameters = @{
|
|
File = $testFileInfo
|
|
Timestamp = 'LastWriteTime'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Get-TimestampFromFile @getTimestampFromFileParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should return the last write time of the file as a Checksum' {
|
|
Get-TimestampFromFile @getTimestampFromFileParameters | Should -Be $testFileInfo.LastWriteTime
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'ConvertTo-CheckSumFromDateTime' {
|
|
$testDate = Get-Date
|
|
$testDateFromChecksum = (Get-Date -Date $testDate -Format 'G')
|
|
|
|
Context 'When called with a datetime object set to now' {
|
|
$convertToCheckSumFromDateTimeParameters = @{
|
|
Date = $testDate
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = ConvertTo-CheckSumFromDateTime @convertToCheckSumFromDateTimeParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should return the date normalized to a string using format of ''G''' {
|
|
ConvertTo-CheckSumFromDateTime @convertToCheckSumFromDateTimeParameters | Should -Be $testDateFromChecksum
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Test-FileMatchesArchiveEntryByChecksum' {
|
|
$testArchiveEntryFullName = 'TestArchiveEntryFullName'
|
|
$testArchiveEntryLastWriteTime = Get-Date -Month 1
|
|
$testTimestampFromChecksum = Get-Date -Month 2
|
|
|
|
$mockArchiveEntry = New-MockObject -Type 'System.IO.Compression.ZipArchiveEntry'
|
|
|
|
# This is the actual file info of this file since we cannot set the properties of mock objects
|
|
$testFileInfo = New-Object -TypeName 'System.IO.FileInfo' -ArgumentList @( $TestDrive )
|
|
$testFileFullName = $testFileInfo.FullName
|
|
|
|
Mock -CommandName 'Get-ArchiveEntryFullName' -MockWith { return $testArchiveEntryFullName }
|
|
Mock -CommandName 'Test-ChecksumIsSha' -MockWith { return $false }
|
|
Mock -CommandName 'Test-FileHashMatchesArchiveEntryHash' -MockWith { return $false }
|
|
Mock -CommandName 'Get-TimestampForChecksum' -MockWith { return $testTimestampFromChecksum }
|
|
Mock -CommandName 'Get-ArchiveEntryLastWriteTime' -MockWith { return $testArchiveEntryLastWriteTime }
|
|
|
|
Context 'When specified checksum method is not a SHA method and file timestamp from checksum does not match archive entry last write time' {
|
|
$testFileMatchesArchiveEntryByChecksumParameters = @{
|
|
File = $testFileInfo
|
|
ArchiveEntry = $mockArchiveEntry
|
|
Checksum = 'ModifiedDate'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-FileMatchesArchiveEntryByChecksum @testFileMatchesArchiveEntryByChecksumParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve the full name of the archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified checksum method is a SHA method' {
|
|
$testChecksumIsShaParameterFilter = {
|
|
$checksumParameterCorrect = $Checksum -eq $testFileMatchesArchiveEntryByChecksumParameters.Checksum
|
|
return $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ChecksumIsSha' -ParameterFilter $testChecksumIsShaParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the hash of the specified file matches the hash of the specified archive entry' {
|
|
Assert-MockCalled -CommandName 'Test-FileHashMatchesArchiveEntryHash' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the timestamp of the specified file for the specified checksum method' {
|
|
$getTimestampForChecksumParameterFilter = {
|
|
$fileParameterCorrect = $null -eq (Compare-Object -ReferenceObject $testFileInfo -DifferenceObject $File)
|
|
$checksumParameterCorrect = $Checksum -eq $testFileMatchesArchiveEntryByChecksumParameters.Checksum
|
|
|
|
return $fileParameterCorrect -and $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-TimestampForChecksum' -ParameterFilter $getTimestampForChecksumParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the last write time of the specified archive entry' {
|
|
$getArchiveEntryLastWriteTimeParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryLastWriteTime' -ParameterFilter $getArchiveEntryLastWriteTimeParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-FileMatchesArchiveEntryByChecksum @testFileMatchesArchiveEntryByChecksumParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-TimestampForChecksum' -MockWith { return $testArchiveEntryLastWriteTime }
|
|
|
|
Context 'When specified checksum method is not a SHA method and file timestamp from checksum matches archive entry last write time' {
|
|
$testFileMatchesArchiveEntryByChecksumParameters = @{
|
|
File = $testFileInfo
|
|
ArchiveEntry = $mockArchiveEntry
|
|
Checksum = 'CreatedDate'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-FileMatchesArchiveEntryByChecksum @testFileMatchesArchiveEntryByChecksumParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve the full name of the archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified checksum method is a SHA method' {
|
|
$testChecksumIsShaParameterFilter = {
|
|
$checksumParameterCorrect = $Checksum -eq $testFileMatchesArchiveEntryByChecksumParameters.Checksum
|
|
return $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ChecksumIsSha' -ParameterFilter $testChecksumIsShaParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the hash of the specified file matches the hash of the specified archive entry' {
|
|
Assert-MockCalled -CommandName 'Test-FileHashMatchesArchiveEntryHash' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the timestamp of the specified file for the specified checksum method' {
|
|
$getTimestampForChecksumParameterFilter = {
|
|
$fileParameterCorrect = $null -eq (Compare-Object -ReferenceObject $testFileInfo -DifferenceObject $File)
|
|
$checksumParameterCorrect = $Checksum -eq $testFileMatchesArchiveEntryByChecksumParameters.Checksum
|
|
|
|
return $fileParameterCorrect -and $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-TimestampForChecksum' -ParameterFilter $getTimestampForChecksumParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the last write time of the specified archive entry' {
|
|
$getArchiveEntryLastWriteTimeParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryLastWriteTime' -ParameterFilter $getArchiveEntryLastWriteTimeParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return true' {
|
|
Test-FileMatchesArchiveEntryByChecksum @testFileMatchesArchiveEntryByChecksumParameters | Should -BeTrue
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-ChecksumIsSha' -MockWith { return $true }
|
|
|
|
Context 'When specified checksum method is a SHA method and file hash does not match archive entry hash' {
|
|
$testFileMatchesArchiveEntryByChecksumParameters = @{
|
|
File = $testFileInfo
|
|
ArchiveEntry = $mockArchiveEntry
|
|
Checksum = 'SHA-256'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-FileMatchesArchiveEntryByChecksum @testFileMatchesArchiveEntryByChecksumParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve the full name of the archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified checksum method is a SHA method' {
|
|
$testChecksumIsShaParameterFilter = {
|
|
$checksumParameterCorrect = $Checksum -eq $testFileMatchesArchiveEntryByChecksumParameters.Checksum
|
|
return $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ChecksumIsSha' -ParameterFilter $testChecksumIsShaParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the hash of the specified file matches the hash of the specified archive entry' {
|
|
$testFileHashMatchesArchiveEntryHashParameterFilter = {
|
|
$filePathParameterCorrect = $FilePath -eq $testFileFullName
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$hashAlgorithmNameParameterCorrect = $HashAlgorithmName -eq $testFileMatchesArchiveEntryByChecksumParameters.Checksum
|
|
|
|
return $filePathParameterCorrect -and $archiveEntryParameterCorrect -and $hashAlgorithmNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-FileHashMatchesArchiveEntryHash' -ParameterFilter $testFileHashMatchesArchiveEntryHashParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to retrieve the timestamp of the specified file for the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Get-TimestampForChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to retrieve the last write time of the specified archive entry' {
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryLastWriteTime' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-FileMatchesArchiveEntryByChecksum @testFileMatchesArchiveEntryByChecksumParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-FileHashMatchesArchiveEntryHash' -MockWith { return $true }
|
|
|
|
Context 'When specified checksum method is a SHA method and file hash matches archive entry hash' {
|
|
$testFileMatchesArchiveEntryByChecksumParameters = @{
|
|
File = $testFileInfo
|
|
ArchiveEntry = $mockArchiveEntry
|
|
Checksum = 'SHA-512'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-FileMatchesArchiveEntryByChecksum @testFileMatchesArchiveEntryByChecksumParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve the full name of the archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the specified checksum method is a SHA method' {
|
|
$testChecksumIsShaParameterFilter = {
|
|
$checksumParameterCorrect = $Checksum -eq $testFileMatchesArchiveEntryByChecksumParameters.Checksum
|
|
return $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ChecksumIsSha' -ParameterFilter $testChecksumIsShaParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the hash of the specified file matches the hash of the specified archive entry' {
|
|
$testFileHashMatchesArchiveEntryHashParameterFilter = {
|
|
$filePathParameterCorrect = $FilePath -eq $testFileFullName
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$hashAlgorithmNameParameterCorrect = $HashAlgorithmName -eq $testFileMatchesArchiveEntryByChecksumParameters.Checksum
|
|
|
|
return $filePathParameterCorrect -and $archiveEntryParameterCorrect -and $hashAlgorithmNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-FileHashMatchesArchiveEntryHash' -ParameterFilter $testFileHashMatchesArchiveEntryHashParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to retrieve the timestamp of the specified file for the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Get-TimestampForChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to retrieve the last write time of the specified archive entry' {
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryLastWriteTime' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return true' {
|
|
Test-FileMatchesArchiveEntryByChecksum @testFileMatchesArchiveEntryByChecksumParameters | Should -BeTrue
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Test-ArchiveEntryIsDirectory' {
|
|
Context 'When archive entry name does not contain a backslash or a foward slash' {
|
|
$testArchiveEntryNameIsDirectoryPathParameters = @{
|
|
ArchiveEntryName = 'TestArchiveEntryName'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-ArchiveEntryIsDirectory @testArchiveEntryNameIsDirectoryPathParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-ArchiveEntryIsDirectory @testArchiveEntryNameIsDirectoryPathParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry name contains a backslash but does not end with a backslash' {
|
|
$testArchiveEntryNameIsDirectoryPathParameters = @{
|
|
ArchiveEntryName = 'TestArchive\EntryName'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-ArchiveEntryIsDirectory @testArchiveEntryNameIsDirectoryPathParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-ArchiveEntryIsDirectory @testArchiveEntryNameIsDirectoryPathParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry name contains a foward slash but does not end with a foward slash' {
|
|
$testArchiveEntryNameIsDirectoryPathParameters = @{
|
|
ArchiveEntryName = 'TestArchive/EntryName'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-ArchiveEntryIsDirectory @testArchiveEntryNameIsDirectoryPathParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-ArchiveEntryIsDirectory @testArchiveEntryNameIsDirectoryPathParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry name ends with a backslash' {
|
|
$testArchiveEntryNameIsDirectoryPathParameters = @{
|
|
ArchiveEntryName = 'TestArchiveEntryName\'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-ArchiveEntryIsDirectory @testArchiveEntryNameIsDirectoryPathParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should return true' {
|
|
Test-ArchiveEntryIsDirectory @testArchiveEntryNameIsDirectoryPathParameters | Should -BeTrue
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry name ends with a forward slash' {
|
|
$testArchiveEntryNameIsDirectoryPathParameters = @{
|
|
ArchiveEntryName = 'TestArchiveEntryName/'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ $null = Test-ArchiveEntryIsDirectory @testArchiveEntryNameIsDirectoryPathParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should return true' {
|
|
Test-ArchiveEntryIsDirectory @testArchiveEntryNameIsDirectoryPathParameters | Should -BeTrue
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Test-ArchiveExistsAtDestination' {
|
|
$testArchiveEntryFullName = 'TestArchiveEntryFullName'
|
|
$testItemPathAtDestination = 'TestItemPathAtDestination'
|
|
|
|
$mockArchive = New-MockObject -Type 'System.IO.Compression.ZipArchive'
|
|
$mockArchiveEntry = New-MockObject -Type 'System.IO.Compression.ZipArchiveEntry'
|
|
$mockFile = New-MockObject -Type 'System.IO.FileInfo'
|
|
$mockDirectory = New-MockObject -Type 'System.IO.DirectoryInfo'
|
|
|
|
Mock -CommandName 'Open-Archive' -MockWith { return $mockArchive }
|
|
Mock -CommandName 'Get-ArchiveEntries' -MockWith { return @( $mockArchiveEntry ) }
|
|
Mock -CommandName 'Get-ArchiveEntryFullName' -MockWith { return $testArchiveEntryFullName }
|
|
Mock -CommandName 'Join-Path' -MockWith { return $testItemPathAtDestination }
|
|
Mock -CommandName 'Get-Item' -MockWith { return $null }
|
|
Mock -CommandName 'Test-ArchiveEntryIsDirectory' -MockWith { return $true }
|
|
Mock -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -MockWith { return $false }
|
|
Mock -CommandName 'Close-Archive' -MockWith { }
|
|
|
|
Context 'When archive entry is a directory and does not exist at destination' {
|
|
$testArchiveExistsAtDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the archive entry is a directory' {
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return $mockFile }
|
|
|
|
Context 'When archive entry is a directory and item with the same name exists at the destination but is a file' {
|
|
$testArchiveExistsAtDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return 'NotAFileOrADirectory' }
|
|
|
|
Context 'When archive entry is a directory and item with the same name exists at the destination but is not a file or a directory' {
|
|
$testArchiveExistsAtDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return $mockDirectory }
|
|
|
|
Context 'When archive entry is a directory and directory with the same name exists at the destination' {
|
|
$testArchiveExistsAtDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
$testArchiveExistsAtDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return true' {
|
|
Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters | Should -BeTrue
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-ArchiveEntryIsDirectory' -MockWith { return $false }
|
|
Mock -CommandName 'Get-Item' -MockWith { return $null }
|
|
|
|
Context 'When archive entry is a file and does not exist at destination' {
|
|
$testArchiveExistsAtDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the archive entry is a directory' {
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return $mockDirectory }
|
|
|
|
Context 'When archive entry is a file and item with the same name exists at the destination but is a directory' {
|
|
$testArchiveExistsAtDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return 'NotAFileOrADirectory' }
|
|
|
|
Context 'When archive entry is a file and item with the same name exists at the destination but is not a file or a directory' {
|
|
$testArchiveExistsAtDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return $mockFile }
|
|
|
|
Context 'When archive entry is a file, file with the same name exists at the destination, and a checksum method is not specified' {
|
|
$testArchiveExistsAtDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return true' {
|
|
Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters | Should -BeTrue
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry is a file, file with the same name exists at the destination, and files do not match by the specified checksum method' {
|
|
$testArchiveExistsAtDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
Checksum = 'SHA-256'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
$testFileMatchesArchiveEntryByChecksumParameterFilter = {
|
|
$fileParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockFile -DifferenceObject $File)
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$checksumParameterCorrect = $Checksum -eq $testArchiveExistsAtDestinationParameters.Checksum
|
|
|
|
return $fileParameterCorrect -and $archiveEntryParameterCorrect -and $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -ParameterFilter $testFileMatchesArchiveEntryByChecksumParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return false' {
|
|
Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters | Should -BeFalse
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -MockWith { return $true }
|
|
|
|
Context 'When archive entry is a file, file with the same name exists at the destination, and files match by the specified checksum method' {
|
|
$testArchiveExistsAtDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
Checksum = 'SHA-256'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveExistsAtDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
$testFileMatchesArchiveEntryByChecksumParameterFilter = {
|
|
$fileParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockFile -DifferenceObject $File)
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$checksumParameterCorrect = $Checksum -eq $testArchiveExistsAtDestinationParameters.Checksum
|
|
|
|
return $fileParameterCorrect -and $archiveEntryParameterCorrect -and $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -ParameterFilter $testFileMatchesArchiveEntryByChecksumParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should return true' {
|
|
Test-ArchiveExistsAtDestination @testArchiveExistsAtDestinationParameters | Should -BeTrue
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Copy-ArchiveEntryToDestination' {
|
|
$testArchiveEntryFullName = 'TestArchiveEntryFullName'
|
|
$testArchiveEntryLastWriteTime = Get-Date
|
|
|
|
$testCopyFromStreamToStreamError = 'Test copy from stream to stream error'
|
|
|
|
$mockArchiveEntry = New-MockObject -Type 'System.IO.Compression.ZipArchiveEntry'
|
|
$mockFileStream = New-MockObject -Type 'System.IO.FileStream'
|
|
|
|
Mock -CommandName 'Get-ArchiveEntryFullName' { return $testArchiveEntryFullName }
|
|
Mock -CommandName 'Test-ArchiveEntryIsDirectory' -MockWith { return $true }
|
|
Mock -CommandName 'New-Item' -MockWith { }
|
|
Mock -CommandName 'Open-ArchiveEntry' -MockWith { return $mockFileStream }
|
|
Mock -CommandName 'New-Object' -MockWith {
|
|
if ($TypeName -eq 'System.IO.FileStream')
|
|
{
|
|
return $mockFileStream
|
|
}
|
|
elseif ($TypeName -eq 'System.IO.FileInfo')
|
|
{
|
|
return $null
|
|
}
|
|
}
|
|
Mock -CommandName 'Copy-FromStreamToStream' -MockWith { throw $testCopyFromStreamToStreamError }
|
|
Mock -CommandName 'Close-Stream' -MockWith { }
|
|
Mock -CommandName 'Get-ArchiveEntryLastWriteTime' -MockWith { return $testArchiveEntryLastWriteTime }
|
|
Mock -CommandName 'Set-ItemProperty' -MockWith { }
|
|
|
|
Context 'When archive entry is a directory' {
|
|
$copyArchiveEntryToDestinationParameters = @{
|
|
ArchiveEntry = $mockArchiveEntry
|
|
DestinationPath = 'TestDestinationPath'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Copy-ArchiveEntryToDestination @copyArchiveEntryToDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve the full name of the specified archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should create a new directory at the specified destination' {
|
|
$newItemParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $copyArchiveEntryToDestinationParameters.DestinationPath
|
|
$itemTypeParameterCorrect = $ItemType -eq 'Directory'
|
|
|
|
return $pathParameterCorrect -and $itemTypeParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'New-Item' -ParameterFilter $newItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to open the specified archive entry' {
|
|
Assert-MockCalled -CommandName 'Open-ArchiveEntry' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create a new file stream at the specified destination' {
|
|
$newObjectParameterFilter = {
|
|
$typeNameParameterIsFileStream = $TypeName -eq 'System.IO.FileStream'
|
|
return $typeNameParameterIsFileStream
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'New-Object' -ParameterFilter $newObjectParameterFilter -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to copy the archive entry to the destination' {
|
|
Assert-MockCalled -CommandName 'Copy-FromStreamToStream' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to close a file stream' {
|
|
Assert-MockCalled -CommandName 'Close-Stream' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create a new file info at the specified destination' {
|
|
$newObjectParameterFilter = {
|
|
$typeNameParameterIsFileStream = $TypeName -eq 'System.IO.FileInfo'
|
|
return $typeNameParameterIsFileStream
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'New-Object' -ParameterFilter $newObjectParameterFilter -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to retrieve the last write time of the specified archive entry' {
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryLastWriteTime' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to set the last write time of the file at the specified destination' {
|
|
$setItemPropertyParameterFilter = {
|
|
$nameParameterIsLastWriteTime = $Name -eq 'LastWriteTime'
|
|
return $nameParameterIsLastWriteTime
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Set-ItemProperty' -ParameterFilter $setItemPropertyParameterFilter -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to set the last access time of the file at the specified destination' {
|
|
$setItemPropertyParameterFilter = {
|
|
$nameParameterIsLastWriteTime = $Name -eq 'LastAccessTime'
|
|
return $nameParameterIsLastWriteTime
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Set-ItemProperty' -ParameterFilter $setItemPropertyParameterFilter -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to set the creation time of the file at the specified destination' {
|
|
$setItemPropertyParameterFilter = {
|
|
$nameParameterIsLastWriteTime = $Name -eq 'CreationTime'
|
|
return $nameParameterIsLastWriteTime
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Set-ItemProperty' -ParameterFilter $setItemPropertyParameterFilter -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return' {
|
|
Copy-ArchiveEntryToDestination @copyArchiveEntryToDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-ArchiveEntryIsDirectory' -MockWith { return $false }
|
|
|
|
Context 'When archive entry is not a directory and copying from stream to stream fails' {
|
|
$copyArchiveEntryToDestinationParameters = @{
|
|
ArchiveEntry = $mockArchiveEntry
|
|
DestinationPath = 'TestDestinationPath'
|
|
}
|
|
|
|
It 'Should throw an error for failed copy from the file stream to the archive entry stream' {
|
|
$expectedErrorMessage = $script:localizedData.ErrorCopyingFromArchiveToDestination -f $copyArchiveEntryToDestinationParameters.DestinationPath
|
|
{ Copy-ArchiveEntryToDestination @copyArchiveEntryToDestinationParameters } | Should -Throw -ExpectedMessage $expectedErrorMessage
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Copy-FromStreamToStream' -MockWith { }
|
|
|
|
Context 'When archive entry is not a directory and copying from stream to stream succeeds' {
|
|
$copyArchiveEntryToDestinationParameters = @{
|
|
ArchiveEntry = $mockArchiveEntry
|
|
DestinationPath = 'TestDestinationPath'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Copy-ArchiveEntryToDestination @copyArchiveEntryToDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should retrieve the full name of the specified archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create a new directory at the specified destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should open the specified archive entry' {
|
|
$openArchiveEntryParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-ArchiveEntry' -ParameterFilter $openArchiveEntryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should create a new file stream at the specified destination' {
|
|
$expectedArgumentList = @( $copyArchiveEntryToDestinationParameters.DestinationPath, [System.IO.FileMode]::Create )
|
|
|
|
$newObjectParameterFilter = {
|
|
$typeNameParameterIsFileStream = $TypeName -eq 'System.IO.FileStream'
|
|
$argumentListParameterCorrect = $null -eq (Compare-Object -ReferenceObject $expectedArgumentList -DifferenceObject $ArgumentList)
|
|
|
|
return $typeNameParameterIsFileStream -and $argumentListParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'New-Object' -ParameterFilter $newObjectParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should copy the archive entry to the destination' {
|
|
$copyFromStreamToStreamParameterFilter = {
|
|
$sourceStreamParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockFileStream -DifferenceObject $SourceStream)
|
|
$destinationStreamParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockFileStream -DifferenceObject $DestinationStream)
|
|
|
|
return $sourceStreamParameterCorrect -and $destinationStreamParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Copy-FromStreamToStream' -ParameterFilter $copyFromStreamToStreamParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the archive entry stream and the file stream' {
|
|
$closeStreamParameterFilter = {
|
|
$streamParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockFileStream -DifferenceObject $Stream)
|
|
return $streamParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Stream' -ParameterFilter $closeStreamParameterFilter -Exactly 2 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should create a new file info at the specified destination' {
|
|
$expectedArgumentList = @( $copyArchiveEntryToDestinationParameters.DestinationPath )
|
|
|
|
$newObjectParameterFilter = {
|
|
$typeNameParameterIsFileStream = $TypeName -eq 'System.IO.FileInfo'
|
|
$argumentListParameterCorrect = $null -eq (Compare-Object -ReferenceObject $expectedArgumentList -DifferenceObject $ArgumentList)
|
|
|
|
return $typeNameParameterIsFileStream -and $argumentListParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'New-Object' -ParameterFilter $newObjectParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the last write time of the specified archive entry' {
|
|
$getArchiveEntryLastWriteTimeParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryLastWriteTime' -ParameterFilter $getArchiveEntryLastWriteTimeParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should set the last write time of the file at the specified destination' {
|
|
$setItemPropertyParameterFilter = {
|
|
$nameParameterIsLastWriteTime = $Name -eq 'LastWriteTime'
|
|
$literalPathParameterCorrect = $LiteralPath -eq $copyArchiveEntryToDestinationParameters.DestinationPath
|
|
$valueParameterCorrect = $Value -eq $testArchiveEntryLastWriteTime
|
|
|
|
return $nameParameterIsLastWriteTime -and $literalPathParameterCorrect -and $valueParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Set-ItemProperty' -ParameterFilter $setItemPropertyParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should set the last access time of the file at the specified destination' {
|
|
$setItemPropertyParameterFilter = {
|
|
$nameParameterIsLastWriteTime = $Name -eq 'LastAccessTime'
|
|
$literalPathParameterCorrect = $LiteralPath -eq $copyArchiveEntryToDestinationParameters.DestinationPath
|
|
$valueParameterCorrect = $Value -eq $testArchiveEntryLastWriteTime
|
|
|
|
return $nameParameterIsLastWriteTime -and $literalPathParameterCorrect -and $valueParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Set-ItemProperty' -ParameterFilter $setItemPropertyParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should set the creation time of the file at the specified destination' {
|
|
$setItemPropertyParameterFilter = {
|
|
$nameParameterIsLastWriteTime = $Name -eq 'CreationTime'
|
|
$literalPathParameterCorrect = $LiteralPath -eq $copyArchiveEntryToDestinationParameters.DestinationPath
|
|
$valueParameterCorrect = $Value -eq $testArchiveEntryLastWriteTime
|
|
|
|
return $nameParameterIsLastWriteTime -and $literalPathParameterCorrect -and $valueParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Set-ItemProperty' -ParameterFilter $setItemPropertyParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return' {
|
|
Copy-ArchiveEntryToDestination @copyArchiveEntryToDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Expand-ArchiveToDestination' {
|
|
$testArchiveEntryFullName = 'TestArchiveEntryFullName'
|
|
$testItemPathAtDestination = 'TestItemPathAtDestination'
|
|
$testParentDirectoryPath = 'TestParentDirectoryPath'
|
|
|
|
$mockArchive = New-MockObject -Type 'System.IO.Compression.ZipArchive'
|
|
$mockArchiveEntry = New-MockObject -Type 'System.IO.Compression.ZipArchiveEntry'
|
|
$mockFile = New-MockObject -Type 'System.IO.FileInfo'
|
|
$mockDirectory = New-MockObject -Type 'System.IO.DirectoryInfo'
|
|
|
|
Mock -CommandName 'Open-Archive' -MockWith { return $mockArchive }
|
|
Mock -CommandName 'Get-ArchiveEntries' -MockWith { return @( $mockArchiveEntry ) }
|
|
Mock -CommandName 'Get-ArchiveEntryFullName' -MockWith { return $testArchiveEntryFullName }
|
|
Mock -CommandName 'Join-Path' -MockWith { return $testItemPathAtDestination }
|
|
Mock -CommandName 'Test-ArchiveEntryIsDirectory' -MockWith { return $true }
|
|
Mock -CommandName 'Get-Item' -MockWith { return $null }
|
|
Mock -CommandName 'Split-Path' -MockWith { return $testParentDirectoryPath }
|
|
Mock -CommandName 'Test-Path' -MockWith { return $false }
|
|
Mock -CommandName 'New-Item' -MockWith { }
|
|
Mock -CommandName 'Copy-ArchiveEntryToDestination' -MockWith { }
|
|
Mock -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -MockWith { return $false }
|
|
Mock -CommandName 'Remove-Item' -MockWith { }
|
|
Mock -CommandName 'Close-Archive' -MockWith { }
|
|
|
|
Context 'When archive entry is a directory and does not exist at destination' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the parent directory of the desired path of the archive entry at the destination exists' {
|
|
Assert-MockCalled -CommandName 'Test-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should copy the archive entry to the desired path of the archive entry at the destination' {
|
|
$copyArchiveEntryToDestinationParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$destinationPathParameterCorrect = $DestinationPath -eq $testItemPathAtDestination
|
|
|
|
return $archiveEntryParameterCorrect -and $destinationPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Copy-ArchiveEntryToDestination' -ParameterFilter $copyArchiveEntryToDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing item at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Expand-ArchiveToDestination @expandArchiveToDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return $mockFile }
|
|
|
|
Context 'When archive entry is a directory, item with the same name exists at the destination but is a file, and Force is not specified' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should throw an error for attempting to overwrite an existing item without specifying the Force parameter' {
|
|
$errorMessage = $script:localizedData.ForceNotSpecifiedToOverwriteItem -f $testItemPathAtDestination, $testArchiveEntryFullName
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Throw -ExpectedMessage $errorMessage
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry is a directory, item with the same name exists at the destination but is a file, and Force is specified' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
Force = $true
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the parent directory of the desired path of the archive entry at the destination exists' {
|
|
Assert-MockCalled -CommandName 'Test-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should copy the archive entry to the desired path of the archive entry at the destination' {
|
|
$copyArchiveEntryToDestinationParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$destinationPathParameterCorrect = $DestinationPath -eq $testItemPathAtDestination
|
|
|
|
return $archiveEntryParameterCorrect -and $destinationPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Copy-ArchiveEntryToDestination' -ParameterFilter $copyArchiveEntryToDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the existing item at the desired path of the archive entry at the destination' {
|
|
$removeItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-Item' -ParameterFilter $removeItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Expand-ArchiveToDestination @expandArchiveToDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return 'NotAFileOrADirectory' }
|
|
|
|
Context 'When archive entry is a directory, item with the same name exists at the destination but is not a file or a directory, and Force is not specified' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should throw an error for attempting to overwrite an existing item without specifying the Force parameter' {
|
|
$errorMessage = $script:localizedData.ForceNotSpecifiedToOverwriteItem -f $testItemPathAtDestination, $testArchiveEntryFullName
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Throw -ExpectedMessage $errorMessage
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry is a directory, item with the same name exists at the destination but is not a file or a directory, and Force is specified' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
Force = $true
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the parent directory of the desired path of the archive entry at the destination exists' {
|
|
Assert-MockCalled -CommandName 'Test-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should copy the archive entry to the desired path of the archive entry at the destination' {
|
|
$copyArchiveEntryToDestinationParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$destinationPathParameterCorrect = $DestinationPath -eq $testItemPathAtDestination
|
|
|
|
return $archiveEntryParameterCorrect -and $destinationPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Copy-ArchiveEntryToDestination' -ParameterFilter $copyArchiveEntryToDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the existing item at the desired path of the archive entry at the destination' {
|
|
$removeItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-Item' -ParameterFilter $removeItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Expand-ArchiveToDestination @expandArchiveToDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return $mockDirectory }
|
|
|
|
Context 'When archive entry is a directory and directory with the same name exists at the destination' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the parent directory of the desired path of the archive entry at the destination exists' {
|
|
Assert-MockCalled -CommandName 'Test-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to copy the archive entry to the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Copy-ArchiveEntryToDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing item at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Expand-ArchiveToDestination @expandArchiveToDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-ArchiveEntryIsDirectory' -MockWith { return $false }
|
|
Mock -CommandName 'Get-Item' -MockWith { return $null }
|
|
|
|
Context 'When archive entry is a file and does not exist at destination and the parent directory of the file does not exist' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the parent directory of the desired path of the archive entry at the destination' {
|
|
$splitPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testItemPathAtDestination
|
|
$parentParameterCorrect = $Parent -eq $true
|
|
|
|
return $pathParameterCorrect -and $parentParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Split-Path' -ParameterFilter $splitPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the parent directory of the desired path of the archive entry at the destination exists' {
|
|
$testPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testParentDirectoryPath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should create the parent directory of the desired path of the archive entry at the destination' {
|
|
$newItemParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testParentDirectoryPath
|
|
$itemTypeParameterCorrect = $ItemType -eq 'Directory'
|
|
|
|
return $pathParameterCorrect -and $itemTypeParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'New-Item' -ParameterFilter $newItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should copy the archive entry to the desired path of the archive entry at the destination' {
|
|
$copyArchiveEntryToDestinationParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$destinationPathParameterCorrect = $DestinationPath -eq $testItemPathAtDestination
|
|
|
|
return $archiveEntryParameterCorrect -and $destinationPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Copy-ArchiveEntryToDestination' -ParameterFilter $copyArchiveEntryToDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing item at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Expand-ArchiveToDestination @expandArchiveToDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-Path' -MockWith { return $true }
|
|
|
|
Context 'When archive entry is a file and does not exist at destination and the parent directory of the file exists' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the parent directory of the desired path of the archive entry at the destination' {
|
|
$splitPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testItemPathAtDestination
|
|
$parentParameterCorrect = $Parent -eq $true
|
|
|
|
return $pathParameterCorrect -and $parentParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Split-Path' -ParameterFilter $splitPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the parent directory of the desired path of the archive entry at the destination exists' {
|
|
$testPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testParentDirectoryPath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should copy the archive entry to the desired path of the archive entry at the destination' {
|
|
$copyArchiveEntryToDestinationParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$destinationPathParameterCorrect = $DestinationPath -eq $testItemPathAtDestination
|
|
|
|
return $archiveEntryParameterCorrect -and $destinationPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Copy-ArchiveEntryToDestination' -ParameterFilter $copyArchiveEntryToDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing item at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Expand-ArchiveToDestination @expandArchiveToDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return $mockDirectory }
|
|
|
|
Context 'When archive entry is a file, item with the same name exists at the destination but is a directory, and Force is not specified' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should throw an error for attempting to overwrite an existing item without specifying the Force parameter' {
|
|
$errorMessage = $script:localizedData.ForceNotSpecifiedToOverwriteItem -f $testItemPathAtDestination, $testArchiveEntryFullName
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Throw -ExpectedMessage $errorMessage
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry is a file, item with the same name exists at the destination but is a directory, and Force is specified' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
Force = $true
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the parent directory of the desired path of the archive entry at the destination exists' {
|
|
Assert-MockCalled -CommandName 'Test-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should copy the archive entry to the desired path of the archive entry at the destination' {
|
|
$copyArchiveEntryToDestinationParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$destinationPathParameterCorrect = $DestinationPath -eq $testItemPathAtDestination
|
|
|
|
return $archiveEntryParameterCorrect -and $destinationPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Copy-ArchiveEntryToDestination' -ParameterFilter $copyArchiveEntryToDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the existing item at the desired path of the archive entry at the destination' {
|
|
$removeItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-Item' -ParameterFilter $removeItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Expand-ArchiveToDestination @expandArchiveToDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return 'NotAFileOrADirectory' }
|
|
|
|
Context 'When archive entry is a file, item with the same name exists at the destination but is not a file or a directory, and Force is not specified' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should throw an error for attempting to overwrite an existing item without specifying the Force parameter' {
|
|
$errorMessage = $script:localizedData.ForceNotSpecifiedToOverwriteItem -f $testItemPathAtDestination, $testArchiveEntryFullName
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Throw -ExpectedMessage $errorMessage
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry is a file, item with the same name exists at the destination but is not a file or a directory, and Force is specified' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
Force = $true
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the parent directory of the desired path of the archive entry at the destination exists' {
|
|
Assert-MockCalled -CommandName 'Test-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should copy the archive entry to the desired path of the archive entry at the destination' {
|
|
$copyArchiveEntryToDestinationParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$destinationPathParameterCorrect = $DestinationPath -eq $testItemPathAtDestination
|
|
|
|
return $archiveEntryParameterCorrect -and $destinationPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Copy-ArchiveEntryToDestination' -ParameterFilter $copyArchiveEntryToDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the existing item at the desired path of the archive entry at the destination' {
|
|
$removeItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-Item' -ParameterFilter $removeItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Expand-ArchiveToDestination @expandArchiveToDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return $mockFile }
|
|
|
|
Context 'When archive entry is a file, file with the same name exists at the destination, and a checksum method is not specified' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the parent directory of the desired path of the archive entry at the destination exists' {
|
|
Assert-MockCalled -CommandName 'Test-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to copy the archive entry to the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Copy-ArchiveEntryToDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing item at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Expand-ArchiveToDestination @expandArchiveToDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry is a file, file with the same name exists at the destination, files do not match by the specified checksum method, and Force is not specified' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
Checksum = 'SHA-256'
|
|
}
|
|
|
|
It 'Should throw an error for attempting to overwrite an existing item without specifying the Force parameter' {
|
|
$errorMessage = $script:localizedData.ForceNotSpecifiedToOverwriteItem -f $testItemPathAtDestination, $testArchiveEntryFullName
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Throw -ExpectedMessage $errorMessage
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry is a file, file with the same name exists at the destination, files do not match by the specified checksum method, and Force is specified' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
Checksum = 'SHA-256'
|
|
Force = $true
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the parent directory of the desired path of the archive entry at the destination exists' {
|
|
Assert-MockCalled -CommandName 'Test-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should copy the archive entry to the desired path of the archive entry at the destination' {
|
|
$copyArchiveEntryToDestinationParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$destinationPathParameterCorrect = $DestinationPath -eq $testItemPathAtDestination
|
|
|
|
return $archiveEntryParameterCorrect -and $destinationPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Copy-ArchiveEntryToDestination' -ParameterFilter $copyArchiveEntryToDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
$testFileMatchesArchiveEntryByChecksumParameterFilter = {
|
|
$fileParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockFile -DifferenceObject $File)
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$checksumParameterCorrect = $Checksum -eq $expandArchiveToDestinationParameters.Checksum
|
|
|
|
return $fileParameterCorrect -and $archiveEntryParameterCorrect -and $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -ParameterFilter $testFileMatchesArchiveEntryByChecksumParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the existing item at the desired path of the archive entry at the destination' {
|
|
$removeItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-Item' -ParameterFilter $removeItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Expand-ArchiveToDestination @expandArchiveToDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -MockWith { return $true }
|
|
|
|
Context 'When archive entry is a file, file with the same name exists at the destination, and files match by the specified checksum method' {
|
|
$expandArchiveToDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
Checksum = 'SHA-256'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Expand-ArchiveToDestination @expandArchiveToDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $expandArchiveToDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the parent directory of the desired path of the archive entry at the destination exists' {
|
|
Assert-MockCalled -CommandName 'Test-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to create the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'New-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to copy the archive entry to the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Copy-ArchiveEntryToDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
$testFileMatchesArchiveEntryByChecksumParameterFilter = {
|
|
$fileParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockFile -DifferenceObject $File)
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$checksumParameterCorrect = $Checksum -eq $expandArchiveToDestinationParameters.Checksum
|
|
|
|
return $fileParameterCorrect -and $archiveEntryParameterCorrect -and $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -ParameterFilter $testFileMatchesArchiveEntryByChecksumParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove the existing item at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Expand-ArchiveToDestination @expandArchiveToDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Remove-DirectoryFromDestination' {
|
|
$sortedTestDirectories = @( 'SortedTestDirectory' )
|
|
$testDirectoryPathAtDestination = 'TestDirectoryPathAtDestination'
|
|
$testDirectoryChildItem = @( 'TestChildItem' )
|
|
|
|
Mock -CommandName 'Sort-Object' -MockWith { return $sortedTestDirectories }
|
|
Mock -CommandName 'Join-Path' -MockWith { return $testDirectoryPathAtDestination }
|
|
Mock -CommandName 'Test-Path' -MockWith { return $false }
|
|
Mock -CommandName 'Get-ChildItem' -MockWith { return $null }
|
|
Mock -CommandName 'Remove-Item' -MockWith { }
|
|
|
|
Context 'When specified directory does not exist at the specified destination' {
|
|
$removeDirectoryFromDestination = @{
|
|
Directory = @( 'TestDirectory' )
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-DirectoryFromDestination @removeDirectoryFromDestination } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should sort the specified list of directories' {
|
|
$sortObjectParameterFilter = {
|
|
$inputObjectParameterCorrect = $null -eq (Compare-Object -ReferenceObject $removeDirectoryFromDestination.Directory -DifferenceObject $InputObject)
|
|
$descendingParameterCorrect = $Descending -eq $true
|
|
$uniqueParameterCorrect = $Unique -eq $true
|
|
|
|
return $inputObjectParameterCorrect -and $descendingParameterCorrect -and $uniqueParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Sort-Object' -ParameterFilter $sortObjectParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the path to the specified directory at the specified destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeDirectoryFromDestination.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $sortedTestDirectories[0]
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the directory exists at the destination' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testDirectoryPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt retrieve the child items of the directory at the destination' {
|
|
Assert-MockCalled -CommandName 'Get-ChildItem' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove the item' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-DirectoryFromDestination @removeDirectoryFromDestination | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-Path' -MockWith { return $true }
|
|
|
|
Context 'When specified directory exists at the specified destination and does not have child items' {
|
|
$removeDirectoryFromDestination = @{
|
|
Directory = @( 'TestDirectory' )
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-DirectoryFromDestination @removeDirectoryFromDestination } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should sort the specified list of directories' {
|
|
$sortObjectParameterFilter = {
|
|
$inputObjectParameterCorrect = $null -eq (Compare-Object -ReferenceObject $removeDirectoryFromDestination.Directory -DifferenceObject $InputObject)
|
|
$descendingParameterCorrect = $Descending -eq $true
|
|
$uniqueParameterCorrect = $Unique -eq $true
|
|
|
|
return $inputObjectParameterCorrect -and $descendingParameterCorrect -and $uniqueParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Sort-Object' -ParameterFilter $sortObjectParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the path to the specified directory at the specified destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeDirectoryFromDestination.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $sortedTestDirectories[0]
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the directory exists at the destination' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testDirectoryPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the child items of the directory at the destination' {
|
|
$getChildItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testDirectoryPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ChildItem' -ParameterFilter $getChildItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the item' {
|
|
$removeItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testDirectoryPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-Item' -ParameterFilter $removeItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-DirectoryFromDestination @removeDirectoryFromDestination | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-ChildItem' -MockWith { return $testDirectoryChildItem }
|
|
|
|
Context 'When specified directory exists at the specified destination and has child items' {
|
|
$removeDirectoryFromDestination = @{
|
|
Directory = @( 'TestDirectory' )
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-DirectoryFromDestination @removeDirectoryFromDestination } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should sort the specified list of directories' {
|
|
$sortObjectParameterFilter = {
|
|
$inputObjectParameterCorrect = $null -eq (Compare-Object -ReferenceObject $removeDirectoryFromDestination.Directory -DifferenceObject $InputObject)
|
|
$descendingParameterCorrect = $Descending -eq $true
|
|
$uniqueParameterCorrect = $Unique -eq $true
|
|
|
|
return $inputObjectParameterCorrect -and $descendingParameterCorrect -and $uniqueParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Sort-Object' -ParameterFilter $sortObjectParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the path to the specified directory at the specified destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeDirectoryFromDestination.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $sortedTestDirectories[0]
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the directory exists at the destination' {
|
|
$testPathParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testDirectoryPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-Path' -ParameterFilter $testPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the child items of the directory at the destination' {
|
|
$getChildItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testDirectoryPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ChildItem' -ParameterFilter $getChildItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove the item' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-DirectoryFromDestination @removeDirectoryFromDestination | Should -Be $null
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe 'Remove-ArchiveFromDestination' {
|
|
$testArchiveEntryFullName = 'TestArchiveEntryFullName'
|
|
$testItemPathAtDestination = 'TestItemPathAtDestination'
|
|
$testParentDirectoryPath = 'TestParentDirectoryPath'
|
|
|
|
$mockArchive = New-MockObject -Type 'System.IO.Compression.ZipArchive'
|
|
$mockArchiveEntry = New-MockObject -Type 'System.IO.Compression.ZipArchiveEntry'
|
|
$mockFile = New-MockObject -Type 'System.IO.FileInfo'
|
|
$mockDirectory = New-MockObject -Type 'System.IO.DirectoryInfo'
|
|
|
|
Mock -CommandName 'Open-Archive' -MockWith { return $mockArchive }
|
|
Mock -CommandName 'Get-ArchiveEntries' -MockWith { return @( $mockArchiveEntry ) }
|
|
Mock -CommandName 'Get-ArchiveEntryFullName' -MockWith { return $testArchiveEntryFullName }
|
|
Mock -CommandName 'Join-Path' -MockWith { return $testItemPathAtDestination }
|
|
Mock -CommandName 'Test-ArchiveEntryIsDirectory' -MockWith { return $true }
|
|
Mock -CommandName 'Get-Item' -MockWith { return $null }
|
|
Mock -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -MockWith { return $false }
|
|
Mock -CommandName 'Remove-Item' -MockWith { }
|
|
Mock -CommandName 'Split-Path' -MockWith { return $null }
|
|
Mock -CommandName 'Remove-DirectoryFromDestination' -MockWith { }
|
|
Mock -CommandName 'Close-Archive' -MockWith { }
|
|
|
|
Context 'When archive entry is a directory and does not exist at destination' {
|
|
$removeArchiveFromDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing file at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove any directories from the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-DirectoryFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return $mockFile }
|
|
|
|
Context 'When archive entry is a directory, item with the same name exists at the destination but is a file' {
|
|
$removeArchiveFromDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing file at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove any directories from the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-DirectoryFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return 'NotAFileOrADirectory' }
|
|
|
|
Context 'When archive entry is a directory and item with the same name exists at the destination but is not a file or a directory' {
|
|
$removeArchiveFromDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing file at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove any directories from the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-DirectoryFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return $mockDirectory }
|
|
|
|
Context 'When archive entry is a directory and directory with the same name exists at the root of the destination' {
|
|
$removeArchiveFromDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing file at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
$splitPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveEntryFullName
|
|
$parentParameterCorrect = $Parent -eq $true
|
|
return $pathParameterCorrect -and $parentParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Split-Path' -ParameterFilter $splitPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the specified directory from the destination' {
|
|
$removeDirectoryFromDestinationParameterFilter = {
|
|
$directoryParameterCorrect = $null -eq (Compare-Object -ReferenceObject @( $testArchiveEntryFullName ) -DifferenceObject $Directory)
|
|
$destinationParameterCorrect = $Destination -eq $removeArchiveFromDestinationParameters.Destination
|
|
return $directoryParameterCorrect -and $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-DirectoryFromDestination' -ParameterFilter $removeDirectoryFromDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Split-Path' -MockWith {
|
|
if ($Path -ne $testParentDirectoryPath)
|
|
{
|
|
return $testParentDirectoryPath
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry is a directory and directory with the same name exists within a parent directory at the destination' {
|
|
$removeArchiveFromDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing file at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
$splitPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveEntryFullName
|
|
$parentParameterCorrect = $Parent -eq $true
|
|
return $pathParameterCorrect -and $parentParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Split-Path' -ParameterFilter $splitPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the specified directory and its parent directory from the destination' {
|
|
$removeDirectoryFromDestinationParameterFilter = {
|
|
$directoryParameterCorrect = $null -eq (Compare-Object -ReferenceObject @( $testArchiveEntryFullName, $testParentDirectoryPath ) -DifferenceObject $Directory)
|
|
$destinationParameterCorrect = $Destination -eq $removeArchiveFromDestinationParameters.Destination
|
|
return $directoryParameterCorrect -and $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-DirectoryFromDestination' -ParameterFilter $removeDirectoryFromDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-ArchiveEntryIsDirectory' -MockWith { return $false }
|
|
Mock -CommandName 'Get-Item' -MockWith { return $null }
|
|
Mock -CommandName 'Split-Path' -MockWith { return $null }
|
|
|
|
Context 'When archive entry is a file and does not exist at destination' {
|
|
$removeArchiveFromDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing file at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove any directories from the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-DirectoryFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return $mockDirectory }
|
|
|
|
Context 'When archive entry is a file and item with the same name exists at the destination but is a directory' {
|
|
$removeArchiveFromDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing file at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove any directories from the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-DirectoryFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return 'NotAFileOrADirectory' }
|
|
|
|
Context 'When archive entry is a file and item with the same name exists at the destination but is not a file or a directory' {
|
|
$removeArchiveFromDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing file at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove any directories from the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-DirectoryFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Get-Item' -MockWith { return $mockFile }
|
|
|
|
Context 'When archive entry is a file, file with the same name exists at the root of the destination, and a checksum method is not specified' {
|
|
$removeArchiveFromDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the file at the desired path of the archive entry at the destination' {
|
|
$removeItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-Item' -ParameterFilter $removeItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
$splitPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveEntryFullName
|
|
$parentParameterCorrect = $Parent -eq $true
|
|
return $pathParameterCorrect -and $parentParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Split-Path' -ParameterFilter $splitPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove any directories from the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-DirectoryFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Split-Path' -MockWith {
|
|
if ($Path -ne $testParentDirectoryPath)
|
|
{
|
|
return $testParentDirectoryPath
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry is a file, file with the same name exists within a parent directory at the destination, and a checksum method is not specified' {
|
|
$removeArchiveFromDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the file at the desired path of the archive entry at the destination' {
|
|
$removeItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-Item' -ParameterFilter $removeItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
$splitPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveEntryFullName
|
|
$parentParameterCorrect = $Parent -eq $true
|
|
return $pathParameterCorrect -and $parentParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Split-Path' -ParameterFilter $splitPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the parent directory from the destination' {
|
|
$removeDirectoryFromDestinationParameterFilter = {
|
|
$directoryParameterCorrect = $null -eq (Compare-Object -ReferenceObject @( $testParentDirectoryPath ) -DifferenceObject $Directory)
|
|
$destinationParameterCorrect = $Destination -eq $removeArchiveFromDestinationParameters.Destination
|
|
return $directoryParameterCorrect -and $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-DirectoryFromDestination' -ParameterFilter $removeDirectoryFromDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Context 'When archive entry is a file, file with the same name exists at the destination, and files do not match by the specified checksum method' {
|
|
$removeArchiveFromDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
Checksum = 'SHA-256'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
$testFileMatchesArchiveEntryByChecksumParameterFilter = {
|
|
$fileParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockFile -DifferenceObject $File)
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$checksumParameterCorrect = $Checksum -eq $removeArchiveFromDestinationParameters.Checksum
|
|
|
|
return $fileParameterCorrect -and $archiveEntryParameterCorrect -and $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -ParameterFilter $testFileMatchesArchiveEntryByChecksumParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove an existing file at the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-Item' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
Assert-MockCalled -CommandName 'Split-Path' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not attempt to remove any directories from the destination' {
|
|
Assert-MockCalled -CommandName 'Remove-DirectoryFromDestination' -Exactly 0 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
|
|
Mock -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -MockWith { return $true }
|
|
|
|
Context 'When archive entry is a file, file with the same name exists at the destination, and files match by the specified checksum method' {
|
|
$removeArchiveFromDestinationParameters = @{
|
|
ArchiveSourcePath = 'TestArchiveSourcePath'
|
|
Destination = 'TestDestination'
|
|
Checksum = 'SHA-256'
|
|
}
|
|
|
|
It 'Should not throw' {
|
|
{ Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should open the archive' {
|
|
$openArchiveParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.ArchiveSourcePath
|
|
return $pathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Open-Archive' -ParameterFilter $openArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the entries of the specified archive' {
|
|
$getArchiveEntriesParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntries' -ParameterFilter $getArchiveEntriesParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the full name of the current archive entry' {
|
|
$getArchiveEntryFullNameParameterFilter = {
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
return $archiveEntryParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-ArchiveEntryFullName' -ParameterFilter $getArchiveEntryFullNameParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should find the desired path of the archive entry at the destination' {
|
|
$joinPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $removeArchiveFromDestinationParameters.Destination
|
|
$childPathParameterCorrect = $ChildPath -eq $testArchiveEntryFullName
|
|
|
|
return $pathParameterCorrect -and $childPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Join-Path' -ParameterFilter $joinPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should retrieve the item at the desired path of the archive entry at the destination' {
|
|
$getItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Get-Item' -ParameterFilter $getItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the file at the desired path of the archive entry at the destination matches the archive entry by the specified checksum method' {
|
|
$testFileMatchesArchiveEntryByChecksumParameterFilter = {
|
|
$fileParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockFile -DifferenceObject $File)
|
|
$archiveEntryParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchiveEntry -DifferenceObject $ArchiveEntry)
|
|
$checksumParameterCorrect = $Checksum -eq $removeArchiveFromDestinationParameters.Checksum
|
|
|
|
return $fileParameterCorrect -and $archiveEntryParameterCorrect -and $checksumParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-FileMatchesArchiveEntryByChecksum' -ParameterFilter $testFileMatchesArchiveEntryByChecksumParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the file at the desired path of the archive entry at the destination' {
|
|
$removeItemParameterFilter = {
|
|
$literalPathParameterCorrect = $LiteralPath -eq $testItemPathAtDestination
|
|
return $literalPathParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-Item' -ParameterFilter $removeItemParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should attempt to find the parent directory of the desired path of the archive entry at the destination' {
|
|
$splitPathParameterFilter = {
|
|
$pathParameterCorrect = $Path -eq $testArchiveEntryFullName
|
|
$parentParameterCorrect = $Parent -eq $true
|
|
return $pathParameterCorrect -and $parentParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Split-Path' -ParameterFilter $splitPathParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should test if the archive entry is a directory' {
|
|
$testArchiveEntryIsDirectoryParameterFilter = {
|
|
$archiveEntryNameParameterCorrect = $ArchiveEntryName -eq $testArchiveEntryFullName
|
|
return $archiveEntryNameParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Test-ArchiveEntryIsDirectory' -ParameterFilter $testArchiveEntryIsDirectoryParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should remove the parent directory from the destination' {
|
|
$removeDirectoryFromDestinationParameterFilter = {
|
|
$directoryParameterCorrect = $null -eq (Compare-Object -ReferenceObject @( $testParentDirectoryPath ) -DifferenceObject $Directory)
|
|
$destinationParameterCorrect = $Destination -eq $removeArchiveFromDestinationParameters.Destination
|
|
return $directoryParameterCorrect -and $destinationParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Remove-DirectoryFromDestination' -ParameterFilter $removeDirectoryFromDestinationParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should close the opened archive' {
|
|
$closeArchiveParameterFilter = {
|
|
$archiveParameterCorrect = $null -eq (Compare-Object -ReferenceObject $mockArchive -DifferenceObject $Archive)
|
|
return $archiveParameterCorrect
|
|
}
|
|
|
|
Assert-MockCalled -CommandName 'Close-Archive' -ParameterFilter $closeArchiveParameterFilter -Exactly 1 -Scope 'Context'
|
|
}
|
|
|
|
It 'Should not return anything' {
|
|
Remove-ArchiveFromDestination @removeArchiveFromDestinationParameters | Should -Be $null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|