示例#1
0
            public async Task CreateIssueAsync_Where_SaveChangesAsync_Fails_Should__return_a_IssueNotCreatedException_Test()
            {
                // Arrange

                const int id          = 4;
                var       expectedLog = $"Creating new Issue: {id} Failed!";
                var       newIssueDto = new IssueForCreationDto
                {
                    Id = 4, IssueDescription = "Test 4", DateAdded = DateTimeOffset.Now
                };

                RepositoryWrapperMock
                .Setup(x => x.Issue.GetIssueByIdAsync(id))
                .ReturnsAsync(default(Issue)).Verifiable();

                RepositoryWrapperMock
                .Setup(x => x.SaveAsync())
                .Throws(new Exception("Save Changes Failed")).Verifiable();

                // Act

                await Assert.ThrowsAsync <IssueNotCreatedException>(() => ServiceUnderTest.CreateIssueAsync(newIssueDto));

                // Assert

                LoggerMock.VerifyLog(LogLevel.Error, expectedLog);
                RepositoryWrapperMock.Verify(x => x.SaveAsync(), Times.Once);
            }
示例#2
0
            public async Task CreateIssueAsync_Should_create_and_return_the_specified_Issue_Test()
            {
                // Arrange

                const int id          = 5;
                var       newIssueDto = new IssueForCreationDto
                {
                    Id = 5, IssueDescription = "Test 5", DateAdded = DateTimeOffset.Now
                };

                RepositoryWrapperMock
                .Setup(x => x.Issue.GetIssueByIdAsync(It.IsAny <int>()))
                .ReturnsAsync(default(Issue)).Verifiable();

                RepositoryWrapperMock
                .Setup(x => x.SaveAsync())
                .Returns(() => Task.Run(() => { return(1); })).Verifiable();

                // Act

                var result = await ServiceUnderTest.CreateIssueAsync(newIssueDto);

                // Assert

                result.Should().NotBeNull();
                result.Should().BeOfType <IssueDto>();
                result.Id.Should().Be(id);
                result.IssueDescription.Should().Be(newIssueDto.IssueDescription);
                RepositoryWrapperMock.Verify(x => x.SaveAsync(), Times.Once);
            }
        public async Task <IActionResult> CreateIssueAsync([FromBody] IssueForCreationDto issue)
        {
            try
            {
                if (issue == null)
                {
                    _logger.LogError("Issue object sent from client is null");
                    return(BadRequest("Issue object sent from client is null."));
                }

                if (await _issueService.IssueExistsAsync(issue.Id))
                {
                    _logger.LogError("Issue object sent from client already exists");
                    return(BadRequest("Issue object sent from client already exists."));
                }

                if (!ModelState.IsValid)
                {
                    _logger.LogError("Invalid issue object sent from client");
                    return(BadRequest(ModelState));
                }

                var createdIssue = await _issueService.CreateIssueAsync(issue);

                return(CreatedAtRoute(nameof(IssueByIdAsync), new { id = createdIssue.Id }, createdIssue));
            }
            catch (Exception ex)
            {
                _logger.LogError("Something went wrong inside CreateIssueAsync action: {Message}", ex.Message);
                return(StatusCode(500, "Internal server error"));
            }
        }
            public async Task CreateIssueAsync_With_An_Exception_Should_Return_StatusCode_500_Test()
            {
                // Arrange

                var issueToCreate = new IssueForCreationDto {
                    IssueDescription = "Test  1"
                };
                const string expectedLog   = "Something went wrong inside CreateIssueAsync action: Some Error";
                const string expectedValue = "Internal server error";

                IssueServiceMock
                .Setup(x => x.CreateIssueAsync(It.IsAny <IssueForCreationDto>()))
                .ThrowsAsync(new Exception("Some Error"));

                // Act

                var result = await ControllerUnderTest.CreateIssueAsync(issueToCreate);

                // Assert

                result.Should().BeOfType <ObjectResult>();
                LoggerMock.Invocations.Count.Should().Be(1);
                LoggerMock.Invocations[0].Arguments[2].ToString().Should().Contain(expectedLog);

                var content = (ObjectResult)result;

                content.StatusCode.Should().Be(500);
                content.Value.Should().Be(expectedValue);
            }
            public async Task CreateIssueAsync_Should_Return_CreatedAtActionResult_With_The_created_Issue_Test()
            {
                // Arrange

                var expectedCreatedAtActionName = nameof(IssueController.IssueByIdAsync);
                var issueToCreate = new IssueForCreationDto {
                    IssueDescription = "Test  1"
                };
                var expectedResult = new IssueDto {
                    Id = 1, IssueDescription = "Test  1"
                };

                IssueServiceMock
                .Setup(x => x.CreateIssueAsync(issueToCreate))
                .ReturnsAsync(expectedResult);

                // Act

                var result = await ControllerUnderTest.CreateIssueAsync(issueToCreate);

                // Assert

                var createdResult = Assert.IsType <CreatedAtRouteResult>(result);

                Assert.Same(expectedResult, createdResult.Value);
                Assert.Equal(expectedCreatedAtActionName, createdResult.RouteName);
                Assert.Equal(expectedResult.Id, createdResult.RouteValues.GetValueOrDefault("id")
                             );
            }
示例#6
0
        public async Task CreateIssueAsync(IssueForCreationDto issue)
        {
            using var response = await _apiHelper.ApiClient.PostAsJsonAsync("/api/CreateIssueAsync", issue);

            if (response.IsSuccessStatusCode)
            {
                // Log successful call?
            }
            else
            {
                throw new Exception(response.ReasonPhrase);
            }
        }
示例#7
0
        public async Task <IActionResult> CreateIssueForProject(Guid projectId, IssueForCreationDto issueForCreation)
        {
            if (issueForCreation.DueDate != null && issueForCreation.DueDate < DateTime.Today)
            {
                return(BadRequest("Due Date cannot be before today"));
            }

            var projectFromRepo = await _repository.Project.GetProject(projectId);

            if (projectFromRepo == null)
            {
                return(BadRequest("Project doesn't exist"));
            }

            Severity       severity;
            Classification classify;
            Stage          status;

            Enum.TryParse(issueForCreation.Severity, out severity);
            Enum.TryParse(issueForCreation.Classification, out classify);
            Enum.TryParse(issueForCreation.Status, out status);

            var issueToCreate = _mapper.Map <Issue>(issueForCreation);
            var reporterId    = Guid.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier));

            issueToCreate.Severity       = severity;
            issueToCreate.Classification = classify;
            issueToCreate.Status         = status;
            issueToCreate.ProjectId      = projectId;
            issueToCreate.ReporterId     = reporterId;
            issueToCreate.Created        = DateTime.Now;

            _repository.Issue.CreateIssue(issueToCreate);
            var saveIssue = await _repository.SaveAsync();

            if (!saveIssue)
            {
                throw new Exception("Failed to create issue for project");
            }

            var issueToReturn = _mapper.Map <IssueForDetailedDto>(issueToCreate);

            return(CreatedAtRoute("GetIssue",
                                  new { projectId = issueToCreate.ProjectId, issueId = issueToCreate.IssueId }, issueToReturn));
        }
        public async Task <IssueDto> CreateIssueAsync(IssueForCreationDto issue)
        {
            var issueEntity = _mapper.Map <Issue>(issue);

            _repositoryWrapper.Issue.CreateIssue(issueEntity);

            try
            {
                await _repositoryWrapper.SaveAsync();

                return(_mapper.Map <Issue, IssueDto>(issueEntity));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Creating new Issue: {Id} Failed!", issue.Id);
                throw new IssueNotCreatedException(_mapper.Map <Issue>(issue));
            }
        }
            public async Task CreateIssueAsync_With_Invalid_Id_Should_Return_BadRequestResult_Test()
            {
                // Arrange

                var expectedIssue = new IssueForCreationDto()
                {
                    Id = 1, IssueDescription = "Test 1", DateAdded = DateTimeOffset.Now
                };

                ControllerUnderTest.ModelState.AddModelError("Id", "Some Error");

                // Act

                var result = await ControllerUnderTest.CreateIssueAsync(expectedIssue);

                // Assert

                var badRequestResult = Assert.IsType <BadRequestObjectResult>(result);

                Assert.IsType <SerializableError>(badRequestResult.Value);
            }