< 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: 42
Uncovered lines: 1
Coverable lines: 43
Total lines: 90
Line coverage: 97.6%
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            .FirstOrDefaultAsync(u => u.Username.ToLower() == username.ToLower());
 236    }
 37
 38    public async Task<IEnumerable<Usuario>> GetAllAsync()
 39    {
 240        return await _context.Usuarios
 241            .Include(u => u.Persona)
 242            .Include(u => u.Roles)
 243            .ToListAsync();
 244    }
 45
 46    public async Task<Usuario> CreateAsync(Usuario usuario)
 47    {
 148        _context.Usuarios.Add(usuario);
 149        await _context.SaveChangesAsync();
 150        return usuario;
 151    }
 52
 53    public async Task<Usuario> UpdateAsync(Usuario usuario)
 54    {
 155        usuario.FechaActualizacion = DateTime.Now;
 56
 57        // Detach any existing entry to prevent change tracking conflicts
 158        var existingEntry = _context.ChangeTracker.Entries<Usuario>()
 259            .FirstOrDefault(e => e.Entity.Id == usuario.Id && e.Entity != usuario);
 60
 161        if (existingEntry != null)
 62        {
 063            _context.Entry(existingEntry.Entity).State = EntityState.Detached;
 64        }
 65
 166        _context.Usuarios.Update(usuario);
 167        await _context.SaveChangesAsync();
 68
 69        // Detach to prevent subsequent change tracking issues
 170        _context.Entry(usuario).State = EntityState.Detached;
 71
 172        return usuario;
 173    }
 74
 75    public async Task DeleteAsync(long id)
 76    {
 177        var usuario = await _context.Usuarios.FindAsync(id);
 178        if (usuario != null)
 79        {
 180            _context.Usuarios.Remove(usuario);
 181            await _context.SaveChangesAsync();
 82        }
 183    }
 84
 85    public async Task<bool> ExistsAsync(string username)
 86    {
 387        return await _context.Usuarios.AnyAsync(u => u.Username.ToLower() == username.ToLower());
 388    }
 89}
 90