public async void CreateProjectMember_ReturnsCreatedProjectMember() { _projectMemberService .Setup(s => s.AddProjectMember(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>())) .ReturnsAsync(1); _projectMemberService.Setup(s => s.GetProjectMemberById(It.IsAny <int>(), It.IsAny <CancellationToken>())) .ReturnsAsync((int id, CancellationToken cancellationToken) => new ProjectMember { Id = id, UserId = 1, ProjectMemberRoleId = 1 }); var controller = new ProjectMemberController(_projectMemberService.Object, _mapper, _logger.Object); var dto = new NewProjectMemberDto { ProjectId = 1, UserId = 1, ProjectMemberRoleId = 1 }; var result = await controller.CreateProjectMember(1, dto); var createAtRouteActionResult = Assert.IsType <CreatedAtRouteResult>(result); var returnValue = Assert.IsType <ProjectMemberDto>(createAtRouteActionResult.Value); Assert.Equal(1, returnValue.Id); }
public async Task <IActionResult> CreateProjectMember(int projectId, NewProjectMemberDto newProjectMember) { _logger.LogRequest("Creating member in project {projectId}. Request body: {@newProjectMember}", projectId, newProjectMember); try { if (projectId != newProjectMember.ProjectId) { _logger.LogWarning("Project Id doesn't match"); return(BadRequest("Project Id doesn't match.")); } var(newProjectMemberId, newUserId) = (0, 0); if (newProjectMember.UserId > 0) { newProjectMemberId = await _projectMemberService.AddProjectMember(newProjectMember.ProjectId, newProjectMember.UserId, newProjectMember.ProjectMemberRoleId); } else { (newProjectMemberId, newUserId) = await _projectMemberService.AddProjectMember(newProjectMember.ProjectId, newProjectMember.Email, newProjectMember.FirstName, newProjectMember.LastName, newProjectMember.ExternalAccountIds, newProjectMember.ProjectMemberRoleId, _configuration[ConfigurationKey.WebUrl]); } var projectMember = await _projectMemberService.GetProjectMemberById(newProjectMemberId); var result = _mapper.Map <ProjectMemberDto>(projectMember); _logger.LogResponse("Members in project {projectId} created. Response body: {@results}", projectId, result); return(CreatedAtRoute("GetProjectMemberById", new { projectId = newProjectMember.ProjectId, memberId = newProjectMemberId }, result)); } catch (UserNotFoundException userEx) { _logger.LogWarning(userEx, "User not found"); return(BadRequest(userEx.Message)); } catch (UserCreationFailedException userCreateEx) { _logger.LogWarning(userCreateEx, "User creation failed"); return(BadRequest(userCreateEx.Message)); } catch (DuplicateUserEmailException dupUserEx) { _logger.LogWarning(dupUserEx, "Duplicate user email"); return(BadRequest(dupUserEx.Message)); } catch (ProjectNotFoundException projEx) { _logger.LogWarning(projEx, "Project not found"); return(BadRequest(projEx.Message)); } }
public async void CreateProject_ReturnsBadRequest() { var controller = new ProjectMemberController(_projectMemberService.Object, _mapper, _logger.Object); var dto = new NewProjectMemberDto { ProjectMemberRoleId = 1 }; var result = await controller.CreateProjectMember(1, dto); var badRequestResult = Assert.IsType <BadRequestObjectResult>(result); Assert.Equal("Project Id doesn't match.", badRequestResult.Value); }
public async void CreateProjectMemberNewUser_ReturnsCreatedProjectMember() { _projectMemberService .Setup(s => s.AddProjectMember(It.IsAny <int>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Dictionary <string, string> >(), It.IsAny <int>(), "http://web", It.IsAny <CancellationToken>())) .ReturnsAsync((1, 1)); _projectMemberService.Setup(s => s.GetProjectMemberById(It.IsAny <int>(), It.IsAny <CancellationToken>())) .ReturnsAsync((int id, CancellationToken cancellationToken) => new ProjectMember { Id = id, UserId = 1, ProjectMemberRoleId = 1 }); _configuration.SetupGet(s => s[ConfigurationKey.WebUrl]).Returns("http://web"); var httpContext = new DefaultHttpContext() { Request = { Scheme = "https", Host = new HostString("localhost") } }; var controller = new ProjectMemberController(_projectMemberService.Object, _mapper, _configuration.Object, _logger.Object) { ControllerContext = new ControllerContext { HttpContext = httpContext } }; var dto = new NewProjectMemberDto { ProjectId = 1, ProjectMemberRoleId = 1 }; var result = await controller.CreateProjectMember(1, dto); var createAtRouteActionResult = Assert.IsType <CreatedAtRouteResult>(result); var returnValue = Assert.IsType <ProjectMemberDto>(createAtRouteActionResult.Value); Assert.Equal(1, returnValue.Id); }
public override string Execute() { Console.WriteLine($"Trying to add {User} as member of project {Project}..."); string message; var project = _projectService.GetProjectByName(Project).Result; var user = _accountService.GetUserByUserName(User).Result; var roleId = MemberRole.GetMemberRoleId(Role); if (project != null) { var newMember = new NewProjectMemberDto { UserId = user != null?int.Parse(user.Id) : 0, Email = User, ProjectId = project.Id, ProjectMemberRoleId = roleId }; if (user == null) { var externalAccountTypes = _accountService.GetExternalAccountTypes().Result; Console.WriteLine("You are creating a new user. Please fill in the user info."); newMember.FirstName = Console.GetString("First Name (Optional):"); newMember.LastName = Console.GetString("Last Name (Optional):"); var externalAccountIds = new Dictionary <string, string>(); foreach (var externalAccountType in externalAccountTypes) { var input = Console.GetString($"{externalAccountType.Label} (Optional):"); if (!string.IsNullOrEmpty(input)) { externalAccountIds.Add(externalAccountType.Key, input); } } if (externalAccountIds.Count > 0) { newMember.ExternalAccountIds = externalAccountIds; } } var projectMember = _projectMemberService.CreateProjectMember(project.Id, newMember).Result; var addedMember = new MemberViewModel { UserId = projectMember.UserId, Username = projectMember.Username, Role = projectMember.ProjectMemberRoleName }; message = addedMember.ToCliString($"User has been added to project {Project}:"); Logger.LogInformation(message); } else { message = $"Project {Project} was not found"; } return(message); }
public async Task <ProjectMemberDto> CreateProjectMember(int projectId, NewProjectMemberDto dto) { var path = $"project/{projectId}/member"; return(await Api.Post <NewProjectMemberDto, ProjectMemberDto>(path, dto)); }