< Summary - Syki

Information
Class: Syki.Back.Features.Identity.ResetPassword.ResetPasswordService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Identity/ResetPassword/ResetPasswordService.cs
Tag: 56_26538939494
Line coverage
100%
Covered lines: 15
Uncovered lines: 0
Coverable lines: 15
Total lines: 31
Line coverage: 100%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Reset()100%1010100%

File(s)

/home/runner/work/syki/syki/Back/Features/Identity/ResetPassword/ResetPasswordService.cs

#LineLine coverage
 1using Syki.Back.Domain.Identity;
 2
 3namespace Syki.Back.Features.Identity.ResetPassword;
 4
 365public class ResetPasswordService(SykiDbContext ctx, UserManager<SykiUser> userManager) : ISykiService
 6{
 7    public async Task<OneOf<SykiSuccess, SykiError>> Reset(ResetPasswordIn body)
 8    {
 369        _ = Guid.TryParse(body.Token, out var id);
 3610        var reset = await ctx.ResetPasswordTokens.FirstOrDefaultAsync(r => r.Id == id);
 3611        if (reset == null || reset.IsUsed() || reset.IsExpired())
 12        {
 613            return InvalidResetPasswordToken.I;
 14        }
 15
 3016        var user = await userManager.FindByIdAsync(reset.UserId.ToString());
 17
 3018        var result = await userManager.ResetPasswordAsync(user!, reset.Token, body.Password);
 3019        if (!result.Succeeded)
 20        {
 8221            if (result.Errors.Any(e => e.Code == "InvalidToken")) return InvalidResetPasswordToken.I;
 1822            return WeakPassword.I;
 23        }
 24
 1025        reset.Use();
 1026        user!.EmailConfirmed = true;
 1027        await ctx.SaveChangesAsync();
 28
 1029        return SykiSuccess.I;
 3630    }
 31}