示例#1
0
        public async Task <ApiResponse <UserActivityDto> > GetAllActivitiesForUser(ActivitiesRequest request)
        {
            try
            {
                var userFoundResponse = await _userService.GetUsersById(request.UserId);

                if (!userFoundResponse.IsSuccess)
                {
                    return(userFoundResponse.ToFailed <UserActivityDto>());
                }

                var workLogActivities = (await _worklogRepository.GetActivitiesWithDetailsByUserId(request.UserId, request.ProjectId));
                var userActivity      = new UserActivityDto()
                {
                    UserId                = request.UserId,
                    UserName              = userFoundResponse.Data.FirstName,
                    UserSurname           = userFoundResponse.Data.LastName,
                    UserEmail             = userFoundResponse.Data.Email,
                    ProjectName           = workLogActivities?.Select(e => e.Issue?.Project?.Name).FirstOrDefault(),
                    TotalWorkLogInSeconds = workLogActivities?.Sum(e => e.TimeSpent),
                    WorkLogItems          = workLogActivities?.Select(e => _worklogDetailsMapper.MapToModel(e)).ToList(),
                };
                return(new ApiResponse <UserActivityDto>(userActivity));
            }
            catch (Exception e)
            {
                _logger.LogWarning(e, "An error occured while fetching workLog activities for user {0} ", request.UserId);
                return(ApiResponse <UserActivityDto> .InternalError());
            }
        }
        public async Task GetActivitiesForUser_WhenModelValid_ReturnsUserActivities()
        {
            var user    = UsersDbSet.Get().First();
            var request = new ActivitiesRequest()
            {
                ProjectId = ProjectsDbSet.Get().First().Id,
                UserId    = user.Id
            };
            var workLogItems = WorklogsDbSet.Get().Where(e => e.UserId.Equals(request.UserId))
                               .Include(e => e.Issue)
                               .ThenInclude(e => e.Project)
                               .Where(e => e.Issue.ProjectId.Equals(request.ProjectId));
            var httpResponse = await GetAsync(WorkLogControllerRoutes.GetUserWorkLogs + "?" + request.ToQueryString());

            httpResponse.EnsureSuccessStatusCode();
            var response = await httpResponse.BodyAs <ApiResponse <UserActivityDto> >();

            response.VerifySuccessResponse();
            response.Data.UserId.Should().Be(request.UserId);
            response.Data.UserName.Should().Be(user.FirstName);
            response.Data.UserSurname.Should().Be(user.LastName);
            response.Data.UserEmail.Should().Be(user.Email);
            response.Data.ProjectName.Should().Be(workLogItems?.Select(e => e.Issue.Project.Name).FirstOrDefault());
            response.Data.TotalWorkLogInSeconds.Should().Be((long?)workLogItems?.Sum(e => e.TimeSpent));
            response.Data.WorkLogItems.Should()
            .BeEquivalentTo(workLogItems?.Select(e => GetWorkLogDetails(e)).ToList());
            await ReSeedDatabase();
        }
        public async Task GetActivitiesForUser_WhenUserNotFound_ReturnsUserNotFoundResponse()
        {
            var request = new ActivitiesRequest()
            {
                ProjectId = ProjectsDbSet.Get().First().Id,
                UserId    = Guid.NewGuid()
            };

            var httpResponse = await GetAsync(WorkLogControllerRoutes.GetUserWorkLogs + "?" + request.ToQueryString());

            httpResponse.EnsureSuccessStatusCode();
            var response = await httpResponse.BodyAs <ApiResponse <UserActivityDto> >();

            response.VerifyNotSuccessResponseWithErrorCodeAndMessage(ErrorCode.UserNotFound);
        }
        public async Task GetActivitiesForUser_WhenModelNotValid_ReturnsValidationErrors()
        {
            //project id not set
            var request = new ActivitiesRequest()
            {
                ProjectId = Guid.Empty,
                UserId    = Guid.NewGuid()
            };
            var httpResponse = await GetAsync(WorkLogControllerRoutes.GetUserWorkLogs + "?" + request.ToQueryString());

            httpResponse.EnsureSuccessStatusCode();
            var response = await httpResponse.BodyAs <ApiResponse <UserActivityDto> >();

            response.CheckValidationException(1);

            //user id not set
            request = new ActivitiesRequest()
            {
                ProjectId = Guid.NewGuid(),
                UserId    = Guid.Empty
            };
            httpResponse = await GetAsync(WorkLogControllerRoutes.GetUserWorkLogs + "?" + request.ToQueryString());

            httpResponse.EnsureSuccessStatusCode();
            response = await httpResponse.BodyAs <ApiResponse <UserActivityDto> >();

            response.CheckValidationException(1);

            //empty request
            request = new ActivitiesRequest()
            {
            };
            httpResponse = await GetAsync(WorkLogControllerRoutes.GetUserWorkLogs + "?" + request.ToQueryString());

            httpResponse.EnsureSuccessStatusCode();
            response = await httpResponse.BodyAs <ApiResponse <UserActivityDto> >();

            response.CheckValidationException(2);
        }
 public async Task <ApiResponse <UserActivityDto> > GetActivitiesForUser([FromQuery] ActivitiesRequest request)
 {
     return(await _workLogService.GetAllActivitiesForUser(request));
 }