< Summary - pva.SuperV

Information
Class: pva.SuperV.Api.Services.Classes.ClassService
Assembly: pva.SuperV.Api
File(s): /home/runner/work/pva.SuperV/pva.SuperV/pva.SuperV.Api/Services/Classes/ClassService.cs
Tag: dotnet-ubuntu_18869653307
Line coverage
91%
Covered lines: 41
Uncovered lines: 4
Coverable lines: 45
Total lines: 75
Line coverage: 91.1%
Branch coverage
58%
Covered branches: 7
Total branches: 12
Branch coverage: 58.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%
GetClassesAsync()100%11100%
SearchClassesAsync()100%11100%
FilterClasses(...)100%22100%
GetClassAsync(...)100%11100%
CreateClassAsync(...)50%2283.33%
UpdateClassAsync(...)50%6677.77%
DeleteClassAsync(...)50%2285.71%

File(s)

/home/runner/work/pva.SuperV/pva.SuperV/pva.SuperV.Api/Services/Classes/ClassService.cs

#LineLine coverage
 1using pva.SuperV.Api.Exceptions;
 2using pva.SuperV.Engine;
 3using pva.SuperV.Model;
 4using pva.SuperV.Model.Classes;
 5using pva.SuperV.Model.Services;
 6
 7namespace pva.SuperV.Api.Services.Classes
 8{
 9    public class ClassService : BaseService, IClassService
 10    {
 1211        private readonly Dictionary<string, Comparison<ClassModel>> sortOptions = new()
 1212            {
 8213                { "name", new Comparison<ClassModel>((a, b) => a.Name.CompareTo(b.Name)) }
 1214            };
 15
 16        public async Task<List<ClassModel>> GetClassesAsync(string projectId)
 917        {
 918            Project project = GetProjectEntity(projectId);
 10619            return await Task.FromResult(project.Classes.Values.Select(clazz => ClassMapper.ToDto(clazz)).ToList());
 920        }
 21
 22        public async Task<PagedSearchResult<ClassModel>> SearchClassesAsync(string projectId, ClassPagedSearchRequest se
 823        {
 824            List<ClassModel> allClasses = await GetClassesAsync(projectId);
 825            List<ClassModel> projects = FilterClasses(allClasses, search);
 826            projects = SortResult(projects, search.SortOption, sortOptions);
 727            return CreateResult(search, allClasses, projects);
 728        }
 29
 30        private static List<ClassModel> FilterClasses(List<ClassModel> allClasses, ClassPagedSearchRequest search)
 831        {
 832            List<ClassModel> filteredClasses = allClasses;
 833            if (!String.IsNullOrEmpty(search.NameFilter))
 134            {
 1435                filteredClasses = [.. filteredClasses.Where(clazz => clazz.Name.Contains(search.NameFilter))];
 136            }
 837            return filteredClasses;
 838        }
 39
 40        public Task<ClassModel> GetClassAsync(string projectId, string className)
 241            => Task.FromResult(ClassMapper.ToDto(GetClassEntity(projectId, className)));
 42
 43        public Task<ClassModel> CreateClassAsync(string projectId, ClassModel createRequest)
 444        {
 445            if (GetProjectEntity(projectId) is WipProject wipProject)
 446            {
 447                return Task.FromResult(ClassMapper.ToDto(wipProject.AddClass(createRequest!.Name, createRequest!.BaseCla
 48            }
 049            return Task.FromException<ClassModel>(new NonWipProjectException(projectId));
 450        }
 51
 52        public Task<ClassModel> UpdateClassAsync(string projectId, string className, ClassModel updateRequest)
 153        {
 154            if (GetProjectEntity(projectId) is WipProject wipProject)
 155            {
 156                if (updateRequest.Name == null || updateRequest.Name.Equals(className))
 157                {
 158                    return Task.FromResult(ClassMapper.ToDto(wipProject.UpdateClass(className, updateRequest!.BaseClassN
 59                }
 060                return Task.FromException<ClassModel>(new EntityPropertyNotChangeableException("class", "Name"));
 61            }
 062            return Task.FromException<ClassModel>(new NonWipProjectException(projectId));
 163        }
 64
 65        public ValueTask DeleteClassAsync(string projectId, string className)
 166        {
 167            if (GetProjectEntity(projectId) is WipProject wipProject)
 168            {
 169                wipProject.RemoveClass(className);
 170                return ValueTask.CompletedTask;
 71            }
 072            return ValueTask.FromException(new NonWipProjectException(projectId));
 173        }
 74    }
 75}