winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

ExperimentalFeature.cpp (2970B)


      1 // Copyright (c) Microsoft Corporation.
      2 // Licensed under the MIT License.
      3 #include "pch.h"
      4 #include "TestCommon.h"
      5 #include "TestSettings.h"
      6 #include <winget/ExperimentalFeature.h>
      7 #include <winget/Settings.h>
      8 
      9 #include <AppInstallerErrors.h>
     10 
     11 using namespace AppInstaller::Settings;
     12 using namespace TestCommon;
     13 
     14 TEST_CASE("ExperimentalFeature None", "[experimentalFeature]")
     15 {
     16     // Make sure Feature::None is always enabled.
     17     REQUIRE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::None));
     18 
     19     // Make sure to throw requesting Feature::None
     20     REQUIRE_THROWS_HR(ExperimentalFeature::GetFeature(ExperimentalFeature::Feature::None), E_UNEXPECTED);
     21 
     22     // Make sure Feature::None is not disabled by Group Policy
     23     auto policiesKey = RegCreateVolatileTestRoot();
     24     SetRegistryValue(policiesKey.get(), ExperimentalFeaturesPolicyValueName, false);
     25     GroupPolicyTestOverride policies{ policiesKey.get() };
     26     REQUIRE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::None));
     27 }
     28 
     29 TEST_CASE("ExperimentalFeature ExperimentalCmd", "[experimentalFeature]")
     30 {
     31     auto again = DeleteUserSettingsFiles();
     32 
     33     SECTION("Feature off default")
     34     {
     35         UserSettingsTest userSettingTest;
     36 
     37         REQUIRE_FALSE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::ExperimentalCmd, userSettingTest));
     38     }
     39     SECTION("Feature on")
     40     {
     41         std::string_view json = R"({ "experimentalFeatures": { "experimentalCmd": true } })";
     42         SetSetting(Stream::PrimaryUserSettings, json);
     43         UserSettingsTest userSettingTest;
     44 
     45         REQUIRE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::ExperimentalCmd, userSettingTest));
     46     }
     47     SECTION("Feature off")
     48     {
     49         std::string_view json = R"({ "experimentalFeatures": { "experimentalCmd": false } })";
     50         SetSetting(Stream::PrimaryUserSettings, json);
     51         UserSettingsTest userSettingTest;
     52 
     53         REQUIRE_FALSE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::ExperimentalCmd, userSettingTest));
     54     }
     55     SECTION("Invalid value")
     56     {
     57         std::string_view json = R"({ "experimentalFeatures": { "experimentalCmd": "string" } })";
     58         SetSetting(Stream::PrimaryUserSettings, json);
     59         UserSettingsTest userSettingTest;
     60 
     61         REQUIRE_FALSE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::ExperimentalCmd, userSettingTest));
     62     }
     63     SECTION("Disabled by group policy")
     64     {
     65         auto policiesKey = RegCreateVolatileTestRoot();
     66         SetRegistryValue(policiesKey.get(), ExperimentalFeaturesPolicyValueName, false);
     67         GroupPolicyTestOverride policies{ policiesKey.get() };
     68 
     69         std::string_view json = R"({ "experimentalFeatures": { "experimentalCmd": true } })";
     70         SetSetting(Stream::PrimaryUserSettings, json);
     71         UserSettingsTest userSettingTest;
     72 
     73         REQUIRE_FALSE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::ExperimentalCmd, userSettingTest));
     74     }
     75 }