Initial commit

This commit is contained in:
2026-07-13 09:25:40 +07:00
parent c08ff54676
commit bccfb156d7
1938 changed files with 641646 additions and 0 deletions

View File

@@ -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>

View File

@@ -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);
}
}