< Summary

Information
Class: FAU.DataAccess.Repositories.UsuarioRepository
Assembly: FAU.DataAccess
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.DataAccess/Repositories/UsuarioRepository.cs
Line coverage
97%
Covered lines: 43
Uncovered lines: 1
Coverable lines: 44
Total lines: 91
Line coverage: 97.7%
Branch coverage
66%
Covered branches: 4
Total branches: 6
Branch coverage: 66.6%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
GetByIdAsync()100%11100%
GetByUsernameAsync()100%11100%
GetByUsernameWithRolesAsync()100%11100%
GetAllAsync()100%11100%
CreateAsync()100%11100%
UpdateAsync()50%2288.88%
DeleteAsync()100%22100%
ExistsAsync()100%11100%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.DataAccess/Repositories/UsuarioRepository.cs

#LineLine coverage
 1using FAU.Entidades;
 2using Microsoft.EntityFrameworkCore;
 3
 4namespace FAU.DataAccess.Repositories;
 5
 6public class UsuarioRepository : IUsuarioRepository
 7{
 8    private readonly ApplicationDbContext _context;
 9
 1610    public UsuarioRepository(ApplicationDbContext context)
 11    {
 1612        _context = context;
 1613    }
 14
 15    public async Task<Usuario?> GetByIdAsync(long id)
 16    {
 317        return await _context.Usuarios
 318            .Include(u => u.Persona)
 319            .Include(u => u.Roles)
 320            .FirstOrDefaultAsync(u => u.Id == id);
 321    }
 22
 23    public async Task<Usuario?> GetByUsernameAsync(string username)
 24    {
 325        return await _context.Usuarios
 326            .Include(u => u.Persona)
 327            .FirstOrDefaultAsync(u => u.Username.ToLower() == username.ToLower());
 328    }
 29
 30    public async Task<Usuario?> GetByUsernameWithRolesAsync(string username)
 31    {
 232        return await _context.Usuarios
 233            .Include(u => u.Persona)
 234            .Include(u => u.Roles)
 235                .ThenInclude(r => r.Permisos)
 236            .FirstOrDefaultAsync(u => u.Username.ToLower() == username.ToLower());
 237    }
 38
 39    public async Task<IEnumerable<Usuario>> GetAllAsync()
 40    {
 241        return await _context.Usuarios
 242            .Include(u => u.Persona)
 243            .Include(u => u.Roles)
 244            .ToListAsync();
 245    }
 46
 47    public async Task<Usuario> CreateAsync(Usuario usuario)
 48    {
 149        _context.Usuarios.Add(usuario);
 150        await _context.SaveChangesAsync();
 151        return usuario;
 152    }
 53
 54    public async Task<Usuario> UpdateAsync(Usuario usuario)
 55    {
 156        usuario.FechaActualizacion = DateTime.Now;
 57
 58        // Detach any existing entry to prevent change tracking conflicts
 159        var existingEntry = _context.ChangeTracker.Entries<Usuario>()
 260            .FirstOrDefault(e => e.Entity.Id == usuario.Id && e.Entity != usuario);
 61
 162        if (existingEntry != null)
 63        {
 064            _context.Entry(existingEntry.Entity).State = EntityState.Detached;
 65        }
 66
 167        _context.Usuarios.Update(usuario);
 168        await _context.SaveChangesAsync();
 69
 70        // Detach to prevent subsequent change tracking issues
 171        _context.Entry(usuario).State = EntityState.Detached;
 72
 173        return usuario;
 174    }
 75
 76    public async Task DeleteAsync(long id)
 77    {
 178        var usuario = await _context.Usuarios.FindAsync(id);
 179        if (usuario != null)
 80        {
 181            _context.Usuarios.Remove(usuario);
 182            await _context.SaveChangesAsync();
 83        }
 184    }
 85
 86    public async Task<bool> ExistsAsync(string username)
 87    {
 388        return await _context.Usuarios.AnyAsync(u => u.Username.ToLower() == username.ToLower());
 389    }
 90}
 91