예제 #1
0
        public async Task <IActionResult> CloneProject(int projectId, CloneProjectOptionDto option)
        {
            _logger.LogRequest("Cloning project {projectId}. Request body: {@option}", projectId, option);

            try
            {
                var ownerUserId    = User.GetUserId();
                var createdProject = await _projectService.CloneProject(projectId, option.NewProjectName, option.DisplayName, option.Client, ownerUserId,
                                                                        option.IncludeMembers, option.IncludeJobDefinitions);

                var project = _mapper.Map <ProjectDto>(createdProject);

                _logger.LogResponse("Project {projectId} cloned. Response body: {@project}", projectId, project);

                return(CreatedAtRoute("GetProjectById", new { projectId = project.Id }, project));
            }
            catch (DuplicateProjectException dupEx)
            {
                _logger.LogWarning(dupEx, "Duplicate project name");
                return(BadRequest(dupEx.Message));
            }
            catch (ProjectNotFoundException nopEx)
            {
                _logger.LogWarning(nopEx, "Project not found");
                return(BadRequest(nopEx.Message));
            }
        }
예제 #2
0
        public async void CloneProject_ReturnsCreatedProject()
        {
            _projectService
            .Setup(s => s.CloneProject(It.IsAny <int>(), It.IsAny <string>(), It.IsAny <int>(),
                                       It.IsAny <bool>(), It.IsAny <bool>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((int id, string newProjectName, int ownerUserId, bool includeMembers,
                           bool includeJobDefinitions, CancellationToken cancellationToken) =>
                          new Project
            {
                Id   = 2,
                Name = newProjectName
            });

            var httpContext = new DefaultHttpContext()
            {
                User = new ClaimsPrincipal(new[]
                {
                    new ClaimsIdentity(new[] { new Claim(ClaimTypes.NameIdentifier, "1") })
                })
            };

            var controller = new ProjectController(_projectService.Object, _mapper, _logger.Object)
            {
                ControllerContext = new ControllerContext {
                    HttpContext = httpContext
                }
            };

            var dto = new CloneProjectOptionDto
            {
                NewProjectName = "Project02"
            };
            var result = await controller.CloneProject(1, dto);

            var createAtRouteActionResult = Assert.IsType <CreatedAtRouteResult>(result);
            var returnValue = Assert.IsType <ProjectDto>(createAtRouteActionResult.Value);

            Assert.Equal(2, returnValue.Id);
            Assert.Equal("Project02", returnValue.Name);
        }
예제 #3
0
        public async Task <ProjectDto> CloneProject(int projectId, CloneProjectOptionDto option)
        {
            var path = $"project/{projectId}/clone";

            return(await Api.Post <CloneProjectOptionDto, ProjectDto>(path, option));
        }