< Summary

Information
Class: Elsa.Identity.Services.RoleManager
Assembly: Elsa.Identity
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Identity/Services/RoleManager.cs
Line coverage
59%
Covered lines: 13
Uncovered lines: 9
Coverable lines: 22
Total lines: 55
Line coverage: 59%
Branch coverage
50%
Covered branches: 4
Total branches: 8
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
CreateRoleAsync()33.33%21625%
RoleExistsAsync()100%22100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Identity/Services/RoleManager.cs

#LineLine coverage
 1using Elsa.Identity.Contracts;
 2using Elsa.Identity.Entities;
 3using Elsa.Identity.Models;
 4using Humanizer;
 5
 6namespace Elsa.Identity.Services;
 7
 8/// <summary>
 9/// Default implementation of <see cref="IRoleManager"/>.
 10/// </summary>
 11public class RoleManager : IRoleManager
 12{
 13    private readonly IRoleStore _roleStore;
 14    private readonly IRoleProvider _roleProvider;
 15
 616    public RoleManager(IRoleStore roleStore, IRoleProvider roleProvider)
 17    {
 618        _roleStore = roleStore;
 619        _roleProvider = roleProvider;
 620    }
 21
 22    /// <inheritdoc />
 23    public async Task<CreateRoleResult> CreateRoleAsync(
 24        string name,
 25        ICollection<string>? permissions = null,
 26        string? id = null,
 27        CancellationToken cancellationToken = default)
 28    {
 229        var roleId = id ?? name.Kebaberize();
 30
 231        if (await RoleExistsAsync(roleId, cancellationToken))
 232            throw new InvalidOperationException($"A role with ID '{roleId}' already exists.");
 33
 034        var role = new Role
 035        {
 036            Id = roleId,
 037            Name = name,
 038            Permissions = permissions ?? new List<string>()
 039        };
 40
 041        await _roleStore.SaveAsync(role, cancellationToken);
 42
 043        return new CreateRoleResult(role);
 044    }
 45
 46    private async Task<bool> RoleExistsAsync(string roleId, CancellationToken cancellationToken)
 47    {
 248        var storedRole = await _roleStore.FindAsync(new() { Id = roleId }, cancellationToken);
 249        if (storedRole != null)
 150            return true;
 51
 152        var providedRoles = await _roleProvider.FindManyAsync(new() { Id = roleId }, cancellationToken);
 253        return providedRoles.Any(x => x.Id == roleId);
 254    }
 55}