2018-07-06 20:02:34 +02:00
|
|
|
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
# Licensed under the MIT License.
|
|
|
|
|
2019-04-05 08:01:01 +02:00
|
|
|
Import-Module HelpersCommon
|
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
Describe "Get-ExperimentalFeature Tests" -tags "Feature","RequireAdminOnWindows" {
|
2018-07-06 20:02:34 +02:00
|
|
|
|
|
|
|
BeforeAll {
|
2018-12-05 21:20:58 +01:00
|
|
|
$systemConfigPath = "$PSHOME/powershell.config.json"
|
|
|
|
if ($IsWindows) {
|
|
|
|
$userConfigPath = "~/Documents/powershell/powershell.config.json"
|
2018-07-06 20:02:34 +02:00
|
|
|
}
|
2018-12-05 21:20:58 +01:00
|
|
|
else {
|
|
|
|
$userConfigPath = "~/.config/powershell/powershell.config.json"
|
|
|
|
}
|
|
|
|
|
|
|
|
$systemConfigExists = $false
|
|
|
|
if (Test-Path $systemConfigPath) {
|
|
|
|
$systemConfigExists = $true
|
|
|
|
Move-Item $systemConfigPath "$systemConfigPath.backup" -Force -ErrorAction SilentlyContinue
|
|
|
|
}
|
|
|
|
|
|
|
|
$userConfigExists = $false
|
|
|
|
if (Test-Path $userConfigPath) {
|
|
|
|
$userConfigExists = $true
|
|
|
|
Move-Item $userConfigPath "$userConfigPath.backup" -Force -ErrorAction SilentlyContinue
|
|
|
|
}
|
|
|
|
|
|
|
|
$testModulePath = Join-Path -Path $PSScriptRoot -ChildPath "assets"
|
|
|
|
$testModuleManifestPath = Join-Path -Path $testModulePath "ExpTest" "ExpTest.psd1"
|
|
|
|
$originalModulePath = $env:PSModulePath
|
|
|
|
$env:PSModulePath = $testModulePath
|
2018-07-06 20:02:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
AfterAll {
|
2019-04-05 08:01:01 +02:00
|
|
|
if ($systemConfigExists -and (Test-CanWriteToPsHome)) {
|
2018-12-05 21:20:58 +01:00
|
|
|
Move-Item "$systemConfigPath.backup" $systemConfigPath -Force -ErrorAction SilentlyContinue
|
2018-07-06 20:02:34 +02:00
|
|
|
}
|
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
if ($userConfigExists) {
|
|
|
|
Move-Item "$userConfigPath.backup" $userConfigPath -Force -ErrorAction SilentlyContinue
|
|
|
|
}
|
2018-07-06 20:02:34 +02:00
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
$env:PSModulePath = $originalModulePath
|
|
|
|
}
|
2018-07-06 20:02:34 +02:00
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
AfterEach {
|
2019-04-05 08:01:01 +02:00
|
|
|
if (Test-CanWriteToPsHome) {
|
|
|
|
Remove-Item $systemConfigPath -Force -ErrorAction SilentlyContinue
|
|
|
|
}
|
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
Remove-Item $userConfigPath -Force -ErrorAction SilentlyContinue
|
2018-07-06 20:02:34 +02:00
|
|
|
}
|
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
Context "Feature disabled tests" {
|
2018-07-06 20:02:34 +02:00
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
It "'Get-ExperimentalFeature' should return all available features from module path" {
|
|
|
|
$features = pwsh -noprofile -output xml -command Get-ExperimentalFeature "ExpTest*"
|
|
|
|
$features | Should -Not -BeNullOrEmpty
|
|
|
|
$features[0].Name | Should -BeExactly "ExpTest.FeatureOne"
|
|
|
|
$features[0].Enabled | Should -BeFalse
|
|
|
|
$features[0].Source | Should -BeExactly $testModuleManifestPath
|
2018-07-06 20:02:34 +02:00
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
$features[1].Name | Should -BeExactly "ExpTest.FeatureTwo"
|
|
|
|
$features[1].Enabled | Should -BeFalse
|
|
|
|
$features[1].Source | Should -BeExactly $testModuleManifestPath
|
|
|
|
}
|
2018-07-06 20:02:34 +02:00
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
It "'Get-ExperimentalFeature' pipeline input" {
|
|
|
|
$features = pwsh -noprofile -output xml -command { "ExpTest.FeatureOne", "ExpTest.FeatureTwo" | Get-ExperimentalFeature }
|
|
|
|
$features | Should -Not -BeNullOrEmpty
|
|
|
|
$features[0].Name | Should -BeExactly "ExpTest.FeatureOne"
|
|
|
|
$features[0].Enabled | Should -BeFalse
|
|
|
|
$features[0].Source | Should -BeExactly $testModuleManifestPath
|
|
|
|
|
|
|
|
$features[1].Name | Should -BeExactly "ExpTest.FeatureTwo"
|
|
|
|
$features[1].Enabled | Should -BeFalse
|
|
|
|
$features[1].Source | Should -BeExactly $testModuleManifestPath
|
2018-07-06 20:02:34 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
Context "Feature enabled tests" {
|
|
|
|
BeforeEach {
|
|
|
|
'{"ExperimentalFeatures":["ExpTest.FeatureOne"]}' > $userConfigPath
|
2018-07-06 20:02:34 +02:00
|
|
|
}
|
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
It "'Get-ExperimentalFeature' should return enabled features 'ExpTest.FeatureOne'" {
|
|
|
|
pwsh -noprofile -command '$EnabledExperimentalFeatures.Count' | Should -Be 1
|
|
|
|
$feature = pwsh -noprofile -output xml -command Get-ExperimentalFeature "ExpTest.FeatureOne"
|
|
|
|
$feature | Should -Not -BeNullOrEmpty
|
|
|
|
$feature.Enabled | Should -BeTrue
|
|
|
|
$feature.Source | Should -BeExactly $testModuleManifestPath
|
|
|
|
}
|
|
|
|
|
|
|
|
It "'Get-ExperimentalFeature' should return all available features from module path" {
|
|
|
|
$features = pwsh -noprofile -output xml -command Get-ExperimentalFeature "ExpTest*"
|
|
|
|
$features | Should -Not -BeNullOrEmpty
|
|
|
|
$features[0].Name | Should -BeExactly "ExpTest.FeatureOne"
|
|
|
|
$features[0].Enabled | Should -BeTrue
|
|
|
|
$features[0].Source | Should -BeExactly $testModuleManifestPath
|
|
|
|
|
|
|
|
$features[1].Name | Should -BeExactly "ExpTest.FeatureTwo"
|
|
|
|
$features[1].Enabled | Should -BeFalse
|
|
|
|
$features[1].Source | Should -BeExactly $testModuleManifestPath
|
|
|
|
}
|
2018-07-06 20:02:34 +02:00
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
It "'Get-ExperimentalFeature' pipeline input" {
|
|
|
|
$features = pwsh -noprofile -output xml -command { "ExpTest.FeatureOne", "ExpTest.FeatureTwo" | Get-ExperimentalFeature }
|
|
|
|
$features | Should -Not -BeNullOrEmpty
|
|
|
|
$features[0].Name | Should -BeExactly "ExpTest.FeatureOne"
|
|
|
|
$features[0].Enabled | Should -BeTrue
|
|
|
|
$features[0].Source | Should -BeExactly $testModuleManifestPath
|
2018-07-06 20:02:34 +02:00
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
$features[1].Name | Should -BeExactly "ExpTest.FeatureTwo"
|
|
|
|
$features[1].Enabled | Should -BeFalse
|
|
|
|
$features[1].Source | Should -BeExactly $testModuleManifestPath
|
|
|
|
}
|
2018-07-06 20:02:34 +02:00
|
|
|
}
|
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
Context "User config takes precedence over system config" {
|
2019-04-05 08:01:01 +02:00
|
|
|
It "Feature is enabled in user config only" -Skip:(!(Test-CanWriteToPsHome)) {
|
2018-12-05 21:20:58 +01:00
|
|
|
'{"ExperimentalFeatures":["ExpTest.FeatureOne"]}' > $userConfigPath
|
|
|
|
'{"ExperimentalFeatures":["ExpTest.FeatureTwo"]}' > $systemConfigPath
|
2018-07-06 20:02:34 +02:00
|
|
|
|
2018-12-05 21:20:58 +01:00
|
|
|
$feature = pwsh -noprofile -output xml -command Get-ExperimentalFeature ExpTest.FeatureOne
|
|
|
|
$feature.Enabled | Should -BeTrue -Because "FeatureOne is enabled in user config"
|
|
|
|
$feature = pwsh -noprofile -output xml -command Get-ExperimentalFeature ExpTest.FeatureTwo
|
|
|
|
$feature.Enabled | Should -BeFalse -Because "System config is not read when user config exists"
|
|
|
|
}
|
2018-07-06 20:02:34 +02:00
|
|
|
}
|
|
|
|
}
|