Beispiel #1
0
        public async Task Create_log_error_with_invalid_view_model_bad_request()
        {
            //Arrange
            var logError = new CreateLogErrorViewModel();
            var expected = new Response <CreateLogErrorViewModel>(
                data: logError,
                success: false,
                errors: new[] {
                "UserId must be greater than 0",
                "Title cannot be null",
                "Title cannot be empty",
                "Source cannot be null",
                "Source cannot be empty",
                "Level cannot be empty",
                "Level Informed value cannot be assigned",
                "Environment cannot be empty",
                "Environment Informed value cannot be assigned"
            });

            _logErrorServiceMock.Setup(x => x.CreateAsync(logError, default))
            .Returns(Task.FromResult(expected));

            //Act
            var logErrorController = new LogErrorsController(_logErrorServiceMock.Object, _loggerMock.Object);
            var actionResult       = await logErrorController.PostAsync(logError);

            //Assert
            var badRequestResult = Assert.IsType <BadRequestObjectResult>(actionResult.Result);

            badRequestResult.StatusCode.Should().Be((int)HttpStatusCode.BadRequest);
            var result = Assert.IsType <Response <CreateLogErrorViewModel> >(badRequestResult.Value);

            result.Should().BeEquivalentTo(expected);
        }
        public async Task Create_handle_response_success_false_if_model_is_not_valid()
        {
            // Arrange
            var logError = new CreateLogErrorViewModel();

            var expected = new Response <CreateLogErrorViewModel>(
                data: logError,
                success: false,
                errors: new[] {
                "UserId must be greater than 0",
                "Title cannot be null",
                "Title cannot be empty",
                "Source cannot be null",
                "Source cannot be empty",
                "Level cannot be empty",
                "Level Informed value cannot be assigned",
                "Environment cannot be empty",
                "Environment Informed value cannot be assigned"
            });


            //Act
            var service = new LogErrorService(_logErrorRepositoryMock.Object, _userRepositoryMock.Object);
            var result  = await service.CreateAsync(logError);

            // Assert
            result
            .Should().BeEquivalentTo(expected);
        }
        public async Task <Response <CreateLogErrorViewModel> > CreateAsync(CreateLogErrorViewModel model, CancellationToken cancellationToken = default)
        {
            var validationResult = await new CreateLogErrorViewModelValidator().ValidateAsync(model);

            if (!validationResult.IsValid)
            {
                return(new Response <CreateLogErrorViewModel>(
                           data: model,
                           success: false,
                           errors: validationResult.Errors.Select(x => x.ErrorMessage).ToArray()
                           ));
            }

            var user = await _userRepository.GetAsync(model.UserId);

            if (user == null)
            {
                return(new Response <CreateLogErrorViewModel>(
                           data: model,
                           success: false,
                           errors: new [] { $"User with id {model.UserId} not found" }
                           ));
            }

            var logError = new LogError(
                userId: model.UserId,
                title: model.Title,
                details: model.Details,
                source: model.Source,
                level: model.Level,
                environment: model.Environment);

            await _logErrorRepository.AddAsync(logError);

            var result = await _logErrorRepository.UnitOfWork
                         .SaveEntitiesAsync(cancellationToken);

            return(result ? new Response <CreateLogErrorViewModel>(model, result) : new Response <CreateLogErrorViewModel>(model, false, new[] { $"Error persisting database changes" }));
        }
        public async Task <ActionResult <Response <CreateLogErrorViewModel> > > PostAsync([FromBody] CreateLogErrorViewModel logError)
        {
            _logger.LogInformation(
                "----- Sending request: {ServiceName} - {ServiceMethod}: ({@ViewModel})",
                nameof(ILogErrorService),
                "CreateAsync",
                logError);

            //var idClaim = HttpContext.User.Claims.Where(c => c.Type == "id").FirstOrDefault();
            //int.TryParse(idClaim.Value, out int userId);
            //logError.UserId = userId;
            var result = await _logErrorService.CreateAsync(logError);

            if (!result.Success)
            {
                return(BadRequest(result));
            }

            return(Created(nameof(PostAsync), result));
        }