103 lines
3.1 KiB
C#
103 lines
3.1 KiB
C#
using System;
|
|
using System.IO;
|
|
using CounterDrone.Core;
|
|
using CounterDrone.Core.Services;
|
|
using SQLite;
|
|
using Xunit;
|
|
|
|
namespace CounterDrone.Core.Tests
|
|
{
|
|
public class ModelServiceTests : IDisposable
|
|
{
|
|
private readonly string _testDir;
|
|
private readonly SQLiteConnection _db;
|
|
private readonly IModelService _service;
|
|
private readonly IPathProvider _paths;
|
|
|
|
public ModelServiceTests()
|
|
{
|
|
_testDir = Path.Combine(Path.GetTempPath(), $"cd_test_{Guid.NewGuid():N}");
|
|
_paths = new TestPathProvider(_testDir);
|
|
var dbManager = new DatabaseManager(_paths);
|
|
_db = dbManager.OpenMainDb();
|
|
_service = new ModelService(new Repository.ModelRepository(_db), _paths);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_db?.Close();
|
|
if (Directory.Exists(_testDir))
|
|
Directory.Delete(_testDir, true);
|
|
}
|
|
|
|
private string CreateTempModelFile(string extension)
|
|
{
|
|
var path = Path.Combine(_testDir, $"test_model{extension}");
|
|
File.WriteAllText(path, "dummy content");
|
|
return path;
|
|
}
|
|
|
|
[Fact]
|
|
public void ImportModel_ValidObj_Succeeds()
|
|
{
|
|
var filePath = CreateTempModelFile(".obj");
|
|
var model = _service.ImportModel(filePath, "TestModel");
|
|
|
|
Assert.NotNull(model);
|
|
Assert.Equal("TestModel", model.Name);
|
|
Assert.NotEmpty(model.Id);
|
|
}
|
|
|
|
[Fact]
|
|
public void ImportModel_EmptyName_Throws()
|
|
{
|
|
var filePath = CreateTempModelFile(".fbx");
|
|
Assert.Throws<ArgumentException>(() => _service.ImportModel(filePath, ""));
|
|
}
|
|
|
|
[Fact]
|
|
public void ImportModel_UnsupportedFormat_Throws()
|
|
{
|
|
var filePath = CreateTempModelFile(".xyz");
|
|
Assert.Throws<ArgumentException>(() => _service.ImportModel(filePath, "BadFormat"));
|
|
}
|
|
|
|
[Fact]
|
|
public void ImportModel_AllSupportedFormats()
|
|
{
|
|
foreach (var ext in new[] { ".fbx", ".obj", ".stl", ".glb", ".gltf" })
|
|
{
|
|
var filePath = CreateTempModelFile(ext);
|
|
var model = _service.ImportModel(filePath, $"Model_{ext}");
|
|
Assert.NotNull(model);
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void GetAllModels_ReturnsImportedModels()
|
|
{
|
|
_service.ImportModel(CreateTempModelFile(".fbx"), "A");
|
|
_service.ImportModel(CreateTempModelFile(".obj"), "B");
|
|
|
|
var all = _service.GetAllModels();
|
|
Assert.Equal(2, all.Count);
|
|
}
|
|
|
|
[Fact]
|
|
public void DeleteModel_RemovesModel()
|
|
{
|
|
var model = _service.ImportModel(CreateTempModelFile(".fbx"), "ToDelete");
|
|
_service.DeleteModel(model.Id);
|
|
|
|
var result = _service.GetModel(model.Id);
|
|
Assert.Null(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void GetModel_NonExistent_ReturnsNull()
|
|
{
|
|
Assert.Null(_service.GetModel("not-exist"));
|
|
}
|
|
}
|
|
}
|