< Summary

Information
Class: FAU.API.Controllers.TestController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/TestController.cs
Line coverage
100%
Covered lines: 44
Uncovered lines: 0
Coverable lines: 44
Total lines: 113
Line coverage: 100%
Branch coverage
50%
Covered branches: 4
Total branches: 8
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Public()100%11100%
Protected()50%44100%
AdminOnly()50%22100%
MultiRole()50%22100%
Auditoria()100%11100%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/TestController.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Authorization;
 2using Microsoft.AspNetCore.Mvc;
 3using FAU.Logica.DTOs;
 4using FAU.Logica.Services;
 5
 6namespace FAU.API.Controllers;
 7
 8[ApiController]
 9[Route("api/[controller]")]
 10public class TestController : ControllerBase
 11{
 12    private readonly ILogger<TestController> _logger;
 13
 14    private readonly IAuditoriaService _auditoriaService;
 15
 516    public TestController(ILogger<TestController> logger, IAuditoriaService auditoriaService)
 17    {
 518        _logger = logger;
 519        _auditoriaService = auditoriaService;
 520    }
 21
 22    /// <summary>
 23    /// Endpoint público de prueba (sin autenticación)
 24    /// </summary>
 25    [HttpGet("public")]
 26    [AllowAnonymous]
 27    public IActionResult Public()
 28    {
 129        return Ok(ApiResponse<string>.SuccessResult(
 130            "Este es un endpoint público - accesible sin autenticación",
 131            "Respuesta exitosa"));
 32    }
 33
 34    /// <summary>
 35    /// Endpoint protegido de prueba (requiere autenticación)
 36    /// </summary>
 37    [HttpGet("protected")]
 38    [Authorize]
 39    public IActionResult Protected()
 40    {
 141        var username = User.Identity?.Name;
 142        var roles = User.Claims
 343            .Where(c => c.Type == System.Security.Claims.ClaimTypes.Role)
 144            .Select(c => c.Value)
 145            .ToList();
 46
 147        var responseData = new
 148        {
 149            Message = "Este es un endpoint protegido - requiere autenticación",
 150            Username = username,
 151            Roles = roles,
 152            UserId = User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value
 153        };
 54
 155        return Ok(ApiResponse<object>.SuccessResult(responseData, "Autenticado correctamente"));
 56    }
 57
 58    /// <summary>
 59    /// Endpoint solo para administradores
 60    /// </summary>
 61    [HttpGet("admin-only")]
 62    [Authorize(Roles = "Administrador")]
 63    public IActionResult AdminOnly()
 64    {
 165        var username = User.Identity?.Name;
 66
 167        var responseData = new
 168        {
 169            Message = "Este endpoint solo es accesible por administradores",
 170            Username = username,
 171            AccessLevel = "Administrador"
 172        };
 73
 174        return Ok(ApiResponse<object>.SuccessResult(responseData, "Acceso de administrador confirmado"));
 75    }
 76
 77    /// <summary>
 78    /// Endpoint con múltiples roles permitidos
 79    /// </summary>
 80    [HttpGet("multi-role")]
 81    [Authorize(Roles = "Administrador,Usuario")]
 82    public IActionResult MultiRole()
 83    {
 184        var username = User.Identity?.Name;
 185        var roles = User.Claims
 386            .Where(c => c.Type == System.Security.Claims.ClaimTypes.Role)
 187            .Select(c => c.Value)
 188            .ToList();
 89
 190        var responseData = new
 191        {
 192            Message = "Este endpoint es accesible por Administradores y Usuarios",
 193            Username = username,
 194            Roles = roles
 195        };
 96
 197        return Ok(ApiResponse<object>.SuccessResult(responseData, "Acceso autorizado"));
 98    }
 99
 100    /// <summary>
 101    /// Endpoint Auditoria de prueba (sin autenticación)
 102    /// </summary>
 103    [HttpGet("Auditoria")]
 104    [AllowAnonymous]
 105    public IActionResult Auditoria()
 106    {
 1107        _auditoriaService.LogAuditoria(1, 1, 1, "some host like 1.2.3.4");
 1108        return Ok(ApiResponse<string>.SuccessResult(
 1109            "Este es un endpoint de auditoria - accesible sin autenticación",
 1110            "Respuesta exitosa"));
 111    }
 112}
 113