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);
        }
Example #2
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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));
        }