Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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>;

Expand All @@ -38,7 +39,6 @@ namespace AppInstaller::CLI

void Get()
{
Output.Action(ACTION_FULL);
Output.Settings(GetUserSettings());
}

Expand All @@ -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());
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public void Setup()
}

/// <summary>
/// Calls `get` on the `user-settings` resource.
/// Calls `get` on the `user-settings-file` resource.
/// </summary>
[Test]
public void UserSettingsFile_Get()
Expand All @@ -70,12 +70,12 @@ public void UserSettingsFile_Get()
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]
Expand All @@ -90,13 +90,13 @@ public void UserSettingsFile_Set_NoDiff(string action)
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]
Expand All @@ -114,14 +114,37 @@ public void UserSettingsFile_Set_AddFields(string action)

// 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]
Expand All @@ -144,14 +167,14 @@ public void UserSettingsFile_Set_UpdateFields(string action)

// 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]
Expand All @@ -174,15 +197,15 @@ public void UserSettingsFile_Test_InDesiredState(string action)

// 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);
AssertDiffState(testDiff, []);
}

/// <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]
Expand All @@ -205,15 +228,15 @@ public void UserSettingsFile_Test_NotInDesiredState(string action)

// 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);
AssertDiffState(testDiff, [ SettingsPropertyName ]);
}

/// <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()
Expand All @@ -222,12 +245,12 @@ public void UserSettingsFile_Export()
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>
Expand All @@ -239,7 +262,7 @@ private static UserSettingsFileResourceData Get(UserSettingsFileResourceData res
}

/// <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>
Expand All @@ -251,7 +274,7 @@ private static (UserSettingsFileResourceData, List<string>) Set(UserSettingsFile
}

/// <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>
Expand All @@ -263,7 +286,7 @@ private static (UserSettingsFileResourceData, List<string>) Test(UserSettingsFil
}

/// <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>
Expand Down Expand Up @@ -333,6 +356,7 @@ private class UserSettingsFileResourceData
[JsonPropertyName(InDesiredStatePropertyName)]
public bool? InDesiredState { get; set; }

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public string Action { get; set; }

public JsonObject Settings { get; set; }
Expand Down
Loading