< Summary

Information
Class: FAU.Logica.Validadores.EstadoTransicionValidator
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Validadores/EstadoTransicionValidator.cs
Line coverage
57%
Covered lines: 15
Uncovered lines: 11
Coverable lines: 26
Total lines: 76
Line coverage: 57.6%
Branch coverage
46%
Covered branches: 13
Total branches: 28
Branch coverage: 46.4%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ValidarTransicion(...)50%9877.77%
ObtenerErrorSiTransicionInvalida(...)56.25%311661.53%
EsEstadoValido(...)0%2040%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Validadores/EstadoTransicionValidator.cs

#LineLine coverage
 1namespace FAU.Logica.Validadores;
 2
 3/// <summary>
 4/// Validador para transiciones de estado del personal
 5/// Estados permitidos: "activo", "inactivo"
 6/// </summary>
 7public static class EstadoTransicionValidator
 8{
 9    /// <summary>
 10    /// Valida si la transición de estado es permitida
 11    /// </summary>
 12    /// <param name="estadoActual">Estado actual del personal</param>
 13    /// <param name="estadoNuevo">Estado que se desea establecer</param>
 14    /// <returns>True si la transición es válida</returns>
 15    public static bool ValidarTransicion(string estadoActual, string estadoNuevo)
 16    {
 217        if (string.IsNullOrWhiteSpace(estadoActual) || string.IsNullOrWhiteSpace(estadoNuevo))
 018            return false;
 19
 220        var estadoActualLower = estadoActual.ToLower().Trim();
 221        var estadoNuevoLower = estadoNuevo.ToLower().Trim();
 22
 23        // No permitir cambios si es el mismo estado
 224        if (estadoActualLower == estadoNuevoLower)
 025            return false;
 26
 27        // Transiciones permitidas: activo <-> inactivo
 228        var transicionesValidas = new[] { ("activo", "inactivo"), ("inactivo", "activo") };
 29
 230        return transicionesValidas.Any(t =>
 431            t.Item1 == estadoActualLower && t.Item2 == estadoNuevoLower);
 32    }
 33
 34    /// <summary>
 35    /// Obtiene un mensaje de error si la transición no es válida
 36    /// </summary>
 37    /// <param name="estadoActual">Estado actual del personal</param>
 38    /// <param name="estadoNuevo">Estado que se desea establecer</param>
 39    /// <returns>Mensaje de error o null si es válida</returns>
 40    public static string? ObtenerErrorSiTransicionInvalida(string estadoActual, string estadoNuevo)
 41    {
 242        if (string.IsNullOrWhiteSpace(estadoActual) || string.IsNullOrWhiteSpace(estadoNuevo))
 043            return "Los estados no pueden estar vacíos.";
 44
 245        var estadoActualLower = estadoActual.ToLower().Trim();
 246        var estadoNuevoLower = estadoNuevo.ToLower().Trim();
 47
 48        // Validar que sean estados conocidos
 249        if (estadoActualLower != "activo" && estadoActualLower != "inactivo")
 050            return $"Estado actual desconocido: {estadoActual}. Valores válidos: activo, inactivo";
 51
 252        if (estadoNuevoLower != "activo" && estadoNuevoLower != "inactivo")
 053            return $"Estado nuevo desconocido: {estadoNuevo}. Valores válidos: activo, inactivo";
 54
 55        // No permitir cambios si es el mismo estado
 256        if (estadoActualLower == estadoNuevoLower)
 057            return $"No se puede cambiar a {estadoNuevo} porque el personal ya está {estadoActual}.";
 58
 259        if (!ValidarTransicion(estadoActual, estadoNuevo))
 060            return $"No se puede hacer transición de {estadoActual} a {estadoNuevo}.";
 61
 262        return null;
 63    }
 64
 65    /// <summary>
 66    /// Valida que el estado sea uno de los valores permitidos
 67    /// </summary>
 68    public static bool EsEstadoValido(string estado)
 69    {
 070        if (string.IsNullOrWhiteSpace(estado))
 071            return false;
 72
 073        var estadoLower = estado.ToLower().Trim();
 074        return estadoLower == "activo" || estadoLower == "inactivo";
 75    }
 76}