using FluentAssertions;
using SIGCM2.Domain.Exceptions;

namespace SIGCM2.Application.Tests.Domain.Rubros;

public class RubroReglaDeOroExceptionsTests
{
    // ── RubroPadreEsHojaConAvisosException ──────────────────────────────────

    [Fact]
    public void RubroPadreEsHojaConAvisosException_Constructor_SetsMessage()
    {
        var ex = new RubroPadreEsHojaConAvisosException(parentId: 42, cantidadAvisos: 3);

        ex.Message.Should().Be("El rubro padre contiene 3 avisos. Muévalos antes de crear sub-rubros.");
    }

    [Fact]
    public void RubroPadreEsHojaConAvisosException_Constructor_SetsParentId_Y_CantidadAvisos()
    {
        var ex = new RubroPadreEsHojaConAvisosException(parentId: 42, cantidadAvisos: 3);

        ex.ParentId.Should().Be(42);
        ex.CantidadAvisos.Should().Be(3);
    }

    [Fact]
    public void RubroPadreEsHojaConAvisosException_IsA_DomainException()
    {
        var ex = new RubroPadreEsHojaConAvisosException(parentId: 1, cantidadAvisos: 1);

        ex.Should().BeAssignableTo<DomainException>();
    }

    // ── RubroEsRamaConHijosActivosException ─────────────────────────────────

    [Fact]
    public void RubroEsRamaConHijosActivosException_Constructor_SetsMessage()
    {
        var ex = new RubroEsRamaConHijosActivosException(rubroId: 7, cantidadHijos: 2);

        ex.Message.Should().Be("El destino tiene sub-rubros. No puede contener avisos directos.");
    }

    [Fact]
    public void RubroEsRamaConHijosActivosException_Constructor_SetsRubroId_Y_CantidadHijos()
    {
        var ex = new RubroEsRamaConHijosActivosException(rubroId: 7, cantidadHijos: 2);

        ex.RubroId.Should().Be(7);
        ex.CantidadHijos.Should().Be(2);
    }

    [Fact]
    public void RubroEsRamaConHijosActivosException_IsA_DomainException()
    {
        var ex = new RubroEsRamaConHijosActivosException(rubroId: 1, cantidadHijos: 1);

        ex.Should().BeAssignableTo<DomainException>();
    }
}
