Initial commit
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="coverlet.collector" Version="8.0.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\Commons\RobotNet10.MapManager\RobotNet10.MapManager.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="NUnit.Framework" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,212 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RobotNet10.MapManager.Data;
|
||||
using RobotNet10.MapManager.Services;
|
||||
|
||||
namespace RobotNet10.MapManager.Test.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Unit tests for VehicleTypeService
|
||||
/// </summary>
|
||||
[TestFixture]
|
||||
public class VehicleTypeServiceTests
|
||||
{
|
||||
private MapDbContext _context = null!;
|
||||
private VehicleTypeService _service = null!;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
var options = new DbContextOptionsBuilder<MapDbContext>()
|
||||
.UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString())
|
||||
.Options;
|
||||
|
||||
_context = new MapDbContext(options);
|
||||
_service = new VehicleTypeService(_context);
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
_context.Dispose();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task CreateAsync_ValidData_ReturnsCreatedVehicleType()
|
||||
{
|
||||
// Arrange
|
||||
var vehicleTypeId = "AMR-T800";
|
||||
var vehicleTypeName = "AMR T800";
|
||||
var description = "Heavy-duty AMR";
|
||||
|
||||
// Act
|
||||
var result = await _service.CreateAsync(vehicleTypeId, vehicleTypeName, description, null, null);
|
||||
|
||||
// Assert
|
||||
Assert.That(result, Is.Not.Null);
|
||||
Assert.That(result.VehicleTypeId, Is.EqualTo(vehicleTypeId));
|
||||
Assert.That(result.VehicleTypeName, Is.EqualTo(vehicleTypeName));
|
||||
Assert.That(result.Description, Is.EqualTo(description));
|
||||
Assert.That(result.IsActive, Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task CreateAsync_DuplicateId_ThrowsException()
|
||||
{
|
||||
// Arrange
|
||||
var vehicleTypeId = "AMR-T800";
|
||||
await _service.CreateAsync(vehicleTypeId, "AMR T800", null, null, null);
|
||||
|
||||
// Act & Assert
|
||||
var ex = Assert.ThrowsAsync<InvalidOperationException>(async () =>
|
||||
await _service.CreateAsync(vehicleTypeId, "Duplicate", null, null, null));
|
||||
|
||||
Assert.That(ex!.Message, Does.Contain("already exists"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetAllAsync_ReturnsAllVehicleTypes()
|
||||
{
|
||||
// Arrange
|
||||
await _service.CreateAsync("AMR-T800", "AMR T800", null, null, null);
|
||||
await _service.CreateAsync("AMR-F100", "AMR F100", null, null, null);
|
||||
|
||||
// Act
|
||||
var result = await _service.GetAllAsync();
|
||||
|
||||
// Assert
|
||||
Assert.That(result, Has.Count.EqualTo(2));
|
||||
Assert.That(result[0].VehicleTypeName, Is.EqualTo("AMR F100")); // Ordered by name
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetByIdAsync_ExistingId_ReturnsVehicleType()
|
||||
{
|
||||
// Arrange
|
||||
var created = await _service.CreateAsync("AMR-T800", "AMR T800", null, null, null);
|
||||
|
||||
// Act
|
||||
var result = await _service.GetByIdAsync(created.Id);
|
||||
|
||||
// Assert
|
||||
Assert.That(result, Is.Not.Null);
|
||||
Assert.That(result!.Id, Is.EqualTo(created.Id));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetByIdAsync_NonExistingId_ReturnsNull()
|
||||
{
|
||||
// Act
|
||||
var result = await _service.GetByIdAsync(Guid.NewGuid());
|
||||
|
||||
// Assert
|
||||
Assert.That(result, Is.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetByVehicleTypeIdAsync_ExistingId_ReturnsVehicleType()
|
||||
{
|
||||
// Arrange
|
||||
await _service.CreateAsync("AMR-T800", "AMR T800", null, null, null);
|
||||
|
||||
// Act
|
||||
var result = await _service.GetByVehicleTypeIdAsync("AMR-T800");
|
||||
|
||||
// Assert
|
||||
Assert.That(result, Is.Not.Null);
|
||||
Assert.That(result!.VehicleTypeId, Is.EqualTo("AMR-T800"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task SearchAsync_MatchInVehicleTypeId_ReturnsResults()
|
||||
{
|
||||
// Arrange
|
||||
await _service.CreateAsync("AMR-T800", "AMR T800", null, null, null);
|
||||
await _service.CreateAsync("Forklift-X1", "Forklift X1", null, null, null);
|
||||
|
||||
// Act
|
||||
var result = await _service.SearchAsync("AMR");
|
||||
|
||||
// Assert
|
||||
Assert.That(result, Has.Count.EqualTo(1));
|
||||
Assert.That(result[0].VehicleTypeId, Is.EqualTo("AMR-T800"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task SearchAsync_MatchInVehicleTypeName_ReturnsResults()
|
||||
{
|
||||
// Arrange
|
||||
await _service.CreateAsync("AMR-T800", "AMR T800", null, null, null);
|
||||
await _service.CreateAsync("Forklift-X1", "Forklift X1", null, null, null);
|
||||
|
||||
// Act
|
||||
var result = await _service.SearchAsync("Forklift");
|
||||
|
||||
// Assert
|
||||
Assert.That(result, Has.Count.EqualTo(1));
|
||||
Assert.That(result[0].VehicleTypeId, Is.EqualTo("Forklift-X1"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetByActiveStatusAsync_ActiveOnly_ReturnsActiveVehicleTypes()
|
||||
{
|
||||
// Arrange
|
||||
var active1 = await _service.CreateAsync("AMR-T800", "AMR T800", null, null, null);
|
||||
var active2 = await _service.CreateAsync("AMR-F100", "AMR F100", null, null, null);
|
||||
await _service.UpdateAsync(active2.Id, null, null, null, null, false);
|
||||
|
||||
// Act
|
||||
var result = await _service.GetByActiveStatusAsync(true);
|
||||
|
||||
// Assert
|
||||
Assert.That(result, Has.Count.EqualTo(1));
|
||||
Assert.That(result[0].VehicleTypeId, Is.EqualTo("AMR-T800"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task UpdateAsync_ValidData_UpdatesVehicleType()
|
||||
{
|
||||
// Arrange
|
||||
var created = await _service.CreateAsync("AMR-T800", "AMR T800", null, null, null);
|
||||
|
||||
// Act
|
||||
var result = await _service.UpdateAsync(created.Id, "Updated Name", "Updated Description", null, null, null);
|
||||
|
||||
// Assert
|
||||
Assert.That(result.VehicleTypeName, Is.EqualTo("Updated Name"));
|
||||
Assert.That(result.Description, Is.EqualTo("Updated Description"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task DeleteAsync_NoReferences_DeletesSuccessfully()
|
||||
{
|
||||
// Arrange
|
||||
var created = await _service.CreateAsync("AMR-T800", "AMR T800", null, null, null);
|
||||
|
||||
// Act
|
||||
var result = await _service.DeleteAsync(created.Id);
|
||||
|
||||
// Assert
|
||||
Assert.That(result, Is.True);
|
||||
var deleted = await _service.GetByIdAsync(created.Id);
|
||||
Assert.That(deleted, Is.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetUsageInfoAsync_NoUsage_ReturnsZeroCounts()
|
||||
{
|
||||
// Arrange
|
||||
var created = await _service.CreateAsync("AMR-T800", "AMR T800", null, null, null);
|
||||
|
||||
// Act
|
||||
var result = await _service.GetUsageInfoAsync(created.Id);
|
||||
|
||||
// Assert
|
||||
Assert.That(result.NodePropertiesCount, Is.EqualTo(0));
|
||||
Assert.That(result.EdgePropertiesCount, Is.EqualTo(0));
|
||||
Assert.That(result.TotalUsageCount, Is.EqualTo(0));
|
||||
Assert.That(result.CanDelete, Is.True);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user