Skip to content

Commit eaaa6e2

Browse files
Copilotpetrinecp
andauthored
Fix ConfigurationValidator incorrectly validating non-existent CommerceConfiguration (#579)
* Initial plan * Fix ConfigurationValidator to properly check if CommerceConfiguration exists and add tests Co-authored-by: petrinecp <5637849+petrinecp@users.noreply.github.com> * Fix code formatting to pass dotnet format verification Co-authored-by: petrinecp <5637849+petrinecp@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: petrinecp <5637849+petrinecp@users.noreply.github.com>
1 parent 64028f4 commit eaaa6e2

File tree

3 files changed

+75
-1
lines changed

3 files changed

+75
-1
lines changed

Migration.Tool.CLI/ConfigurationValidator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ public static IEnumerable<ValidationMessage> GetValidationErrors(IConfigurationR
161161
#region Commerce configuration validation
162162

163163
var commerceConfiguration = settings?.GetSection(ConfigurationNames.CommerceConfiguration);
164-
if (commerceConfiguration is not null)
164+
if (commerceConfiguration?.Exists() == true)
165165
{
166166
var commerceSiteNames = commerceConfiguration.GetSection(ConfigurationNames.CommerceSiteNames).Get<List<string>?>();
167167
if (commerceSiteNames is null || commerceSiteNames.Count == 0)
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
using Microsoft.Extensions.Configuration;
2+
using Migration.Tool.CLI;
3+
4+
namespace Migration.Tool.Tests;
5+
6+
public class ConfigurationValidatorTests
7+
{
8+
[Fact]
9+
public void GetValidationErrors_WhenCommerceConfigurationSectionDoesNotExist_ShouldNotReturnValidationErrors()
10+
{
11+
// Arrange - Create configuration without CommerceConfiguration section
12+
var configuration = new ConfigurationBuilder()
13+
.AddInMemoryCollection(new Dictionary<string, string?>
14+
{
15+
["Settings:KxConnectionString"] = "Server=localhost;Database=Kentico;",
16+
["Settings:XbyKDirPath"] = "C:\\XbyK",
17+
["Settings:XbyKApiSettings:ConnectionStrings:CMSConnectionString"] = "Server=localhost;Database=XbyK;"
18+
})
19+
.Build();
20+
21+
// Act
22+
var errors = ConfigurationValidator.GetValidationErrors(configuration).ToList();
23+
24+
// Assert - Should not contain CommerceConfiguration validation error
25+
Assert.DoesNotContain(errors, e => e.Message.Contains("CommerceConfiguration"));
26+
}
27+
28+
[Fact]
29+
public void GetValidationErrors_WhenCommerceConfigurationExistsWithEmptySiteNames_ShouldReturnValidationError()
30+
{
31+
// Arrange - Create configuration with CommerceConfiguration section containing empty site name
32+
var configuration = new ConfigurationBuilder()
33+
.AddInMemoryCollection(new Dictionary<string, string?>
34+
{
35+
["Settings:KxConnectionString"] = "Server=localhost;Database=Kentico;",
36+
["Settings:XbyKDirPath"] = "C:\\XbyK",
37+
["Settings:XbyKApiSettings:ConnectionStrings:CMSConnectionString"] = "Server=localhost;Database=XbyK;",
38+
["Settings:CommerceConfiguration:CommerceSiteNames:0"] = "" // Empty value
39+
})
40+
.Build();
41+
42+
// Act
43+
var errors = ConfigurationValidator.GetValidationErrors(configuration).ToList();
44+
45+
// Assert - Should contain validation error for empty site names
46+
Assert.Contains(errors, e => e.Message.Contains("CommerceConfiguration:CommerceSiteNames") &&
47+
e.Message.Contains("cannot contain empty or whitespace values"));
48+
}
49+
50+
[Fact]
51+
public void GetValidationErrors_WhenCommerceConfigurationExistsWithValidSiteNames_ShouldNotReturnCommerceValidationErrors()
52+
{
53+
// Arrange - Create configuration with valid CommerceConfiguration
54+
var configuration = new ConfigurationBuilder()
55+
.AddInMemoryCollection(new Dictionary<string, string?>
56+
{
57+
["Settings:KxConnectionString"] = "Server=localhost;Database=Kentico;",
58+
["Settings:XbyKDirPath"] = "C:\\XbyK",
59+
["Settings:XbyKApiSettings:ConnectionStrings:CMSConnectionString"] = "Server=localhost;Database=XbyK;",
60+
["Settings:CommerceConfiguration:CommerceSiteNames:0"] = "MySite"
61+
})
62+
.Build();
63+
64+
// Act
65+
var errors = ConfigurationValidator.GetValidationErrors(configuration).ToList();
66+
67+
// Assert - Should not contain CommerceConfiguration validation errors
68+
Assert.DoesNotContain(errors, e => e.Message.Contains("CommerceConfiguration:CommerceSiteNames") &&
69+
e.Message.Contains("must contain at least one site name"));
70+
Assert.DoesNotContain(errors, e => e.Message.Contains("CommerceConfiguration:CommerceSiteNames") &&
71+
e.Message.Contains("cannot contain empty or whitespace values"));
72+
}
73+
}

Migration.Tool.Tests/Migration.Tool.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
<ItemGroup>
2121
<ProjectReference Include="..\Migration.Tool.Common\Migration.Tool.Common.csproj" />
22+
<ProjectReference Include="..\Migration.Tool.CLI\Migration.Tool.CLI.csproj" />
2223
</ItemGroup>
2324

2425
</Project>

0 commit comments

Comments
 (0)