diff --git a/src/Artemis.Core.Tests/Services/SettingsServiceTests.cs b/src/Artemis.Core.Tests/Services/SettingsServiceTests.cs index 61db1621a..5ac449802 100644 --- a/src/Artemis.Core.Tests/Services/SettingsServiceTests.cs +++ b/src/Artemis.Core.Tests/Services/SettingsServiceTests.cs @@ -75,15 +75,13 @@ public class SettingsServiceTests : IDisposable } [Fact] - public void GetSetting_AStoredValueThatDoesNotFitTheType_UsesTheDefaultOfTheType() + public void GetSetting_AStoredValueThatDoesNotFitTheType_UsesTheDefaultValuePassedIn() { Settings.GetSetting("Tests.Value", "not a number"); - // Pinned as-is: when the stored value can't be read as the requested type the setting falls back to default(T) - // rather than to the default value passed in, so the caller's default of 7 is ignored here PluginSetting setting = CreateNewSettingsService().GetSetting("Tests.Value", 7); - setting.Value.ShouldBe(0); + setting.Value.ShouldBe(7); setting.HasChanged.ShouldBeTrue(); } diff --git a/src/Artemis.Core/Plugins/Settings/PluginSetting.cs b/src/Artemis.Core/Plugins/Settings/PluginSetting.cs index 8f14d542f..7eb1abbc4 100644 --- a/src/Artemis.Core/Plugins/Settings/PluginSetting.cs +++ b/src/Artemis.Core/Plugins/Settings/PluginSetting.cs @@ -15,7 +15,7 @@ public class PluginSetting : CorePropertyChanged, IPluginSetting private readonly PluginSettingEntity _pluginSettingEntity; private T _value; - internal PluginSetting(IPluginRepository pluginRepository, PluginSettingEntity pluginSettingEntity) + internal PluginSetting(IPluginRepository pluginRepository, PluginSettingEntity pluginSettingEntity, T? defaultValue = default) { _pluginRepository = pluginRepository; _pluginSettingEntity = pluginSettingEntity; @@ -27,7 +27,7 @@ public class PluginSetting : CorePropertyChanged, IPluginSetting } catch (JsonException) { - _value = default!; + _value = defaultValue!; } } diff --git a/src/Artemis.Core/Plugins/Settings/PluginSettings.cs b/src/Artemis.Core/Plugins/Settings/PluginSettings.cs index 811dcf817..34f126910 100644 --- a/src/Artemis.Core/Plugins/Settings/PluginSettings.cs +++ b/src/Artemis.Core/Plugins/Settings/PluginSettings.cs @@ -32,7 +32,7 @@ public class PluginSettings /// /// The type of the setting, can be any serializable type /// The name of the setting, may not be longer than 128 characters - /// The default value to use if the setting does not exist yet + /// The default value to use if the setting does not exist yet, or can't be read as public PluginSetting GetSetting(string name, T? defaultValue = default) { if (name.Length > 128) @@ -57,7 +57,7 @@ public class PluginSettings _pluginRepository.SaveSetting(settingEntity); } - PluginSetting pluginSetting = new(_pluginRepository, settingEntity); + PluginSetting pluginSetting = new(_pluginRepository, settingEntity, defaultValue); // This overrides null with the default value, I'm not sure if that's desirable because you // might expect something to go null and you might not