< Summary - pva.SuperV

Information
Class: pva.SuperV.Api.Services.Projects.ProjectService
Assembly: pva.SuperV.Api
File(s): /home/runner/work/pva.SuperV/pva.SuperV/pva.SuperV.Api/Services/Projects/ProjectService.cs
Tag: dotnet-ubuntu_18869653307
Line coverage
97%
Covered lines: 75
Uncovered lines: 2
Coverable lines: 77
Total lines: 122
Line coverage: 97.4%
Branch coverage
83%
Covered branches: 10
Total branches: 12
Branch coverage: 83.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%
GetProjectAsync()100%11100%
SearchProjectsAsync()100%11100%
FilterProjects(...)100%22100%
CreateProjectAsync()100%11100%
CreateProjectFromRunnableAsync()50%2285.71%
UpdateProjectAsync()50%2288.88%
BuildProjectAsync()100%22100%
GetProjectDefinitionsAsync()100%11100%
CreateProjectFromJsonDefinitionAsync()100%11100%
GetProjectInstancesAsync()100%22100%
LoadProjectInstancesAsync()100%22100%
UnloadProjectAsync()100%11100%

File(s)

/home/runner/work/pva.SuperV/pva.SuperV/pva.SuperV.Api/Services/Projects/ProjectService.cs

#LineLine coverage
 1using pva.SuperV.Api.Exceptions;
 2using pva.SuperV.Engine;
 3using pva.SuperV.Engine.Exceptions;
 4using pva.SuperV.Model;
 5using pva.SuperV.Model.Projects;
 6using pva.SuperV.Model.Services;
 7
 8namespace pva.SuperV.Api.Services.Projects
 9{
 10    public class ProjectService : BaseService, IProjectService
 11    {
 2112        private readonly Dictionary<string, Comparison<ProjectModel>> sortOptions = new()
 2113            {
 10414                { "name", new Comparison<ProjectModel>((a, b) => a.Name.CompareTo(b.Name)) }
 2115            };
 16
 17        public async Task<List<ProjectModel>> GetProjectsAsync()
 9718            => await Task.FromResult(Project.Projects.Values.Select(project => ProjectMapper.ToDto(project)).ToList());
 19
 20        public async Task<ProjectModel> GetProjectAsync(string projectId)
 321        {
 322            return await Task.FromResult(ProjectMapper.ToDto(GetProjectEntity(projectId)));
 23
 124        }
 25
 26        public async Task<PagedSearchResult<ProjectModel>> SearchProjectsAsync(ProjectPagedSearchRequest search)
 827        {
 828            List<ProjectModel> allProjects = await GetProjectsAsync();
 829            List<ProjectModel> projects = FilterProjects(allProjects, search);
 830            projects = SortResult(projects, search.SortOption, sortOptions);
 731            return CreateResult(search, allProjects, projects);
 732        }
 33
 34        private static List<ProjectModel> FilterProjects(List<ProjectModel> allProjects, ProjectPagedSearchRequest searc
 835        {
 836            List<ProjectModel> filteredProjects = allProjects;
 837            if (!String.IsNullOrEmpty(search.NameFilter))
 138            {
 1339                filteredProjects = [.. filteredProjects.Where(project => project.Name.Contains(search.NameFilter))];
 140            }
 841            return filteredProjects;
 842        }
 43
 44        public async Task<ProjectModel> CreateProjectAsync(CreateProjectRequest createProjectRequest)
 345        {
 346            WipProject wipProject = Project.CreateProject(createProjectRequest.Name, createProjectRequest.HistoryStorage
 347            wipProject.Description = createProjectRequest.Description;
 348            return await Task.FromResult(ProjectMapper.ToDto(wipProject));
 349        }
 50
 51        public async Task<ProjectModel> CreateProjectFromRunnableAsync(string runnableProjectId)
 152        {
 153            if (GetProjectEntity(runnableProjectId) is RunnableProject runnableProject)
 154            {
 155                WipProject wipProject = Project.CreateProject(runnableProject);
 156                return await Task.FromResult(ProjectMapper.ToDto(wipProject));
 57            }
 058            throw new NonRunnableProjectException(runnableProjectId);
 159        }
 60
 61        public async Task<ProjectModel> UpdateProjectAsync(string projectId, UpdateProjectRequest updateProjectRequest)
 162        {
 163            Project? projectToUpdate = GetProjectEntity(projectId);
 164            if (projectToUpdate is not null)
 165            {
 166                projectToUpdate.Description = updateProjectRequest.Description;
 167                projectToUpdate.HistoryStorageEngineConnectionString = updateProjectRequest.HistoryStorageConnectionStri
 168                return await Task.FromResult(ProjectMapper.ToDto(projectToUpdate));
 69            }
 070            return await Task.FromException<ProjectModel>(new UnknownEntityException("Project", projectId));
 171        }
 72
 73        public async Task<ProjectModel> BuildProjectAsync(string projectId)
 374        {
 375            if (GetProjectEntity(projectId) is WipProject wipProject)
 276            {
 277                RunnableProject runnableProject = await Project.BuildAsync(wipProject);
 278                return ProjectMapper.ToDto(runnableProject);
 79            }
 180            throw new NonWipProjectException(projectId);
 281        }
 82
 83        public async Task<Stream?> GetProjectDefinitionsAsync(string projectId)
 184        {
 185            Project project = GetProjectEntity(projectId);
 186            StreamWriter stream = new(new MemoryStream());
 187            return await ProjectStorage.StreamProjectDefinitionAsync(project, stream);
 188        }
 89
 90        public async Task<ProjectModel> CreateProjectFromJsonDefinitionAsync(StreamReader streamReader)
 191        {
 192            return await Task.FromResult(ProjectMapper.ToDto(ProjectStorage.CreateProjectFromJsonDefinition<RunnableProj
 193        }
 94
 95        public async Task<Stream?> GetProjectInstancesAsync(string projectId)
 296        {
 297            if (GetProjectEntity(projectId) is RunnableProject runnableProject)
 198            {
 199                StreamWriter stream = new(new MemoryStream());
 1100                return await ProjectStorage.StreamProjectInstancesAsync(runnableProject, stream);
 101            }
 1102            throw new NonRunnableProjectException(projectId);
 1103        }
 104
 105        public async ValueTask LoadProjectInstancesAsync(string projectId, StreamReader reader)
 2106        {
 2107            if (GetProjectEntity(projectId) is RunnableProject runnableProject)
 1108            {
 1109                ProjectStorage.LoadProjectInstances(runnableProject, reader);
 1110                await ValueTask.CompletedTask;
 1111                return;
 112            }
 1113            await ValueTask.FromException(new NonRunnableProjectException(projectId));
 1114        }
 115
 116        public async ValueTask UnloadProjectAsync(string projectId)
 1117        {
 1118            GetProjectEntity(projectId).Unload();
 1119            await ValueTask.CompletedTask;
 1120        }
 121    }
 122}