|
1 | 1 | using Exceptionless.Models; |
2 | | -using Exceptionless.Models.Data; |
3 | | -using Exceptionless.Serializer; |
| 2 | +using Exceptionless.Tests.Serializer; |
4 | 3 | using Xunit; |
5 | 4 |
|
6 | 5 | namespace Exceptionless.Tests.Serializer.Models { |
7 | | - public class ClientConfigurationSerializerTests { |
8 | | - protected virtual IJsonSerializer GetSerializer() { |
9 | | - return new DefaultJsonSerializer(); |
10 | | - } |
| 6 | + public class ClientConfigurationSerializerTests : SerializerTestBase { |
| 7 | + private const string MinimalJson = /* lang=json */ """{"version":0,"settings":{}}"""; |
| 8 | + private const string CompleteJson = /* lang=json */ """{"version":1,"settings":{"@@log:*":"Off"}}"""; |
11 | 9 |
|
12 | 10 | [Fact] |
13 | | - public void Serialize_CompleteClientConfiguration_ProducesSnakeCaseJson() { |
| 11 | + public void Serialize_MinimalClientConfiguration_ProducesCorrectJson() { |
14 | 12 | // Arrange |
15 | | - var config = new ClientConfiguration { |
16 | | - Version = 5, |
17 | | - Settings = { |
18 | | - { "@@log:*", "Off" }, |
19 | | - { "IncludeConditionalData", "true" }, |
20 | | - { "DataExclusions", "password,credit_card" } |
21 | | - } |
22 | | - }; |
23 | | - |
24 | | - var serializer = GetSerializer(); |
| 13 | + var configuration = new ClientConfiguration(); |
25 | 14 |
|
26 | 15 | // Act |
27 | | - string json = serializer.Serialize(config); |
| 16 | + string json = Serialize(configuration); |
28 | 17 |
|
29 | 18 | // Assert |
30 | | - SerializerContractAssertions.IncludesProperties(json, "version", "settings"); |
31 | | - SerializerContractAssertions.ExcludesProperties(json, "Version", "Settings"); |
| 19 | + Assert.Equal(MinimalJson, json); |
32 | 20 | } |
33 | 21 |
|
34 | 22 | [Fact] |
35 | | - public void Deserialize_RoundTrip_PreservesSettings() { |
| 23 | + public void Serialize_CompleteClientConfiguration_ProducesCorrectJson() { |
36 | 24 | // Arrange |
37 | | - var serializer = GetSerializer(); |
38 | | - var original = new ClientConfiguration { |
39 | | - Version = 3, |
40 | | - Settings = { |
41 | | - { "@@log:*", "Warn" }, |
42 | | - { "TestKey", "TestValue" }, |
43 | | - { "@@DataExclusions", "secret" } |
44 | | - } |
45 | | - }; |
| 25 | + var configuration = new ClientConfiguration { Version = 1 }; |
| 26 | + configuration.Settings[SettingsDictionary.KnownKeys.LogLevelPrefix + "*"] = "Off"; |
46 | 27 |
|
47 | 28 | // Act |
48 | | - string json = serializer.Serialize(original); |
49 | | - var deserialized = (ClientConfiguration)serializer.Deserialize(json, typeof(ClientConfiguration)); |
| 29 | + string json = Serialize(configuration); |
50 | 30 |
|
51 | 31 | // Assert |
52 | | - Assert.Equal(3, deserialized.Version); |
53 | | - Assert.NotNull(deserialized.Settings); |
54 | | - Assert.Equal(3, deserialized.Settings.Count); |
55 | | - Assert.Equal("Warn", deserialized.Settings.GetString("@@log:*")); |
56 | | - Assert.Equal("TestValue", deserialized.Settings.GetString("TestKey")); |
57 | | - } |
58 | | - |
59 | | - [Fact] |
60 | | - public void Deserialize_EmptySettings_ReturnsEmptyDictionary() { |
61 | | - // Arrange |
62 | | - var serializer = GetSerializer(); |
63 | | - string json = "{\"version\":1,\"settings\":{}}"; |
64 | | - |
65 | | - // Act |
66 | | - var config = (ClientConfiguration)serializer.Deserialize(json, typeof(ClientConfiguration)); |
67 | | - |
68 | | - // Assert |
69 | | - Assert.NotNull(config); |
70 | | - Assert.Equal(1, config.Version); |
71 | | - Assert.NotNull(config.Settings); |
72 | | - Assert.Empty(config.Settings); |
73 | | - } |
74 | | - |
75 | | - [Fact] |
76 | | - public void Deserialize_WithVersion_PreservesVersionNumber() { |
77 | | - // Arrange |
78 | | - var serializer = GetSerializer(); |
79 | | - string json = "{\"version\":42,\"settings\":{}}"; |
80 | | - |
81 | | - // Act |
82 | | - var config = (ClientConfiguration)serializer.Deserialize(json, typeof(ClientConfiguration)); |
83 | | - |
84 | | - // Assert |
85 | | - Assert.Equal(42, config.Version); |
86 | | - } |
87 | | - |
88 | | - [Fact] |
89 | | - public void Serialize_SettingsDictionaryKeys_PreservesOriginalCasing() { |
90 | | - // Arrange |
91 | | - var config = new ClientConfiguration { |
92 | | - Version = 1, |
93 | | - Settings = { |
94 | | - { "MyCustomKey", "value" }, |
95 | | - { "@@log:MyApp.*", "Debug" } |
96 | | - } |
97 | | - }; |
98 | | - |
99 | | - var serializer = GetSerializer(); |
100 | | - |
101 | | - // Act |
102 | | - string json = serializer.Serialize(config); |
103 | | - |
104 | | - // Assert - Dictionary keys should preserve their original casing |
105 | | - Assert.Contains("\"MyCustomKey\"", json); |
106 | | - Assert.Contains("\"@@log:MyApp.*\"", json); |
107 | | - } |
108 | | - |
109 | | - [Fact] |
110 | | - public void Deserialize_SettingsAreCaseInsensitive() { |
111 | | - // Arrange |
112 | | - var serializer = GetSerializer(); |
113 | | - var config = new ClientConfiguration { |
114 | | - Version = 1, |
115 | | - Settings = { |
116 | | - { "TestKey", "TestValue" } |
117 | | - } |
118 | | - }; |
119 | | - |
120 | | - // Act |
121 | | - string json = serializer.Serialize(config); |
122 | | - var deserialized = (ClientConfiguration)serializer.Deserialize(json, typeof(ClientConfiguration)); |
123 | | - |
124 | | - // Assert - SettingsDictionary uses OrdinalIgnoreCase comparer |
125 | | - Assert.Equal("TestValue", deserialized.Settings.GetString("testkey")); |
126 | | - Assert.Equal("TestValue", deserialized.Settings.GetString("TESTKEY")); |
| 32 | + Assert.Equal(CompleteJson, json); |
127 | 33 | } |
128 | 34 |
|
129 | 35 | [Fact] |
130 | | - public void Serialize_DefaultConfiguration_ProducesMinimalJson() { |
| 36 | + public void Deserialize_ClientConfiguration_RoundTrips() { |
131 | 37 | // Arrange |
132 | | - var config = new ClientConfiguration(); |
133 | | - var serializer = GetSerializer(); |
| 38 | + var configuration = new ClientConfiguration { Version = 1 }; |
| 39 | + configuration.Settings[SettingsDictionary.KnownKeys.LogLevelPrefix + "*"] = "Off"; |
134 | 40 |
|
135 | 41 | // Act |
136 | | - string json = serializer.Serialize(config); |
| 42 | + ClientConfiguration roundTripped = RoundTrip(configuration); |
137 | 43 |
|
138 | 44 | // Assert |
139 | | - Assert.Contains("\"version\":0", json); |
140 | | - Assert.Contains("\"settings\":{}", json); |
| 45 | + Assert.Equal(1, roundTripped.Version); |
| 46 | + Assert.Equal("Off", roundTripped.Settings["@@log:*"]); |
141 | 47 | } |
142 | 48 |
|
143 | 49 | [Fact] |
144 | | - public void Deserialize_SettingsWithBooleanValues_ParsesCorrectly() { |
| 50 | + public void Deserialize_ClientConfiguration_FromKnownJson_MapsAllProperties() { |
145 | 51 | // Arrange |
146 | | - var serializer = GetSerializer(); |
147 | | - var config = new ClientConfiguration { |
148 | | - Version = 1, |
149 | | - Settings = { |
150 | | - { "IncludeConditionalData", "true" }, |
151 | | - { "DisableFeature", "false" } |
152 | | - } |
153 | | - }; |
| 52 | + const string json = CompleteJson; |
154 | 53 |
|
155 | 54 | // Act |
156 | | - string json = serializer.Serialize(config); |
157 | | - var deserialized = (ClientConfiguration)serializer.Deserialize(json, typeof(ClientConfiguration)); |
| 55 | + ClientConfiguration configuration = Deserialize<ClientConfiguration>(json); |
158 | 56 |
|
159 | 57 | // Assert |
160 | | - Assert.True(deserialized.Settings.GetBoolean("IncludeConditionalData")); |
161 | | - Assert.False(deserialized.Settings.GetBoolean("DisableFeature")); |
| 58 | + Assert.Equal(1, configuration.Version); |
| 59 | + Assert.Single(configuration.Settings); |
| 60 | + Assert.Equal("Off", configuration.Settings["@@log:*"]); |
162 | 61 | } |
163 | 62 | } |
164 | 63 | } |
0 commit comments