< Summary

Class:MUNity.Services.OrganizationService
Assembly:MUNity.Services
File(s):C:\Users\aeuke\source\repos\PeerConradi\munity\src\MUNityServices\Services\OrganizationService.cs
Covered lines:68
Uncovered lines:95
Coverable lines:163
Total lines:237
Line coverage:41.7% (68 of 163)
Covered branches:4
Total branches:34
Branch coverage:11.7% (4 of 34)
Covered methods:8
Total methods:15
Method coverage:53.3% (8 of 15)

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
IsNameAvailable(...)50%280%
IsShortAvailable(...)50%280%
CreateOrganization(...)100%2100%
CreateOrganizationAsync()0%280%
OrganizationWithIdExisits(...)100%1100%
IsUsernameMemberOfOrganiation(...)100%1100%
IsMemberOfOrganization(...)100%10%
GetTinyInfo(...)100%1100%
GetTyinInfosOfAllOrgas()100%10%
GetTinyInfoOfUserOrganizations(...)100%10%
GetTinyInfoOfUserOrganizations(...)100%10%
GetOrgaConferenceInfo(...)100%1100%
GetCompleteOrganizationInfo(...)100%10%
GetDashboardInfo(...)100%10%
.ctor(...)100%1100%

File(s)

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

#LineLine coverage
 1using Microsoft.AspNetCore.Identity;
 2using Microsoft.EntityFrameworkCore;
 3using Microsoft.Extensions.Logging;
 4using MUNity.Database.Context;
 5using MUNity.Database.Models.Organization;
 6using MUNity.Database.Models.User;
 7using MUNity.Schema.Organization;
 8using MUNity.Services.Exceptions;
 9using System;
 10using System.Collections.Generic;
 11using System.Linq;
 12using System.Security.Claims;
 13using System.Text;
 14using System.Threading.Tasks;
 15
 16namespace MUNity.Services
 17{
 18    public class OrganizationService
 19    {
 20        private readonly MunityContext context;
 21
 22        ILogger<OrganizationService> log;
 23
 24        private UserManager<MunityUser> userManager;
 25
 26        public bool IsNameAvailable(string name)
 227        {
 228            if (string.IsNullOrWhiteSpace(name))
 029                return false;
 230            return context.Organizations.AsNoTracking().All(n => n.OrganizationName.ToLower() != name.ToLower());
 231        }
 32
 33        public bool IsShortAvailable(string shortName)
 234        {
 235            if (string.IsNullOrWhiteSpace(shortName))
 036                return false;
 237            return context.Organizations.AsNoTracking().All(n => n.OrganizationShort.ToLower() != shortName.ToLower());
 238        }
 39
 40        public Organization CreateOrganization(string name, string shortName, MunityUser user)
 141        {
 42
 143            var organization = new Organization()
 144            {
 145                OrganizationName = name,
 146                OrganizationShort = shortName,
 147            };
 48
 149            var easyId = Util.IdGenerator.AsPrimaryKey(shortName);
 150            if (context.Organizations.All(n => n.OrganizationId != easyId))
 151                organization.OrganizationId = easyId;
 52
 153            var orgaAdminRole = new OrganizationRole()
 154            {
 155                CanCreateProject = true,
 156                CanManageMembers = true,
 157                CanCreateRoles = true,
 158                RoleName = "Admin",
 159                Organization = organization
 160            };
 61
 162            var membership = new OrganizationMember()
 163            {
 164                JoinedDate = DateTime.Now,
 165                Organization = organization,
 166                Role = orgaAdminRole,
 167                User = user
 168            };
 69
 170            context.Organizations.Add(organization);
 171            context.OrganizationRoles.Add(orgaAdminRole);
 172            context.OrganizationMembers.Add(membership);
 173            context.SaveChanges();
 174            return organization;
 175        }
 76
 77        public async Task<CreateOrganizationResponse> CreateOrganizationAsync(CreateOrganizationRequest request, ClaimsP
 078        {
 079            log?.LogDebug("Request creating an organization!");
 80
 081            var response = new CreateOrganizationResponse();
 82
 083            if (claim == null ||claim.Identity == null || string.IsNullOrEmpty(claim.Identity.Name))
 084            {
 085                response.Status = CreateOrganizationResponse.CreateOrgaStatusCodes.Error;
 086                log?.LogDebug($"The given claim was not valid.");
 087                return response;
 88            }
 89
 090            log?.LogInformation($"{claim.Identity.Name} wants to create the organization {request.Name}");
 91
 092            var user = await userManager.GetUserAsync(claim);
 093            if (user == null)
 094            {
 095                response.Status = CreateOrganizationResponse.CreateOrgaStatusCodes.Error;
 096                log?.LogDebug($"User was not found to create the organization.");
 097                return response;
 98            }
 99
 0100            if (!IsNameAvailable(request.Name))
 0101            {
 0102                response.Status = CreateOrganizationResponse.CreateOrgaStatusCodes.NameTaken;
 0103                log?.LogDebug($"Organization Name: {request.Name} was already taken!");
 0104                return response;
 105            }
 106
 0107            if (!IsShortAvailable(request.ShortName))
 0108            {
 0109                response.Status = CreateOrganizationResponse.CreateOrgaStatusCodes.ShortTaken;
 0110                log?.LogDebug($"Organization Short: {request.ShortName} was already taken!");
 0111                return response;
 112            }
 113
 0114            var createdOrganization = CreateOrganization(request.Name, request.ShortName, user);
 0115            if (createdOrganization != null)
 0116            {
 0117                response.OrganizationId = createdOrganization.OrganizationId;
 0118                log?.LogDebug($"Organization {request.Name} with the id {createdOrganization.OrganizationId} has been cr
 0119            }
 0120            return response;
 0121        }
 122
 123
 124
 125        public bool OrganizationWithIdExisits(string id)
 1126        {
 1127            return context.Organizations.AsNoTracking().Any(n => n.OrganizationId == id);
 1128        }
 129
 130        public bool IsUsernameMemberOfOrganiation(string username, string organizationId)
 1131        {
 1132            return context.OrganizationMembers.AsNoTracking().Any(n => n.User.UserName == username && n.Organization.Org
 1133        }
 134
 135        public bool IsMemberOfOrganization(ClaimsPrincipal principal, string organizationId)
 0136        {
 0137            return IsUsernameMemberOfOrganiation(principal.Identity.Name, organizationId);
 0138        }
 139
 140        public OrganizationTinyInfo GetTinyInfo(string organizationId)
 1141        {
 1142            return context.Organizations.AsNoTracking().Select(n => new OrganizationTinyInfo()
 1143            {
 1144                Name = n.OrganizationName,
 1145                OrganizationId = n.OrganizationId,
 1146                Short = n.OrganizationShort
 1147            }).FirstOrDefault(n => n.OrganizationId == organizationId);
 1148        }
 149
 150        public List<OrganizationTinyInfo> GetTyinInfosOfAllOrgas()
 0151        {
 0152            return context.Organizations.AsNoTracking().Select(n => new OrganizationTinyInfo()
 0153            {
 0154                Name = n.OrganizationName,
 0155                OrganizationId = n.OrganizationId,
 0156                Short = n.OrganizationShort
 0157            }).ToList();
 0158        }
 159
 160        public List<OrganizationTinyInfo> GetTinyInfoOfUserOrganizations(string username)
 0161        {
 0162            return context.Organizations.AsNoTracking().Where(n => n.Member.Any(a => a.User.UserName == username))
 0163                .Select(n => new OrganizationTinyInfo()
 0164                {
 0165                    Name = n.OrganizationName,
 0166                    OrganizationId = n.OrganizationId,
 0167                    Short = n.OrganizationShort
 0168                }).ToList();
 0169        }
 170
 171        public List<OrganizationTinyInfo> GetTinyInfoOfUserOrganizations(ClaimsPrincipal claimPrincipal)
 0172        {
 0173            return GetTinyInfoOfUserOrganizations(claimPrincipal.Identity.Name);
 0174        }
 175
 176        public OrganizationWithConferenceInfo GetOrgaConferenceInfo(string organizationId)
 1177        {
 1178            return context.Organizations.AsNoTracking().Select(n => new OrganizationWithConferenceInfo()
 1179            {
 1180                Name = n.OrganizationName,
 1181                OrganizationId = n.OrganizationId,
 1182                Short = n.OrganizationShort,
 1183                ProjectCount = n.Projects.Count,
 1184                ConferenceCount = n.Projects.Select(n => n.Conferences).Count()
 1185            }).FirstOrDefault(n => n.OrganizationId == organizationId);
 1186        }
 187
 188        public Organization GetCompleteOrganizationInfo(string organizationId)
 0189        {
 0190            return context.Organizations
 0191                .AsNoTracking()
 0192                .Include(n => n.Member)
 0193                .ThenInclude(n => n.User)
 0194                .Include(n => n.Projects)
 0195                .Include(n => n.Roles)
 0196                .FirstOrDefault(n => n.OrganizationId == organizationId);
 0197        }
 198
 199        public OrganizationDashboardInfo GetDashboardInfo(string organizationId)
 0200        {
 0201            var info = context.Organizations
 0202                .AsNoTracking()
 0203                .Select(n => new OrganizationDashboardInfo()
 0204                {
 0205                    OrganizationId = n.OrganizationId,
 0206                    Name = n.OrganizationName,
 0207                    Short = n.OrganizationShort,
 0208                    Projects = n.Projects.Select(a => new OrganizationDashboardProjectInfo()
 0209                    {
 0210                        ConferenceCount = a.Conferences.Count,
 0211                        Name = a.ProjectName,
 0212                        ProjectId = a.ProjectId
 0213                    }).ToList()
 0214                })
 0215                .FirstOrDefault(n => n.OrganizationId == organizationId);
 0216            info.Memebrs = context.OrganizationMembers
 0217                .Where(n => n.Organization.OrganizationId == organizationId)
 0218                .Take(8)
 0219                .Select(a => new OrganizationMemberInfo()
 0220                {
 0221                    Forename = a.User.Forename,
 0222                    LastName = a.User.Lastname,
 0223                    MemberUserName = a.User.UserName,
 0224                    RoleName = a.Role.RoleName
 0225                }).ToList();
 226
 0227            return info;
 0228        }
 229
 1230        public OrganizationService(MunityContext context, ILogger<OrganizationService> logger, UserManager<MunityUser> u
 1231        {
 1232            this.context = context;
 1233            this.log = logger;
 1234            this.userManager = userManager;
 1235        }
 236    }
 237}