Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/Celbridge.Tests/Celbridge.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
<ProjectReference Include="..\Core\Celbridge.Projects\Celbridge.Projects.csproj" />
<ProjectReference Include="..\Core\Celbridge.Settings\Celbridge.Settings.csproj" />
<ProjectReference Include="..\Core\Celbridge.UserInterface\Celbridge.UserInterface.csproj" />
<ProjectReference Include="..\Core\Celbridge.Utilities\Celbridge.Utilities.csproj" />
<ProjectReference Include="..\Workspace\Celbridge.Workspace\Celbridge.Workspace.csproj" />
</ItemGroup>

Expand Down
100 changes: 39 additions & 61 deletions app/Celbridge.Tests/Migration/ProjectMigrationServiceTests.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Celbridge.ApplicationEnvironment;
using Celbridge.Logging;
using Celbridge.Projects;
using Celbridge.Projects.Services;
using Celbridge.Tests.Migration.TestHelpers;
using Celbridge.Utilities;

namespace Celbridge.Tests.Migration;

Expand All @@ -14,15 +14,15 @@ public class ProjectMigrationServiceTests
{
private ILogger<ProjectMigrationService> _mockLogger = null!;
private ILogger<MigrationStepRegistry> _mockRegistryLogger = null!;
private IUtilityService _mockUtilityService = null!;
private IEnvironmentService _mockEnvironmentService = null!;
private MigrationStepRegistry _registry = null!;

[SetUp]
public void Setup()
{
_mockLogger = MigrationTestHelper.CreateMockLogger<ProjectMigrationService>();
_mockRegistryLogger = MigrationTestHelper.CreateMockLogger<MigrationStepRegistry>();
_mockUtilityService = MigrationTestHelper.CreateMockUtilityService("1.0.0");
_mockEnvironmentService = MigrationTestHelper.CreateMockEnvironmentService("1.0.0");
_registry = new MigrationStepRegistry(_mockRegistryLogger);
}

Expand All @@ -32,7 +32,7 @@ public void Setup()
public async Task CheckMigrationAsync_NonExistentFile_ReturnsFailedStatus()
{
// Arrange
var service = new ProjectMigrationService(_mockLogger, _mockUtilityService, _registry);
var service = new ProjectMigrationService(_mockLogger, _mockEnvironmentService, _registry);
var nonExistentPath = Path.Combine(Path.GetTempPath(), "nonexistent.celbridge");

// Act
Expand All @@ -48,7 +48,7 @@ public async Task CheckMigrationAsync_NonExistentFile_ReturnsFailedStatus()
public async Task CheckMigrationAsync_InvalidToml_ReturnsInvalidConfig()
{
// Arrange
var service = new ProjectMigrationService(_mockLogger, _mockUtilityService, _registry);
var service = new ProjectMigrationService(_mockLogger, _mockEnvironmentService, _registry);
var projectPath = MigrationTestHelper.CreateInvalidTomlFile();

try
Expand All @@ -75,8 +75,8 @@ public async Task CheckMigrationAsync_SameVersion_ReturnsComplete()
{
// Arrange
var appVersion = "1.0.0";
_mockUtilityService = MigrationTestHelper.CreateMockUtilityService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockUtilityService, _registry);
_mockEnvironmentService = MigrationTestHelper.CreateMockEnvironmentService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockEnvironmentService, _registry);
var projectPath = MigrationTestHelper.CreateTempProjectFile(appVersion);

try
Expand All @@ -101,8 +101,8 @@ public async Task CheckMigrationAsync_SentinelVersion_ReturnsComplete_DoesNotMod
{
// Arrange
var appVersion = "1.0.0";
_mockUtilityService = MigrationTestHelper.CreateMockUtilityService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockUtilityService, _registry);
_mockEnvironmentService = MigrationTestHelper.CreateMockEnvironmentService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockEnvironmentService, _registry);
var projectPath = MigrationTestHelper.CreateTempProjectFile("<application-version>");

try
Expand Down Expand Up @@ -139,8 +139,8 @@ public async Task CheckMigrationAsync_NewerProjectVersion_ReturnsIncompatibleVer
// Arrange
var appVersion = "1.0.0";
var projectVersion = "2.0.0";
_mockUtilityService = MigrationTestHelper.CreateMockUtilityService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockUtilityService, _registry);
_mockEnvironmentService = MigrationTestHelper.CreateMockEnvironmentService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockEnvironmentService, _registry);
var projectPath = MigrationTestHelper.CreateTempProjectFile(projectVersion);

try
Expand All @@ -167,8 +167,8 @@ public async Task CheckMigrationAsync_NewerProjectVersion_ReturnsIncompatibleVer
public async Task CheckMigrationAsync_EmptyProjectVersion_ReturnsInvalidVersion()
{
// Arrange
_mockUtilityService = MigrationTestHelper.CreateMockUtilityService("1.0.0");
var service = new ProjectMigrationService(_mockLogger, _mockUtilityService, _registry);
_mockEnvironmentService = MigrationTestHelper.CreateMockEnvironmentService("1.0.0");
var service = new ProjectMigrationService(_mockLogger, _mockEnvironmentService, _registry);
var projectPath = MigrationTestHelper.CreateTempProjectFile("");

try
Expand All @@ -190,8 +190,8 @@ public async Task CheckMigrationAsync_EmptyProjectVersion_ReturnsInvalidVersion(
public async Task CheckMigrationAsync_InvalidVersionFormat_ReturnsInvalidVersion()
{
// Arrange
_mockUtilityService = MigrationTestHelper.CreateMockUtilityService("1.0.0");
var service = new ProjectMigrationService(_mockLogger, _mockUtilityService, _registry);
_mockEnvironmentService = MigrationTestHelper.CreateMockEnvironmentService("1.0.0");
var service = new ProjectMigrationService(_mockLogger, _mockEnvironmentService, _registry);
var projectPath = MigrationTestHelper.CreateTempProjectFile("not.a.version");

try
Expand All @@ -218,9 +218,9 @@ public async Task CheckMigrationAsync_LegacyVersionFormat_ReturnsUpgradeRequired
{
// Arrange
var appVersion = "0.1.5";
_mockUtilityService = MigrationTestHelper.CreateMockUtilityService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockUtilityService, _registry);
_mockEnvironmentService = MigrationTestHelper.CreateMockEnvironmentService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockEnvironmentService, _registry);

// Create file with legacy "version" property (pre-0.1.5)
var projectPath = MigrationTestHelper.CreateTempProjectFile("", legacyVersion: "0.1.4");

Expand All @@ -245,14 +245,14 @@ public async Task PerformMigrationUpgradeAsync_LegacyVersionFormat_PerformsMigra
{
// Arrange
var appVersion = "0.1.5";
_mockUtilityService = MigrationTestHelper.CreateMockUtilityService(appVersion);
_mockEnvironmentService = MigrationTestHelper.CreateMockEnvironmentService(appVersion);

// Use real registry which will discover MigrationStep_0_1_5
var registry = new MigrationStepRegistry(_mockRegistryLogger);
registry.Initialize();
var service = new ProjectMigrationService(_mockLogger, _mockUtilityService, registry);

var service = new ProjectMigrationService(_mockLogger, _mockEnvironmentService, registry);

// Create file with legacy "version" property (pre-0.1.5)
var projectPath = MigrationTestHelper.CreateTempProjectFile("", legacyVersion: "0.1.4");

Expand All @@ -277,9 +277,9 @@ public async Task CheckMigrationAsync_LegacyVersion4Part_ReturnsUpgradeRequired(
{
// Arrange
var appVersion = "0.1.5";
_mockUtilityService = MigrationTestHelper.CreateMockUtilityService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockUtilityService, _registry);
_mockEnvironmentService = MigrationTestHelper.CreateMockEnvironmentService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockEnvironmentService, _registry);

// Create file with legacy 4-part version
var projectPath = MigrationTestHelper.CreateTempProjectFile("", legacyVersion: "0.1.4.2");

Expand Down Expand Up @@ -308,8 +308,8 @@ public async Task CheckMigrationAsync_OlderVersion_ReturnsUpgradeRequired()
// Arrange
var appVersion = "1.0.1";
var projectVersion = "1.0.0";
_mockUtilityService = MigrationTestHelper.CreateMockUtilityService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockUtilityService, _registry);
_mockEnvironmentService = MigrationTestHelper.CreateMockEnvironmentService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockEnvironmentService, _registry);
var projectPath = MigrationTestHelper.CreateTempProjectFile(projectVersion);

try
Expand Down Expand Up @@ -339,8 +339,8 @@ public async Task PerformMigrationUpgradeAsync_OlderVersion_NoSteps_UpdatesVersi
// Arrange
var appVersion = "1.0.1";
var projectVersion = "1.0.0";
_mockUtilityService = MigrationTestHelper.CreateMockUtilityService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockUtilityService, _registry);
_mockEnvironmentService = MigrationTestHelper.CreateMockEnvironmentService(appVersion);
var service = new ProjectMigrationService(_mockLogger, _mockEnvironmentService, _registry);
var projectPath = MigrationTestHelper.CreateTempProjectFile(projectVersion);

try
Expand Down Expand Up @@ -374,13 +374,13 @@ public async Task PerformMigrationUpgradeAsync_WithMigrationSteps_ExecutesStepsI
// Arrange
var appVersion = "0.2.0";
var projectVersion = "0.1.4";
_mockUtilityService = MigrationTestHelper.CreateMockUtilityService(appVersion);
_mockEnvironmentService = MigrationTestHelper.CreateMockEnvironmentService(appVersion);

// Use real registry which will discover MigrationStep_0_1_5
var registry = new MigrationStepRegistry(_mockRegistryLogger);
registry.Initialize();
var service = new ProjectMigrationService(_mockLogger, _mockUtilityService, registry);

var service = new ProjectMigrationService(_mockLogger, _mockEnvironmentService, registry);
var projectPath = MigrationTestHelper.CreateTempProjectFile("", legacyVersion: projectVersion);

try
Expand All @@ -398,7 +398,7 @@ public async Task PerformMigrationUpgradeAsync_WithMigrationSteps_ExecutesStepsI
var content = File.ReadAllText(projectPath);
content.Should().Contain("celbridge-version");
content.Should().NotContain("\r\nversion = ");

var updatedVersion = MigrationTestHelper.ReadVersionFromFile(projectPath);
updatedVersion.Should().Be(appVersion);
}
Expand All @@ -409,34 +409,12 @@ public async Task PerformMigrationUpgradeAsync_WithMigrationSteps_ExecutesStepsI
}

#endregion
}




#region Edge Cases

[Test]
public async Task CheckMigrationAsync_Exception_ReturnsFailedStatus()
{
// Arrange
var mockUtilityService = Substitute.For<IUtilityService>();
mockUtilityService.GetEnvironmentInfo()
.Returns(x => throw new InvalidOperationException("Test exception"));

var service = new ProjectMigrationService(_mockLogger, mockUtilityService, _registry);
var projectPath = MigrationTestHelper.CreateTempProjectFile("1.0.0");

try
{
// Act
var result = await service.CheckMigrationAsync(projectPath);

// Assert
result.Status.Should().Be(MigrationStatus.Failed);
result.OperationResult.IsFailure.Should().BeTrue();
}
finally
{
MigrationTestHelper.CleanupTempFile(projectPath);
}
}

#endregion
}
15 changes: 7 additions & 8 deletions app/Celbridge.Tests/Migration/TestHelpers/MigrationTestHelper.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Celbridge.ApplicationEnvironment;
using Celbridge.Logging;
using Celbridge.Utilities;

namespace Celbridge.Tests.Migration.TestHelpers;

Expand All @@ -17,14 +17,13 @@ public static ILogger<T> CreateMockLogger<T>()
}

/// <summary>
/// Creates a mock IUtilityService with a configurable application version.
/// Creates a mock IEnvironmentService with the specified application version.
/// </summary>
public static IUtilityService CreateMockUtilityService(string appVersion)
public static IEnvironmentService CreateMockEnvironmentService(string appVersion)
{
var mockUtilityService = Substitute.For<IUtilityService>();
mockUtilityService.GetEnvironmentInfo()
.Returns(new EnvironmentInfo(appVersion, "Test", "Debug"));
return mockUtilityService;
var mock = Substitute.For<IEnvironmentService>();
mock.GetEnvironmentInfo().Returns(new EnvironmentInfo(appVersion, "Test", "Debug"));
return mock;
}

/// <summary>
Expand Down Expand Up @@ -89,7 +88,7 @@ public static string CreateInvalidTomlFile()
{
var content = File.ReadAllText(projectFilePath);
var lines = content.Split('\n');

foreach (var line in lines)
{
if (line.Contains("celbridge-version"))
Expand Down
2 changes: 1 addition & 1 deletion app/Celbridge.Tests/Search/FileFilterTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Celbridge.Search.Services;
using Celbridge.Search;

namespace Celbridge.Tests.Search;

Expand Down
Loading