< Summary

Class:MUNity.Services.UserService
Assembly:MUNity.Services
File(s):C:\Users\aeuke\source\repos\PeerConradi\munity\src\MUNityServices\Services\UserService.cs
Covered lines:31
Uncovered lines:38
Coverable lines:69
Total lines:127
Line coverage:44.9% (31 of 69)
Covered branches:2
Total branches:14
Branch coverage:14.2% (2 of 14)
Covered methods:4
Total methods:8
Method coverage:50% (4 of 8)

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
CreateUser()50%288.23%
CreateShadowUser()0%20%
CreateUser()100%10%
GetUserByUsername(...)100%1100%
LoginValid(...)50%285.71%
GetForeAndLastNameAsync()0%80%
GetUsersThatCanBeAddedToApplication(...)100%10%
.ctor(...)100%1100%

File(s)

C:\Users\aeuke\source\repos\PeerConradi\munity\src\MUNityServices\Services\UserService.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Identity;
 2using MUNity.Database.Context;
 3using MUNity.Database.Models.User;
 4using System;
 5using System.Collections.Generic;
 6using System.Linq;
 7using System.Security.Claims;
 8using System.Text;
 9using System.Threading.Tasks;
 10using Microsoft.Extensions.Logging;
 11using MUNity.Schema.Conference;
 12using Microsoft.EntityFrameworkCore;
 13using MUNity.Database.Extensions;
 14
 15namespace MUNity.Services
 16{
 17    public class UserService
 18    {
 19        private MunityContext context;
 20
 21        private UserManager<MunityUser> userManager;
 22
 23        private ILogger<UserService> _logger;
 24
 25        private IMailService _mailService;
 26
 27        public async Task<MunityUser> CreateUser(string username, string mail, string password)
 228        {
 229            var hasher = userManager.PasswordHasher;
 30
 231            var user = new MunityUser()
 232            {
 233                UserName = username,
 234                NormalizedUserName = username.ToUpper(),
 235                Email = mail,
 236                NormalizedEmail = mail.ToUpper()
 237            };
 238            var pass = hasher.HashPassword(user, password);
 239            user.PasswordHash = pass;
 240            var success = await userManager.CreateAsync(user);
 241            if (!success.Succeeded)
 042            {
 43                // TODO: Log errors
 044                return null;
 45            }
 246            return user;
 247        }
 48
 49        public async Task<MunityUser> CreateShadowUser(string mail)
 050        {
 051            var result = await userManager.CreateShadowUser(mail);
 052            if (result.Result.Succeeded)
 053            {
 054                _mailService.SendMail(mail, "Eingeladen", "Guten Tag, <br> Sie wurden zur Konferenz... eingeladen.");
 055                return result.User;
 56
 57            }
 58            else
 059            {
 060                _logger.LogWarning($"Unable to create shadow user {mail} codes: {string.Join(", ", result.Result.Errors.
 061            }
 062            return null;
 063        }
 64
 65        public async Task<MunityUser> CreateUser(MUNity.Schema.Account.RegisterModel model)
 066        {
 067            return await CreateUser(model.Username, model.Mail, model.Password);
 068        }
 69
 70        public MunityUser GetUserByUsername(string username)
 171        {
 172            return context.Users.FirstOrDefault(n => n.UserName == username);
 173        }
 74
 75        public bool LoginValid(string username, string password)
 176        {
 177            var user = GetUserByUsername(username);
 178            if (user == null)
 079                return false;
 80
 181            var result = userManager.PasswordHasher.VerifyHashedPassword(user, user.PasswordHash, password);
 182            return result == PasswordVerificationResult.Success;
 183        }
 84
 85        public async Task<string> GetForeAndLastNameAsync(ClaimsPrincipal claim)
 086        {
 087            if (claim == null)
 088            {
 089                _logger.LogWarning($"GetForeAndLastNameAsync was called with a null claim principal. Make sure you make 
 090                return "-";
 91            }
 092            var user = await userManager.GetUserAsync(claim);
 093            if (user == null) return "-";
 94
 095            if (!string.IsNullOrEmpty(user.Forename) || !string.IsNullOrEmpty(user.Lastname))
 096                return user.Forename + " " + user.Lastname;
 97
 098            return "-";
 099        }
 100
 101        public List<AddingToApplicationUser> GetUsersThatCanBeAddedToApplication(string conferenceId, string searchTerm)
 0102        {
 0103            var list = this.context.Users
 0104                .Where(n => EF.Functions.Like(n.UserName, $"%{searchTerm}%"))
 0105                .Select(n => new AddingToApplicationUser()
 0106                {
 0107                    UserName = n.UserName,
 0108                    DisplayName = n.GetDisplayNamePublic
 0109                });
 110
 0111            return list.ToList();
 0112        }
 113
 114        //public async Task<object> Login(MunityUser user)
 115        //{
 116        //    var signIn = await signInManager.SignIn(user, true);
 117        //}
 118
 2119        public UserService(MunityContext context, UserManager<MunityUser> userManager, IMailService mailService, ILogger
 2120        {
 2121            this.context = context;
 2122            this.userManager = userManager;
 2123            this._logger = logger;
 2124            this._mailService = mailService;
 2125        }
 126    }
 127}