313 lines
9.7 KiB
PowerShell
313 lines
9.7 KiB
PowerShell
|
. $PSScriptRoot\..\..\Load-PesterModules.ps1
|
|||
|
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|||
|
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.tests\.', '.'
|
|||
|
$functionPath = Join-Path -Path $here -ChildPath $sut
|
|||
|
Write-Host "Overriding SUT: $functionPath"
|
|||
|
Import-Module $functionPath -Force
|
|||
|
$moduleForMock = ""
|
|||
|
|
|||
|
describe -Tag 'Unit' 'Open-AlkamiSites' {
|
|||
|
|
|||
|
Context "Default Mocks" {
|
|||
|
|
|||
|
Mock -ModuleName $moduleForMock Get-IisSiteList -MockWith {
|
|||
|
|
|||
|
$adminBindings = @(
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "admin.fooSite.com"
|
|||
|
protocol = "http"
|
|||
|
},
|
|||
|
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "admin.barSite.com"
|
|||
|
protocol = "https"
|
|||
|
})
|
|||
|
|
|||
|
$sites = @( [PsCustomObject]@{
|
|||
|
Bindings = $adminBindings
|
|||
|
State = "Started"
|
|||
|
},
|
|||
|
[PsCustomObject]@{
|
|||
|
Bindings = $adminBindings
|
|||
|
State = "Stopped"
|
|||
|
}
|
|||
|
)
|
|||
|
return $sites;
|
|||
|
} -ParameterFilter { $adminSitesOnly -and $adminSitesOnly -eq $true }
|
|||
|
|
|||
|
Mock -ModuleName $moduleForMock Get-IisSiteList -MockWith {
|
|||
|
|
|||
|
$adminBindings = @(
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "admin.fooSite.com"
|
|||
|
protocol = "http"
|
|||
|
},
|
|||
|
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "admin.barSite.com"
|
|||
|
protocol = "https"
|
|||
|
})
|
|||
|
|
|||
|
$bindings = @(
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "www.fooSite.com"
|
|||
|
protocol = "http"
|
|||
|
},
|
|||
|
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "www.barSite.com"
|
|||
|
protocol = "https"
|
|||
|
})
|
|||
|
|
|||
|
$sites = @( [PsCustomObject]@{
|
|||
|
Bindings = $adminBindings
|
|||
|
State = "Started"
|
|||
|
},
|
|||
|
[PsCustomObject]@{
|
|||
|
Bindings = $bindings
|
|||
|
State = "Started"
|
|||
|
},
|
|||
|
[PsCustomObject]@{
|
|||
|
Bindings = $adminBindings
|
|||
|
State = "Stopped"
|
|||
|
},
|
|||
|
[PsCustomObject]@{
|
|||
|
Bindings = $bindings
|
|||
|
State = "Stopped"
|
|||
|
}
|
|||
|
)
|
|||
|
return $sites;
|
|||
|
}
|
|||
|
|
|||
|
Mock -ModuleName $moduleForMock Open-UrlInDefaultBrowser -MockWith { return $null }
|
|||
|
|
|||
|
it "should open sites" {
|
|||
|
|
|||
|
$openedSites = Open-AlkamiSites -adminSitesOnly -returnSites
|
|||
|
|
|||
|
Assert-MockCalled -ModuleName $moduleForMock Open-UrlInDefaultBrowser
|
|||
|
$openedSites.Count | should -BeGreaterThan 0
|
|||
|
}
|
|||
|
|
|||
|
it "should get random sites when Random == true" {
|
|||
|
Mock -ModuleName $moduleForMock Get-Random -MockWith { return $null }
|
|||
|
|
|||
|
Open-AlkamiSites -Random
|
|||
|
|
|||
|
Assert-MockCalled -ModuleName $moduleForMock Get-Random
|
|||
|
}
|
|||
|
|
|||
|
it "should only open https sites" {
|
|||
|
|
|||
|
$openedSites = Open-AlkamiSites -adminSitesOnly -returnSites
|
|||
|
|
|||
|
Assert-MockCalled -ModuleName $moduleForMock Open-UrlInDefaultBrowser
|
|||
|
|
|||
|
$openedSites.Count | should -BeGreaterThan 0
|
|||
|
|
|||
|
foreach ($site in $openedSites) {
|
|||
|
$site.protocol | should -Be "https"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
it "should only open Admin Sites when AdminOnly == true" {
|
|||
|
|
|||
|
$openedSites = Open-AlkamiSites -adminSitesOnly -returnSites
|
|||
|
|
|||
|
Assert-MockCalled -ModuleName $moduleForMock Open-UrlInDefaultBrowser
|
|||
|
|
|||
|
$openedSites.Count | should -BeGreaterThan 0
|
|||
|
|
|||
|
foreach ($site in $openedSites) {
|
|||
|
$site.host | should -Match "admin"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
it "should open all sites when AdminOnly == false" {
|
|||
|
|
|||
|
$openedSites = Open-AlkamiSites -returnSites
|
|||
|
|
|||
|
Assert-MockCalled -ModuleName $moduleForMock Open-UrlInDefaultBrowser
|
|||
|
$countNonAdminSites = 0
|
|||
|
|
|||
|
foreach ($site in $openedSites) {
|
|||
|
if ($site.host -match "www") {
|
|||
|
$countNonAdminSites++
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
$countNonAdminSites | should -BeGreaterThan 0
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
it "should not return sites without the returnSites switch set" {
|
|||
|
$openedSites = Open-AlkamiSites
|
|||
|
|
|||
|
Assert-MockCalled -ModuleName $moduleForMock Open-UrlInDefaultBrowser
|
|||
|
$openedSites | should -BeNullOrEmpty
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Context "Custom Mocks" {
|
|||
|
Mock -ModuleName $moduleForMock Open-UrlInDefaultBrowser -MockWith { return $null }
|
|||
|
|
|||
|
it "should not open sites if none exist" {
|
|||
|
|
|||
|
Mock -ModuleName $moduleForMock Get-IisSiteList -MockWith { return $null }
|
|||
|
|
|||
|
$openedSites = Open-AlkamiSites -returnSites
|
|||
|
|
|||
|
$openedSites.Count | should -Be 0
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
it "should not open sites if no https sites exist" {
|
|||
|
Mock -ModuleName $moduleForMock Get-IisSiteList -MockWith {
|
|||
|
|
|||
|
$adminBindings = @(
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "admin.fooSite.com"
|
|||
|
protocol = "http"
|
|||
|
})
|
|||
|
|
|||
|
$bindings = @(
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "www.fooSite.com"
|
|||
|
protocol = "http"
|
|||
|
})
|
|||
|
|
|||
|
$sites = @( [PsCustomObject]@{
|
|||
|
Bindings = $adminBindings
|
|||
|
State = "Started"
|
|||
|
},
|
|||
|
[PsCustomObject]@{
|
|||
|
Bindings = $bindings
|
|||
|
State = "Started"
|
|||
|
},
|
|||
|
[PsCustomObject]@{
|
|||
|
Bindings = $adminBindings
|
|||
|
State = "Stopped"
|
|||
|
},
|
|||
|
[PsCustomObject]@{
|
|||
|
Bindings = $bindings
|
|||
|
State = "Stopped"
|
|||
|
}
|
|||
|
)
|
|||
|
return $sites;
|
|||
|
}
|
|||
|
$openedSites = Open-AlkamiSites -returnSites
|
|||
|
|
|||
|
$openedSites.Count | should -Be 0
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
it "should only open sites which match the filter when it's provided" {
|
|||
|
Mock -ModuleName $moduleForMock Get-IisSiteList -MockWith {
|
|||
|
|
|||
|
$adminBindings = @(
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "admin.fooSite.com"
|
|||
|
protocol = "https"
|
|||
|
},
|
|||
|
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "admin.barSite.com"
|
|||
|
protocol = "https"
|
|||
|
})
|
|||
|
|
|||
|
$bindings = @(
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "www.fooSite.com"
|
|||
|
protocol = "https"
|
|||
|
},
|
|||
|
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "www.barSite.com"
|
|||
|
protocol = "https"
|
|||
|
})
|
|||
|
|
|||
|
$sites = @( [PsCustomObject]@{
|
|||
|
Bindings = $adminBindings
|
|||
|
State = "Started"
|
|||
|
},
|
|||
|
[PsCustomObject]@{
|
|||
|
Bindings = $bindings
|
|||
|
State = "Started"
|
|||
|
},
|
|||
|
[PsCustomObject]@{
|
|||
|
Bindings = $adminBindings
|
|||
|
State = "Stopped"
|
|||
|
},
|
|||
|
[PsCustomObject]@{
|
|||
|
Bindings = $bindings
|
|||
|
State = "Stopped"
|
|||
|
}
|
|||
|
)
|
|||
|
return $sites;
|
|||
|
}
|
|||
|
|
|||
|
$openedSites = Open-AlkamiSites -filter "foo" -returnSites
|
|||
|
|
|||
|
Assert-MockCalled -ModuleName $moduleForMock Open-UrlInDefaultBrowser
|
|||
|
$openedSites.Count | should -BeGreaterThan 0
|
|||
|
|
|||
|
foreach ($site in $openedSites) {
|
|||
|
Write-Host $site.host
|
|||
|
$site.host | should -Not -Match "bar"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
it "should only open Started sites" {
|
|||
|
Mock -ModuleName $moduleForMock Get-IisSiteList -MockWith {
|
|||
|
|
|||
|
$startedBindings = @(
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "www.startedSite.com"
|
|||
|
protocol = "https"
|
|||
|
}
|
|||
|
)
|
|||
|
$stoppedBindings = @(
|
|||
|
[PsCustomObject]
|
|||
|
@{
|
|||
|
host = "www.stoppedSite.com"
|
|||
|
protocol = "https"
|
|||
|
}
|
|||
|
)
|
|||
|
$sites = @( [PsCustomObject]@{
|
|||
|
Bindings = $startedBindings
|
|||
|
State = "Started"
|
|||
|
},
|
|||
|
[PsCustomObject]@{
|
|||
|
Bindings = $stoppedBindings
|
|||
|
State = "Stopped"
|
|||
|
}
|
|||
|
)
|
|||
|
return $sites;
|
|||
|
}
|
|||
|
|
|||
|
$openedSites = Open-AlkamiSites -adminSitesOnly -returnSites
|
|||
|
|
|||
|
Assert-MockCalled -ModuleName $moduleForMock Open-UrlInDefaultBrowser
|
|||
|
$openedSites.Count | should -BeGreaterThan 0
|
|||
|
|
|||
|
foreach ($site in $openedSites) {
|
|||
|
Write-Host $site.host
|
|||
|
Write-Host $site.State
|
|||
|
$site.host | should -Match "started"
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|