Skip to content

Commit 856a0c3

Browse files
Added tests to config settings
1 parent 15b5f4c commit 856a0c3

6 files changed

Lines changed: 117 additions & 33 deletions

File tree

src/Config.SqlStreamStore.Tests/ConfigRepositoryTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public async Task Can_modify_existing_settings()
4242
{
4343
var settings = await SaveSettings(BuildNewSettings());
4444

45-
var modified = settings.Modify(("setting1", "newValue"));
45+
var modified = settings.WithModifiedSettings(("setting1", "newValue"));
4646

4747
Assert.NotEqual(settings, modified);
4848

@@ -57,7 +57,7 @@ public async Task Can_delete_existing_settings()
5757
{
5858
var settings = await SaveSettings(BuildNewSettings());
5959

60-
var modified = settings.Delete("setting1");
60+
var modified = settings.WithDeletedKeys("setting1");
6161

6262
Assert.NotEqual(settings, modified);
6363

@@ -90,7 +90,7 @@ Task OnSettingsChanged(ConfigurationSettings configurationSettings, Cancellation
9090
var subscription = _configRepository.SubscribeToChanges(settings.Version, OnSettingsChanged,
9191
ct: CancellationToken.None);
9292

93-
var modified = await _configRepository.WriteChanges(settings.Modify(("setting1", "newValue")), CancellationToken.None);
93+
var modified = await _configRepository.WriteChanges(settings.WithModifiedSettings(("setting1", "newValue")), CancellationToken.None);
9494

9595
var noftifiedSettings = await Task.WhenAny(tcs.Task, Task.Delay(TimeSpan.FromSeconds(1)));
9696

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using Xunit;
5+
6+
namespace Config.SqlStreamStore.Tests
7+
{
8+
public class ConfigurationSettingsTests
9+
{
10+
public class When_modifying_settings
11+
{
12+
private readonly ConfigurationSettings _configurationSettings;
13+
private readonly ModifiedConfigurationSettings _modifiedConfigurationSettings;
14+
15+
public When_modifying_settings()
16+
{
17+
_configurationSettings = ConfigurationSettings.Create(
18+
("1_unchanging", "initial"),
19+
("2_modified", "initial"),
20+
("3_modified_to_same_value", "initial"),
21+
("4_deleted", "initial")
22+
23+
);
24+
25+
_modifiedConfigurationSettings = _configurationSettings
26+
.WithDeletedKeys(
27+
"4_deleted")
28+
.WithModifiedSettings(
29+
("2_modified", "modified"),
30+
("3_modified_to_same_value", "initial"),
31+
("5_new", "new"));
32+
}
33+
34+
[Fact]
35+
public void Then_dictionary_contains_expected_values()
36+
{
37+
Assert.Equal(new Dictionary<string, string>()
38+
{
39+
{ "1_unchanging", "initial"},
40+
{ "2_modified", "modified"},
41+
{ "3_modified_to_same_value", "initial"},
42+
{ "5_new", "new"},
43+
}, _modifiedConfigurationSettings);
44+
}
45+
46+
[Fact]
47+
public void Then_newvalues_contains_expected_values()
48+
{
49+
Assert.Equal(new Dictionary<string, string>()
50+
{
51+
{ "1_unchanging", "initial"},
52+
{ "2_modified", "modified"},
53+
{ "3_modified_to_same_value", "initial"},
54+
{ "5_new", "new"},
55+
}, _modifiedConfigurationSettings.NewValues);
56+
}
57+
[Fact]
58+
public void Then_getchanges_returns_deletions()
59+
{
60+
var deletions = _modifiedConfigurationSettings.GetChanges().DeletedSettings;
61+
Assert.Equal(new []{ "4_deleted" }, deletions);
62+
}
63+
64+
[Fact]
65+
public void Then_getchanges_returns_modified_values()
66+
{
67+
var deletions = _modifiedConfigurationSettings.GetChanges().ModifiedSettings;
68+
69+
Assert.Equal(new[] { "2_modified", "5_new" }, deletions);
70+
}
71+
72+
[Fact]
73+
public void Then_not_actually_changing_values_are_not_present()
74+
{
75+
var modifications = _modifiedConfigurationSettings.GetChanges().ModifiedSettings;
76+
77+
Assert.DoesNotContain("3_modified_to_same_value", modifications);
78+
}
79+
}
80+
81+
}
82+
}

src/Config.SqlStreamStore/ConfigRepository.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public async Task<ConfigurationSettings> GetLatest(CancellationToken ct)
4242

4343
if (lastPage.Status == PageReadStatus.StreamNotFound)
4444
{
45-
return new ConfigurationSettings();
45+
return ConfigurationSettings.Empty();
4646
}
4747

4848
var lastMessage = lastPage.Messages.First();
@@ -63,7 +63,7 @@ public async Task<IConfigurationSettings> Modify(CancellationToken ct,
6363
params (string Key, string Value)[] modifications)
6464
{
6565
var currentData = await GetLatest(ct);
66-
var modified = currentData.Modify(modifications);
66+
var modified = currentData.WithModifiedSettings(modifications);
6767
return await WriteChanges(modified, ct);
6868
}
6969

src/Config.SqlStreamStore/ConfigurationSettings.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,16 @@ internal ConfigurationSettings(int version = -1, DateTime? lastModified = null,
1818
?? new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
1919
}
2020

21+
public static ConfigurationSettings Empty() => new ConfigurationSettings();
22+
public static ConfigurationSettings Create(params (string Key, string Value)[] initialValues) => new ConfigurationSettings(
23+
settings: initialValues.ToDictionary(x => x.Key, x => x.Value, StringComparer.OrdinalIgnoreCase));
24+
2125
public readonly IReadOnlyDictionary<string, string> Settings;
2226

2327
public int Version { get; }
2428
public readonly DateTime? LastModified;
2529

26-
public IConfigurationSettings Modify(params (string Key, string Value)[] modifications)
30+
public ModifiedConfigurationSettings WithModifiedSettings(params (string Key, string Value)[] modifications)
2731
{
2832
var modified = Settings.ToDictionary(x => x.Key, x => x.Value, StringComparer.OrdinalIgnoreCase);
2933
foreach (var modification in modifications)
@@ -33,16 +37,14 @@ public IConfigurationSettings Modify(params (string Key, string Value)[] modific
3337
return new ModifiedConfigurationSettings(this, modified);
3438
}
3539

36-
public IConfigurationSettings Set(IReadOnlyDictionary<string, string> replacement)
40+
public ModifiedConfigurationSettings WithAllSettingsReplaced(IReadOnlyDictionary<string, string> replacement)
3741
{
3842
return new ModifiedConfigurationSettings(this, replacement ?? new ReadOnlyDictionary<string, string>(new Dictionary<string, string>()));
3943
}
4044

41-
public IConfigurationSettings Delete(params string[] deletions)
45+
public ModifiedConfigurationSettings WithDeletedKeys(params string[] deletions)
4246
{
43-
if (deletions == null || !deletions.Any())
44-
return this;
45-
47+
if (deletions == null) throw new ArgumentNullException(nameof(deletions));
4648
var modified = Settings.ToDictionary(x => x.Key, x => x.Value, StringComparer.OrdinalIgnoreCase);
4749
foreach (var deletion in deletions)
4850
{

src/Config.SqlStreamStore/IConfigurationSettings.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ public interface IConfigurationSettings : IReadOnlyDictionary<string, string>
66
{
77
int Version { get; }
88

9-
IConfigurationSettings Modify(params (string Key, string Value)[] modifications);
10-
IConfigurationSettings Set(IReadOnlyDictionary<string, string> replacement);
11-
IConfigurationSettings Delete(params string[] deletions);
9+
ModifiedConfigurationSettings WithModifiedSettings(params (string Key, string Value)[] modifications);
10+
ModifiedConfigurationSettings WithAllSettingsReplaced(IReadOnlyDictionary<string, string> replacement);
11+
ModifiedConfigurationSettings WithDeletedKeys(params string[] deletions);
1212
}
1313
}

src/Config.SqlStreamStore/ModifiedConfigurationSettings.cs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class ModifiedConfigurationSettings : IConfigurationSettings
1010
{
1111
public readonly ConfigurationSettings OriginalSettings;
1212

13-
public readonly IReadOnlyDictionary<string, string> Changes;
13+
public readonly IReadOnlyDictionary<string, string> NewValues;
1414

1515
public int Version => OriginalSettings.Version;
1616

@@ -22,13 +22,13 @@ public ModifiedConfigurationSettings(params (string Key, string Value)[] setting
2222

2323
public ModifiedConfigurationSettings(ConfigurationSettings originalSettings, IReadOnlyDictionary<string, string> changes)
2424
{
25-
OriginalSettings = originalSettings ?? new ConfigurationSettings();
26-
Changes = changes ?? throw new ArgumentNullException(nameof(changes));
25+
OriginalSettings = originalSettings ?? ConfigurationSettings.Empty();
26+
NewValues = changes ?? throw new ArgumentNullException(nameof(changes));
2727
}
2828

29-
public IConfigurationSettings Modify(params (string Key, string Value)[] modifications)
29+
public ModifiedConfigurationSettings WithModifiedSettings(params (string Key, string Value)[] modifications)
3030
{
31-
var modified = Changes.ToDictionary(x => x.Key, x => x.Value, StringComparer.OrdinalIgnoreCase);
31+
var modified = NewValues.ToDictionary(x => x.Key, x => x.Value, StringComparer.OrdinalIgnoreCase);
3232
foreach (var modification in modifications)
3333
{
3434
modified[modification.Key] = modification.Value;
@@ -37,14 +37,14 @@ public IConfigurationSettings Modify(params (string Key, string Value)[] modific
3737
}
3838

3939

40-
public IConfigurationSettings Set(IReadOnlyDictionary<string, string> replacement)
40+
public ModifiedConfigurationSettings WithAllSettingsReplaced(IReadOnlyDictionary<string, string> replacement)
4141
{
4242
return new ModifiedConfigurationSettings(OriginalSettings, replacement);
4343
}
4444

45-
public IConfigurationSettings Delete(params string[] deletions)
45+
public ModifiedConfigurationSettings WithDeletedKeys(params string[] deletions)
4646
{
47-
var modified = Changes.ToDictionary(x => x.Key, x => x.Value, StringComparer.OrdinalIgnoreCase);
47+
var modified = NewValues.ToDictionary(x => x.Key, x => x.Value, StringComparer.OrdinalIgnoreCase);
4848
foreach (var deletion in deletions)
4949
{
5050
modified.Remove(deletion);
@@ -55,11 +55,11 @@ public IConfigurationSettings Delete(params string[] deletions)
5555
public ConfigChanged GetChanges()
5656
{
5757
var deleted = new HashSet<string>(
58-
collection: OriginalSettings.Settings.Keys.Where(x => !Changes.ContainsKey(x)),
58+
collection: OriginalSettings.Settings.Keys.Where(x => !NewValues.ContainsKey(x)),
5959
comparer: StringComparer.InvariantCultureIgnoreCase);
6060

6161
var modified = new HashSet<string>(
62-
collection: Changes.Where(IsModified).Select(x => x.Key),
62+
collection: NewValues.Where(IsModified).Select(x => x.Key),
6363
comparer: StringComparer.InvariantCultureIgnoreCase);
6464

6565
if (!deleted.Any() && !modified.Any())
@@ -68,7 +68,7 @@ public ConfigChanged GetChanges()
6868
return null;
6969
}
7070
return new ConfigChanged(
71-
allSettings: Changes.ToDictionary(x => x.Key, x => x.Value),
71+
allSettings: NewValues.ToDictionary(x => x.Key, x => x.Value),
7272
modifiedSettings: modified,
7373
deletedSettings: deleted);
7474
}
@@ -87,30 +87,30 @@ private bool IsModified(KeyValuePair<string, string> modifiedKvp)
8787

8888
public IEnumerator<KeyValuePair<string, string>> GetEnumerator()
8989
{
90-
return Changes.GetEnumerator();
90+
return NewValues.GetEnumerator();
9191
}
9292

9393
IEnumerator IEnumerable.GetEnumerator()
9494
{
95-
return ((IEnumerable) Changes).GetEnumerator();
95+
return ((IEnumerable) NewValues).GetEnumerator();
9696
}
9797

98-
public int Count => Changes.Count;
98+
public int Count => NewValues.Count;
9999

100100
public bool ContainsKey(string key)
101101
{
102-
return Changes.ContainsKey(key);
102+
return NewValues.ContainsKey(key);
103103
}
104104

105105
public bool TryGetValue(string key, out string value)
106106
{
107-
return Changes.TryGetValue(key, out value);
107+
return NewValues.TryGetValue(key, out value);
108108
}
109109

110-
public string this[string key] => Changes[key];
110+
public string this[string key] => NewValues[key];
111111

112-
public IEnumerable<string> Keys => Changes.Keys;
112+
public IEnumerable<string> Keys => NewValues.Keys;
113113

114-
public IEnumerable<string> Values => Changes.Values;
114+
public IEnumerable<string> Values => NewValues.Values;
115115
}
116116
}

0 commit comments

Comments
 (0)