< Summary - pva.SuperV

Information
Class: pva.SuperV.Api.Services.FieldDefinitions.FieldDefinitionService
Assembly: pva.SuperV.Api
File(s): /home/runner/work/pva.SuperV/pva.SuperV/pva.SuperV.Api/Services/FieldDefinitions/FieldDefinitionService.cs
Tag: dotnet-ubuntu_18869653307
Line coverage
77%
Covered lines: 58
Uncovered lines: 17
Coverable lines: 75
Total lines: 114
Line coverage: 77.3%
Branch coverage
68%
Covered branches: 11
Total branches: 16
Branch coverage: 68.7%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%
GetFieldAsync()50%2283.33%
SearchFieldsAsync()100%11100%
FilterFieldDefinitions(...)100%22100%
CreateFieldsAsync()50%3245%
UpdateFieldAsync()66.66%6690.9%
DeleteFieldAsync()50%2287.5%

File(s)

/home/runner/work/pva.SuperV/pva.SuperV/pva.SuperV.Api/Services/FieldDefinitions/FieldDefinitionService.cs

#LineLine coverage
 1using pva.SuperV.Api.Exceptions;
 2using pva.SuperV.Engine;
 3using pva.SuperV.Engine.Exceptions;
 4using pva.SuperV.Engine.FieldFormatters;
 5using pva.SuperV.Model;
 6using pva.SuperV.Model.FieldDefinitions;
 7using pva.SuperV.Model.Services;
 8
 9namespace pva.SuperV.Api.Services.FieldDefinitions
 10{
 11    public class FieldDefinitionService : BaseService, IFieldDefinitionService
 12    {
 1313        private readonly Dictionary<string, Comparison<FieldDefinitionModel>> sortOptions = new()
 1314            {
 3415                { "name", new Comparison<FieldDefinitionModel>((a, b) => a.Name.CompareTo(b.Name)) }
 1316            };
 17
 18        public async Task<List<FieldDefinitionModel>> GetFieldsAsync(string projectId, string className)
 10219            => await Task.FromResult(GetClassEntity(projectId, className).FieldDefinitions.Values.Select(field => FieldD
 20
 21        public async Task<FieldDefinitionModel> GetFieldAsync(string projectId, string className, string fieldName)
 122        {
 123            if (GetClassEntity(projectId, className).FieldDefinitions.TryGetValue(fieldName, out IFieldDefinition? field
 124            {
 125                return await Task.FromResult(FieldDefinitionMapper.ToDto(fieldDefinition));
 26            }
 027            return await Task.FromException<FieldDefinitionModel>(new UnknownEntityException("Field", fieldName));
 128        }
 29
 30        public async Task<PagedSearchResult<FieldDefinitionModel>> SearchFieldsAsync(string projectId, string className,
 831        {
 832            List<FieldDefinitionModel> allFieldDefinitions = await GetFieldsAsync(projectId, className);
 833            List<FieldDefinitionModel> fieldDefinitions = FilterFieldDefinitions(allFieldDefinitions, search);
 834            fieldDefinitions = SortResult(fieldDefinitions, search.SortOption, sortOptions);
 735            return CreateResult(search, allFieldDefinitions, fieldDefinitions);
 736        }
 37
 38        private static List<FieldDefinitionModel> FilterFieldDefinitions(List<FieldDefinitionModel> allFieldDefinitions,
 839        {
 840            List<FieldDefinitionModel> filteredClasses = allFieldDefinitions;
 841            if (!String.IsNullOrEmpty(search.NameFilter))
 142            {
 1143                filteredClasses = [.. filteredClasses.Where(fieldDefinition => fieldDefinition.Name.Contains(search.Name
 144            }
 845            return filteredClasses;
 846        }
 47
 48
 49        public async Task<List<FieldDefinitionModel>> CreateFieldsAsync(string projectId, string className, List<FieldDe
 450        {
 451            if (GetProjectEntity(projectId) is WipProject wipProject)
 452            {
 453                List<FieldDefinitionModel> createdFieldDefinitions = [];
 454                Class clazz = GetClassEntity(wipProject, className);
 55                try
 456                {
 457                    createRequests.ForEach(fieldDefinition =>
 3358                    {
 3359                        FieldFormatter? fieldFormatter = null;
 3360                        if (fieldDefinition.ValueFormatter is not null)
 361                        {
 362                            fieldFormatter = wipProject.GetFormatter(fieldDefinition.ValueFormatter);
 363                        }
 3364                        createdFieldDefinitions.Add(FieldDefinitionMapper.ToDto(clazz.AddField(FieldDefinitionMapper.Fro
 3765                    });
 466                    return await Task.FromResult(createdFieldDefinitions);
 67                }
 068                catch (SuperVException e)
 069                {
 70                    // If exception while creatig one of the fields, remove all the already created fields.
 71                    try
 072                    {
 073                        createdFieldDefinitions.ForEach(fieldDefinition =>
 074                        {
 075                            clazz.RemoveField(fieldDefinition.Name);
 076                        });
 077                    }
 078                    catch (SuperVException)
 079                    {
 80                        // Ignore execption while deleting
 081                    }
 082                    return await Task.FromException<List<FieldDefinitionModel>>(e);
 83                }
 084            }
 085            return await Task.FromException<List<FieldDefinitionModel>>(new NonWipProjectException(projectId));
 486        }
 87
 88        public async Task<FieldDefinitionModel> UpdateFieldAsync(string projectId, string className, string fieldName, F
 389        {
 390            if (GetProjectEntity(projectId) is WipProject wipProject)
 391            {
 392                _ = GetClassEntity(wipProject, className);
 393                if (updateRequest.Name == null || updateRequest.Name.Equals(fieldName))
 294                {
 295                    IFieldDefinition fieldDefinitionUpdate = FieldDefinitionMapper.FromDto(updateRequest);
 296                    return await Task.FromResult(FieldDefinitionMapper.ToDto(wipProject.UpdateField(className, fieldName
 97                }
 198                return await Task.FromException<FieldDefinitionModel>(new EntityPropertyNotChangeableException("field", 
 99            }
 0100            return await Task.FromException<FieldDefinitionModel>(new NonWipProjectException(projectId));
 1101        }
 102
 103        public async ValueTask DeleteFieldAsync(string projectId, string className, string fieldName)
 1104        {
 1105            if (GetProjectEntity(projectId) is WipProject wipProject)
 1106            {
 1107                GetClassEntity(wipProject, className).RemoveField(fieldName);
 1108                await ValueTask.CompletedTask;
 1109                return;
 110            }
 0111            await ValueTask.FromException(new NonWipProjectException(projectId));
 1112        }
 113    }
 114}