public async void GetById_InvalidRepoResult_CallsRepositoryErrorHandler() { //Arrange var trustId = Guid.Parse("a16e9020-9123-4420-8055-851d1b672fa9"); //Set up trusts repo to return a failure var trustsRepoMock = new Mock <ITrustsRepository>(); trustsRepoMock.Setup(m => m.GetTrustById(trustId)) .ReturnsAsync(new RepositoryResult <GetTrustsD365Model> { Error = new RepositoryResultBase.RepositoryError { StatusCode = HttpStatusCode.BadRequest, ErrorMessage = "Bad Request" } }); var mapperMock = new Mock <IMapper <GetTrustsD365Model, GetTrustsModel> >(); //Set up error handler to return a random result var errorHandlerMock = new Mock <IRepositoryErrorResultHandler>(); errorHandlerMock.Setup(r => r.LogAndCreateResponse(It.IsAny <RepositoryResultBase>())) .Returns(new ObjectResult("Some error message") { StatusCode = 499 }); var trustsController = new TrustsController(trustsRepoMock.Object, _academiesRepository.Object, mapperMock.Object, _getAcademiesMapper.Object, errorHandlerMock.Object); //Execute var result = await trustsController.GetById(trustId); var castedResult = (ObjectResult)result.Result; //Assert //Error handler should be called with result from repository errorHandlerMock.Verify(h => h.LogAndCreateResponse( It.Is <RepositoryResultBase>(r => r.Error.ErrorMessage == "Bad Request" && r.Error.StatusCode == HttpStatusCode.BadRequest)), Times.Once); //Mapper not to be called when repo fails mapperMock.Verify(m => m.Map(It.IsAny <GetTrustsD365Model>()), Times.Never); //Final result should be what the error handler returns Assert.Equal("Some error message", castedResult.Value); Assert.Equal(499, castedResult.StatusCode); }
public async void GetById_TrustFound_Returns200OkResult() { //Arrange var trustId = Guid.Parse("a16e9020-9123-4420-8055-851d1b672fa9"); //Set up mock repository to return a valid and set result var trustsRepoMock = new Mock <ITrustsRepository>(); trustsRepoMock.Setup(m => m.GetTrustById(trustId)) .ReturnsAsync(new RepositoryResult <GetTrustsD365Model> { Result = new GetTrustsD365Model { Id = trustId } }); var mapperMock = new Mock <IMapper <GetTrustsD365Model, GetTrustsModel> >(); //Set up mapper to return a slim result when called with the expected input mapperMock.Setup(m => m.Map(It.Is <GetTrustsD365Model>(p => p.Id == trustId))) .Returns(new GetTrustsModel { Id = trustId, Address = "Some address" }); var errorHandlerMock = new Mock <IRepositoryErrorResultHandler>(); var trustsController = new TrustsController(trustsRepoMock.Object, _academiesRepository.Object, mapperMock.Object, _getAcademiesMapper.Object, errorHandlerMock.Object); //Execute var result = await trustsController.GetById(trustId); var castedResult = (ObjectResult)result.Result; //Assert //Error handler should not be called when repo returns valid result errorHandlerMock.Verify(h => h.LogAndCreateResponse(It.IsAny <RepositoryResultBase>()), Times.Never); //Mapper to be called once with the expected input mapperMock.Verify(m => m.Map(It.Is <GetTrustsD365Model>(p => p.Id == trustId)), Times.Once); //Final result should be a 200 OK with the result of the mapping operation Assert.Equal(trustId, ((GetTrustsModel)castedResult.Value).Id); Assert.Equal("Some address", ((GetTrustsModel)castedResult.Value).Address); Assert.Equal(200, castedResult.StatusCode); }
public async void GetById_NotFound_ReturnsNotFoundResult() { //Arrange var trustId = Guid.Parse("a16e9020-9123-4420-8055-851d1b672fa9"); //Set up mock repository to return a null result (not found) var trustsRepoMock = new Mock <ITrustsRepository>(); trustsRepoMock.Setup(m => m.GetTrustById(trustId)) .ReturnsAsync(new RepositoryResult <GetTrustsD365Model> { Result = null }); var mapperMock = new Mock <IMapper <GetTrustsD365Model, GetTrustsModel> >(); var errorHandlerMock = new Mock <IRepositoryErrorResultHandler>(); var trustsController = new TrustsController(trustsRepoMock.Object, _academiesRepository.Object, mapperMock.Object, _getAcademiesMapper.Object, errorHandlerMock.Object); //Execute var result = await trustsController.GetById(trustId); var castedResult = (ObjectResult)result.Result; //Assert //Error handler should not be called when repo returns valid result errorHandlerMock.Verify(h => h.LogAndCreateResponse(It.IsAny <RepositoryResultBase>()), Times.Never); //Mapper not to be called when repo returns null but valid result mapperMock.Verify(m => m.Map(It.IsAny <GetTrustsD365Model>()), Times.Never); //Final result should be a 404 - Not Found with the correct message Assert.Equal("The trust with the id: 'a16e9020-9123-4420-8055-851d1b672fa9' was not found", castedResult.Value); Assert.Equal(404, castedResult.StatusCode); }