From 7e023a79441a2852e98d2439072013c2ed48373e Mon Sep 17 00:00:00 2001 From: Keivan Beigi Date: Mon, 23 Nov 2015 21:57:01 -0800 Subject: [PATCH] ConfigServiceFixture shouldn't be touching the DB. --- .../Configuration/ConfigServiceFixture.cs | 103 ++++++------------ .../Configuration/ConfigService.cs | 45 +++----- .../Configuration/IConfigService.cs | 2 - 3 files changed, 48 insertions(+), 102 deletions(-) diff --git a/src/NzbDrone.Core.Test/Configuration/ConfigServiceFixture.cs b/src/NzbDrone.Core.Test/Configuration/ConfigServiceFixture.cs index 5f686eac3..c472b1324 100644 --- a/src/NzbDrone.Core.Test/Configuration/ConfigServiceFixture.cs +++ b/src/NzbDrone.Core.Test/Configuration/ConfigServiceFixture.cs @@ -1,110 +1,59 @@ using System; +using System.Collections.Generic; using System.Linq; using FluentAssertions; +using Moq; using NUnit.Framework; using NzbDrone.Core.Configuration; -using NzbDrone.Core.Test.Framework; +using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.Configuration { [TestFixture] - public class ConfigServiceFixture : DbTest + public class ConfigServiceFixture : TestBase { [SetUp] public void SetUp() { - Mocker.SetConstant(Mocker.Resolve()); - - Db.All().ForEach(Db.Delete); } [Test] public void Add_new_value_to_database() { - const string key = "MY_KEY"; - const string value = "MY_VALUE"; + const string key = "RssSyncInterval"; + const int value = 12; - Subject.SetValue(key, value); - Subject.GetValue(key, "").Should().Be(value); - } + Subject.RssSyncInterval = value; - [Test] - public void Get_value_from_database() - { - const string key = "MY_KEY"; - const string value = "MY_VALUE"; - - - Db.Insert(new Config { Key = key, Value = value }); - Db.Insert(new Config { Key = "Other Key", Value = "OtherValue" }); - - var result = Subject.GetValue(key, ""); - - result.Should().Be(value); + AssertUpsert(key, value); } [Test] public void Get_value_should_return_default_when_no_value() { - const string key = "MY_KEY"; - const string value = "MY_VALUE"; - - var result = Subject.GetValue(key, value); - - result.Should().Be(value); - } - - [Test] - public void New_value_should_update_old_value_new_value() - { - const string key = "MY_KEY"; - const string originalValue = "OLD_VALUE"; - const string newValue = "NEW_VALUE"; - - Db.Insert(new Config { Key = key, Value = originalValue }); - - Subject.SetValue(key, newValue); - var result = Subject.GetValue(key, ""); - - - result.Should().Be(newValue); - AllStoredModels.Should().HaveCount(1); - } - - [Test] - public void New_value_should_update_old_value_same_value() - { - const string key = "MY_KEY"; - const string value = "OLD_VALUE"; - - Subject.SetValue(key, value); - Subject.SetValue(key, value); - var result = Subject.GetValue(key, ""); - - result.Should().Be(value); - AllStoredModels.Should().HaveCount(1); + Subject.RssSyncInterval.Should().Be(15); } [Test] public void get_value_with_persist_should_store_default_value() { - const string key = "MY_KEY"; - string value = Guid.NewGuid().ToString(); - - Subject.GetValue(key, value, persist: true).Should().Be(value); - Subject.GetValue(key, string.Empty).Should().Be(value); + var salt = Subject.HmacSalt; + salt.Should().NotBeNullOrWhiteSpace(); + AssertUpsert("HmacSalt", salt); } [Test] public void get_value_with_out_persist_should_not_store_default_value() { - const string key = "MY_KEY"; - string value1 = Guid.NewGuid().ToString(); - string value2 = Guid.NewGuid().ToString(); + var interval = Subject.RssSyncInterval; + interval.Should().Be(15); + Mocker.GetMock().Verify(c => c.Insert(It.IsAny()), Times.Never()); + } - Subject.GetValue(key, value1).Should().Be(value1); - Subject.GetValue(key, value2).Should().Be(value2); + private void AssertUpsert(string key, object value) + { + Mocker.GetMock().Verify(c => c.Upsert(It.Is(v => v.Key == key.ToLowerInvariant() && v.Value == value.ToString()))); } [Test] @@ -114,6 +63,17 @@ public void config_properties_should_write_and_read_using_same_key() var configProvider = Subject; var allProperties = typeof(ConfigService).GetProperties().Where(p => p.GetSetMethod() != null).ToList(); + var keys = new List(); + var values = new List(); + + Mocker.GetMock().Setup(c => c.Upsert(It.IsAny())).Callback(config => + { + keys.Add(config.Key); + values.Add(config); + }); + + + Mocker.GetMock().Setup(c => c.All()).Returns(values); foreach (var propertyInfo in allProperties) @@ -148,8 +108,7 @@ public void config_properties_should_write_and_read_using_same_key() returnValue.Should().Be(value, propertyInfo.Name); } - AllStoredModels.Should() - .HaveSameCount(allProperties, "two different properties are writing to the same key in db. Copy/Past fail."); + keys.Should().OnlyHaveUniqueItems(); } } } \ No newline at end of file diff --git a/src/NzbDrone.Core/Configuration/ConfigService.cs b/src/NzbDrone.Core/Configuration/ConfigService.cs index 82542851a..31b0936cb 100644 --- a/src/NzbDrone.Core/Configuration/ConfigService.cs +++ b/src/NzbDrone.Core/Configuration/ConfigService.cs @@ -30,12 +30,7 @@ public ConfigService(IConfigRepository repository, IEventAggregator eventAggrega _cache = new Dictionary(); } - public IEnumerable All() - { - return _repository.All(); - } - - public Dictionary AllWithDefaults() + private Dictionary AllWithDefaults() { var dict = new Dictionary(StringComparer.InvariantCultureIgnoreCase); @@ -45,7 +40,6 @@ public Dictionary AllWithDefaults() foreach (var propertyInfo in properties) { var value = propertyInfo.GetValue(this, null); - dict.Add(propertyInfo.Name, value); } @@ -65,7 +59,9 @@ public void SaveConfigDictionary(Dictionary configValues) var equal = configValue.Value.ToString().Equals(currentValue.ToString()); if (!equal) + { SetValue(configValue.Key, configValue.Value.ToString()); + } } _eventAggregator.PublishEvent(new ConfigSavedEvent()); @@ -331,7 +327,7 @@ private int GetValueInt(string key, int defaultValue = 0) return Convert.ToInt32(GetValue(key, defaultValue)); } - public T GetValueEnum(string key, T defaultValue) + private T GetValueEnum(string key, T defaultValue) { return (T)Enum.Parse(typeof(T), GetValue(key, defaultValue), true); } @@ -346,7 +342,9 @@ public string GetValue(string key, object defaultValue, bool persist = false) string dbValue; if (_cache.TryGetValue(key, out dbValue) && dbValue != null && !string.IsNullOrEmpty(dbValue)) + { return dbValue; + } _logger.Trace("Using default config value for '{0}' defaultValue:'{1}'", key, defaultValue); @@ -354,6 +352,7 @@ public string GetValue(string key, object defaultValue, bool persist = false) { SetValue(key, defaultValue.ToString()); } + return defaultValue.ToString(); } @@ -367,44 +366,34 @@ private void SetValue(string key, int value) SetValue(key, value.ToString()); } - public void SetValue(string key, string value) + private void SetValue(string key, Enum value) + { + SetValue(key, value.ToString().ToLower()); + } + + private void SetValue(string key, string value) { key = key.ToLowerInvariant(); _logger.Trace("Writing Setting to database. Key:'{0}' Value:'{1}'", key, value); - - var dbValue = _repository.Get(key); - - if (dbValue == null) - { - _repository.Insert(new Config { Key = key, Value = value }); - } - else - { - dbValue.Value = value; - _repository.Update(dbValue); - } + _repository.Upsert(new Config {Key = key, Value = value}); ClearCache(); } - public void SetValue(string key, Enum value) - { - SetValue(key, value.ToString().ToLower()); - } - private void EnsureCache() { lock (_cache) { if (!_cache.Any()) { - _cache = All().ToDictionary(c => c.Key.ToLower(), c => c.Value); + var all = _repository.All(); + _cache = all.ToDictionary(c => c.Key.ToLower(), c => c.Value); } } } - public static void ClearCache() + private static void ClearCache() { lock (_cache) { diff --git a/src/NzbDrone.Core/Configuration/IConfigService.cs b/src/NzbDrone.Core/Configuration/IConfigService.cs index 1ec3a941f..b2f408595 100644 --- a/src/NzbDrone.Core/Configuration/IConfigService.cs +++ b/src/NzbDrone.Core/Configuration/IConfigService.cs @@ -6,8 +6,6 @@ namespace NzbDrone.Core.Configuration { public interface IConfigService { - IEnumerable All(); - Dictionary AllWithDefaults(); void SaveConfigDictionary(Dictionary configValues); bool IsDefined(string key);