public async void GetTrustAcademies_TrustRepoFailure() { //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.GetTrustAcademies(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 GetTrustAcademies_TrustFound_NoAcademiesFound() { //Arrange var trustId = Guid.Parse("a16e9020-9123-4420-8055-851d1b672fa9"); //Set up mock trust 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 } }); //Set up mock academies repo to return a failed result var academiesRepoMock = new Mock <IAcademiesRepository>(); academiesRepoMock.Setup(m => m.GetAcademiesByTrustId(trustId)) .ReturnsAsync(new RepositoryResult <List <GetAcademiesD365Model> > { Result = null }); var getAcademiesMapper = new Mock <IMapper <GetAcademiesD365Model, GetAcademiesModel> >(); var errorHandlerMock = new Mock <IRepositoryErrorResultHandler>(); var trustsController = new TrustsController(trustsRepoMock.Object, academiesRepoMock.Object, _getTrustMapper.Object, getAcademiesMapper.Object, errorHandlerMock.Object); //Execute var result = await trustsController.GetTrustAcademies(trustId); var castedResult = (ObjectResult)result.Result; //Assert //Error handler should be called when a repository fails errorHandlerMock.Verify(h => h.LogAndCreateResponse(It.IsAny <RepositoryResultBase>()), Times.Never); //GetAcademiesMapper should not be called when no academies are found getAcademiesMapper.Verify(m => m.Map(It.IsAny <GetAcademiesD365Model>()), Times.Never); //Final result should be a 200 wrapped around a null list Assert.Null((List <GetAcademiesModel>)castedResult.Value); Assert.Equal(200, castedResult.StatusCode); }
public async void GetTrustAcademies_TrustNotFound() { //Arrange var trustId = Guid.Parse("a16e9020-9123-4420-8055-851d1b672fa9"); //Set up mock trust 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.GetTrustAcademies(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); }
public async void GetTrustAcademies_TrustFound_FailedAcademyRepo() { //Arrange var trustId = Guid.Parse("a16e9020-9123-4420-8055-851d1b672fa9"); //Set up mock trust 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 } }); //Set up mock academies repo to return a failed result var academiesRepoMock = new Mock <IAcademiesRepository>(); academiesRepoMock.Setup(m => m.GetAcademiesByTrustId(trustId)) .ReturnsAsync(new RepositoryResult <List <GetAcademiesD365Model> > { Error = new RepositoryResultBase.RepositoryError { StatusCode = HttpStatusCode.BadRequest, ErrorMessage = "Bad Request" } }); 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" }); //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, academiesRepoMock.Object, mapperMock.Object, _getAcademiesMapper.Object, errorHandlerMock.Object); //Execute var result = await trustsController.GetTrustAcademies(trustId); var castedResult = (ObjectResult)result.Result; //Assert //Error handler should be called when a repository fails errorHandlerMock.Verify(h => h.LogAndCreateResponse(It.IsAny <RepositoryResultBase>()), Times.Once); //Final result should be what the error handler returns Assert.Equal("Some error message", castedResult.Value); Assert.Equal(499, castedResult.StatusCode); }