Skip to content

Commit 91f0468

Browse files
petrinecpCopilot
andauthored
Fix ConfigurationValidator incorrectly validating non-existent Commer… (#581)
* 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> * Adjust version matrix --------- Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: petrinecp <5637849+petrinecp@users.noreply.github.com>
1 parent 734d4ab commit 91f0468

File tree

4 files changed

+94
-22
lines changed

4 files changed

+94
-22
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>

README.md

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -129,27 +129,25 @@ To understand when and how to implement customizations:
129129
View all [project releases](https://github.com/Kentico/xperience-by-kentico-kentico-migration-tool/releases/).
130130

131131
| Xperience Version | Library Version |
132-
| ----------------- | --------------- |
133-
| 31.0.0 | 4.1.0 |
134-
| 31.0.0 | 4.0.0 |
135-
| 30.12.0 | 3.21.0 |
136-
| 30.12.0 | 3.20.0 |
137-
| 30.11.0 | 3.18.0 |
138-
| 30.10.1 | 3.16.0 |
139-
| 30.8.0 | 3.12.0 |
140-
| 30.6.0 | 3.8.0 |
141-
| 30.5.1 | 3.6.0 |
142-
| 30.4.0 | 3.4.0 |
143-
| 30.3.1 | 3.3.0 |
144-
| 30.2.0 | 3.0.0 |
145-
| 30.1.1 | 2.3.0 |
146-
| 30.0.0 | 2.0.0 |
147-
| 29.7.0 | 1.6.0 |
148-
| 29.6.0 | 1.4.0 |
149-
| 29.5.2 | 1.3.0 |
150-
| 29.3.3 | 1.2.0 |
151-
| 29.2.0 | 1.1.0 |
152-
| 29.1.0 | 1.0.0 |
132+
| ------------------| ----------------|
133+
| >= 31.0.0 | >= 4.0.0 |
134+
| >= 30.12.0 | >= 3.20.0 |
135+
| >= 30.11.0 | >= 3.18.0 |
136+
| >= 30.10.1 | >= 3.16.0 |
137+
| >= 30.8.0 | >= 3.12.0 |
138+
| >= 30.6.0 | >= 3.8.0 |
139+
| >= 30.5.1 | >= 3.6.0 |
140+
| >= 30.4.0 | >= 3.4.0 |
141+
| >= 30.3.1 | >= 3.3.0 |
142+
| >= 30.2.0 | >= 3.0.0 |
143+
| >= 30.1.1 | >= 2.3.0 |
144+
| >= 30.0.0 | >= 2.0.0 |
145+
| >= 29.7.0 | >= 1.6.0 |
146+
| >= 29.6.0 | >= 1.4.0 |
147+
| >= 29.5.2 | >= 1.3.0 |
148+
| >= 29.3.3 | >= 1.2.0 |
149+
| >= 29.2.0 | >= 1.1.0 |
150+
| >= 29.1.0 | >= 1.0.0 |
153151

154152
## Dependencies
155153

0 commit comments

Comments
 (0)