using ZB.MOM.WW.CBDD.Bson;
using ZB.MOM.WW.CBDD.Core;
using ZB.MOM.WW.CBDD.Core.Collections;
using ZB.MOM.WW.CBDD.Core.Metadata;
using ZB.MOM.WW.CBDD.Shared;
using Xunit;

namespace ZB.MOM.WW.CBDD.Tests;

public class ValueObjectIdTests : IDisposable
{
    private readonly string _dbPath = "value_object_ids.db";
    private readonly Shared.TestDbContext _db;

    public ValueObjectIdTests()
    {
        if (File.Exists(_dbPath)) File.Delete(_dbPath);
        _db = new Shared.TestDbContext(_dbPath);
    }

    [Fact]
    public void Should_Support_ValueObject_Id_Conversion()
    {
        var order = new Order
        {
            Id = new OrderId("ORD-123"),
            CustomerName = "John Doe"
        };

        _db.Orders.Insert(order);

        var retrieved = _db.Orders.FindById(new OrderId("ORD-123"));

        retrieved.ShouldNotBeNull();
        retrieved.Id.Value.ShouldBe("ORD-123");
        retrieved.CustomerName.ShouldBe("John Doe");
    }

    public void Dispose()
    {
        _db.Dispose();
        if (File.Exists(_dbPath)) File.Delete(_dbPath);
    }
}
