commit bdd2cabbe07725e4ab8f8ecbb673bc1cebff36cb
parent 3eca881edb4eb25b58a849a03023b8bfd7eb361a
Author: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com>
Date: Thu, 8 May 2025 21:00:06 -0700
Make partial the default for user-settings-file (#5442)
### ☝🏻 Input `Action` is `Partial` by default
### ✌🏻 Output `Action` is ~always~ somtimes `Partial`
###### Microsoft Reviewers: [Open in
CodeFlow](https://microsoft.github.io/open-pr/?codeflow=https://github.com/microsoft/winget-cli/pull/5442)
Diffstat:
2 files changed, 47 insertions(+), 21 deletions(-)
diff --git a/src/AppInstallerCLICore/Commands/DscUserSettingsFileResource.cpp b/src/AppInstallerCLICore/Commands/DscUserSettingsFileResource.cpp
@@ -4,6 +4,7 @@
#include "DscUserSettingsFileResource.h"
#include "DscComposableObject.h"
#include "Resources.h"
+#include "AppInstallerStrings.h"
using namespace AppInstaller::Utility::literals;
using namespace AppInstaller::Settings;
@@ -16,7 +17,7 @@ namespace AppInstaller::CLI
namespace
{
WINGET_DSC_DEFINE_COMPOSABLE_PROPERTY_FLAGS(SettingsProperty, Json::Value, Settings, "settings", DscComposablePropertyFlag::Required | DscComposablePropertyFlag::CopyToOutput, Resource::String::DscResourcePropertyDescriptionUserSettingsFileSettings);
- WINGET_DSC_DEFINE_COMPOSABLE_PROPERTY_ENUM(ActionProperty, std::string, Action, "action", Resource::String::DscResourcePropertyDescriptionUserSettingsFileAction, ({ ACTION_PARTIAL, ACTION_FULL }), ACTION_FULL);
+ WINGET_DSC_DEFINE_COMPOSABLE_PROPERTY_ENUM(ActionProperty, std::string, Action, "action", Resource::String::DscResourcePropertyDescriptionUserSettingsFileAction, ({ ACTION_PARTIAL, ACTION_FULL }), ACTION_PARTIAL);
using UserSettingsFileResourceObject = DscComposableObject<StandardInDesiredStateProperty, SettingsProperty, ActionProperty>;
@@ -38,7 +39,6 @@ namespace AppInstaller::CLI
void Get()
{
- Output.Action(ACTION_FULL);
Output.Settings(GetUserSettings());
}
@@ -64,12 +64,14 @@ namespace AppInstaller::CLI
THROW_HR_IF(E_UNEXPECTED, !Input.Settings().has_value());
if (!_resolvedInputUserSettings)
{
- if(Input.Action() == ACTION_FULL)
+ if(Input.Action().has_value() && Utility::CaseInsensitiveEquals(Input.Action().value(), ACTION_FULL))
{
+ Output.Action(ACTION_FULL);
_resolvedInputUserSettings = Input.Settings();
}
else
{
+ Output.Action(ACTION_PARTIAL);
_resolvedInputUserSettings = MergeUserSettingsFiles(*Input.Settings());
}
}
diff --git a/src/AppInstallerCLIE2ETests/DSCv3UserSettingsFileResourceCommand.cs b/src/AppInstallerCLIE2ETests/DSCv3UserSettingsFileResourceCommand.cs
@@ -61,7 +61,7 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
}
/// <summary>
- /// Calls `get` on the `user-settings` resource.
+ /// Calls `get` on the `user-settings-file` resource.
/// </summary>
[Test]
public void UserSettingsFile_Get()
@@ -70,12 +70,12 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
var getOutput = Get(new ());
Assert.IsNotNull(getOutput);
- Assert.AreEqual(ActionPropertyValueFull, getOutput.Action);
+ Assert.IsNull(getOutput.Action);
AssertSettingsAreEqual(expected, getOutput.Settings);
}
/// <summary>
- /// Calls `set` on the `user-settings` resource with no diff.
+ /// Calls `set` on the `user-settings-file` resource with no diff.
/// </summary>
/// <param name="action">The action value.</param>
[Test]
@@ -90,13 +90,13 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
var expected = GetCurrentUserSettings();
Assert.IsNotNull(setOutput);
- Assert.AreEqual(ActionPropertyValueFull, setOutput.Action);
+ Assert.AreEqual(action, setOutput.Action);
AssertSettingsAreEqual(expected, setOutput.Settings);
AssertDiffState(setDiff, []);
}
/// <summary>
- /// Calls `set` on the `user-settings` resource to add fields.
+ /// Calls `set` on the `user-settings-file` resource to add fields.
/// </summary>
/// <param name="action">The action value.</param>
[Test]
@@ -114,14 +114,37 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
// Assert that the settings are added
Assert.IsNotNull(setOutput);
- Assert.AreEqual(ActionPropertyValueFull, setOutput.Action);
+ Assert.AreEqual(action, setOutput.Action);
AssertMockProperties(setOutput.Settings, "mock");
AssertSettingsAreEqual(expected, setOutput.Settings);
AssertDiffState(setDiff, [ SettingsPropertyName ]);
}
/// <summary>
- /// Calls `set` on the `user-settings` resource to update fields.
+ /// Calls `set` on the `user-settings-file` resource to ensure action is partial by default.
+ /// </summary>
+ [Test]
+ public void UserSettingsFile_Set_ActionIsPartialByDefault()
+ {
+ // Call `set` to add mock properties to the settings
+ var setSettings = GetSettingsArg(ActionPropertyValuePartial);
+ AddOrModifyMockProperties(setSettings, "mock");
+
+ var expected = GetCurrentUserSettings();
+ AddOrModifyMockProperties(expected, "mock");
+
+ (var setOutput, var setDiff) = Set(new () { Settings = setSettings });
+
+ // Assert that the settings are added
+ Assert.IsNotNull(setOutput);
+ Assert.AreEqual(setOutput.Action, ActionPropertyValuePartial);
+ AssertMockProperties(setOutput.Settings, "mock");
+ AssertSettingsAreEqual(expected, setOutput.Settings);
+ AssertDiffState(setDiff, [ SettingsPropertyName ]);
+ }
+
+ /// <summary>
+ /// Calls `set` on the `user-settings-file` resource to update fields.
/// </summary>
/// <param name="action">The action value.</param>
[Test]
@@ -144,14 +167,14 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
// Assert that the settings are updated
Assert.IsNotNull(setOutput);
- Assert.AreEqual(ActionPropertyValueFull, setOutput.Action);
+ Assert.AreEqual(action, setOutput.Action);
AssertMockProperties(setOutput.Settings, "mock_new");
AssertSettingsAreEqual(expected, setOutput.Settings);
AssertDiffState(setDiff, [ SettingsPropertyName ]);
}
/// <summary>
- /// Calls `test` on the `user-settings` resource to check if the settings are in desired state.
+ /// Calls `test` on the `user-settings-file` resource to check if the settings are in desired state.
/// </summary>
/// <param name="action">The action value.</param>
[Test]
@@ -174,7 +197,7 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
// Assert that the settings are in desired state
Assert.IsNotNull(testOutput);
- Assert.AreEqual(ActionPropertyValueFull, testOutput.Action);
+ Assert.AreEqual(action, testOutput.Action);
AssertMockProperties(testOutput.Settings, "mock");
AssertSettingsAreEqual(expected, testOutput.Settings);
Assert.IsTrue(testOutput.InDesiredState);
@@ -182,7 +205,7 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
}
/// <summary>
- /// Calls `test` on the `user-settings` resource to check if the settings are not in desired state.
+ /// Calls `test` on the `user-settings-file` resource to check if the settings are not in desired state.
/// </summary>
/// <param name="action">The action value.</param>
[Test]
@@ -205,7 +228,7 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
// Assert that the settings are not in desired state
Assert.IsNotNull(testOutput);
- Assert.AreEqual(ActionPropertyValueFull, testOutput.Action);
+ Assert.AreEqual(action, testOutput.Action);
AssertMockProperties(testOutput.Settings, "mock_set");
AssertSettingsAreEqual(expected, testOutput.Settings);
Assert.IsFalse(testOutput.InDesiredState);
@@ -213,7 +236,7 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
}
/// <summary>
- /// Calls `export` on the `user-settings` resource to export the settings.
+ /// Calls `export` on the `user-settings-file` resource to export the settings.
/// </summary>
[Test]
public void UserSettingsFile_Export()
@@ -222,12 +245,12 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
var exportOutput = Export(new ());
Assert.IsNotNull(exportOutput);
- Assert.AreEqual(ActionPropertyValueFull, exportOutput.Action);
+ Assert.IsNull(exportOutput.Action);
AssertSettingsAreEqual(expected, exportOutput.Settings);
}
/// <summary>
- /// Calls `get` on the `user-settings` resource.
+ /// Calls `get` on the `user-settings-file` resource.
/// </summary>
/// <param name="resourceData">The input resource data.</param>
/// <returns>The output resource data.</returns>
@@ -239,7 +262,7 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
}
/// <summary>
- /// Calls `set` on the `user-settings` resource.
+ /// Calls `set` on the `user-settings-file` resource.
/// </summary>
/// <param name="resourceData">The input resource data.</param>
/// <returns>The output resource data and the diff.</returns>
@@ -251,7 +274,7 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
}
/// <summary>
- /// Calls `test` on the `user-settings` resource.
+ /// Calls `test` on the `user-settings-file` resource.
/// </summary>
/// <param name="resourceData">The input resource data.</param>
/// <returns>The output resource data and the diff.</returns>
@@ -263,7 +286,7 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
}
/// <summary>
- /// Calls `export` on the `user-settings` resource.
+ /// Calls `export` on the `user-settings-file` resource.
/// </summary>
/// <param name="resourceData">The input resource data.</param>
/// <returns>The output resource data.</returns>
@@ -333,6 +356,7 @@ public class DSCv3UserSettingsFileResourceCommand : DSCv3ResourceTestBase
[JsonPropertyName(InDesiredStatePropertyName)]
public bool? InDesiredState { get; set; }
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public string Action { get; set; }
public JsonObject Settings { get; set; }