public async void SearchTrusts_InvalidRepoResult() { var searchTerm = "Some search term"; //Set up mock repository to return a failed D365 call var trustsRepoMock = new Mock <ITrustsRepository>(); trustsRepoMock.Setup(m => m.SearchTrusts(searchTerm)) .ReturnsAsync(new RepositoryResult <List <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.SearchTrusts(searchTerm); var castedResult = (ObjectResult)result.Result; //Assert //Error handler should be called with repository result 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 SearchTrusts_EmptyButValidSearchResult() { var searchTerm = "Some search term"; //Set up mock repository to return a failed D365 call var trustsRepoMock = new Mock <ITrustsRepository>(); trustsRepoMock.Setup(m => m.SearchTrusts(searchTerm)) .ReturnsAsync(new RepositoryResult <List <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.SearchTrusts(searchTerm); 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 becasue there are no results mapperMock.Verify(m => m.Map(It.IsAny <GetTrustsD365Model>()), Times.Never); //Final result should be a 200 OK wrapped around a null list Assert.Null((List <GetTrustsModel>)castedResult.Value); Assert.Equal(200, castedResult.StatusCode); }
public async void SearchTrusts_ThreeResults() { var searchTerm = "Some search term"; //Set up mock repository to return a failed D365 call var trustsRepoMock = new Mock <ITrustsRepository>(); trustsRepoMock.Setup(m => m.SearchTrusts(searchTerm)) .ReturnsAsync(new RepositoryResult <List <GetTrustsD365Model> > { Result = new List <GetTrustsD365Model> { new GetTrustsD365Model { TrustName = "Trust 001" }, new GetTrustsD365Model { TrustName = "Trust 002" }, new GetTrustsD365Model { TrustName = "Trust 003" } } }); //Set up mock mapper to return slim models var mapperMock = new Mock <IMapper <GetTrustsD365Model, GetTrustsModel> >(); mapperMock.Setup(m => m.Map(It.Is <GetTrustsD365Model>(t => t.TrustName == "Trust 001"))) .Returns(new GetTrustsModel { TrustName = "Mapped Trust 001" }); mapperMock.Setup(m => m.Map(It.Is <GetTrustsD365Model>(t => t.TrustName == "Trust 002"))) .Returns(new GetTrustsModel { TrustName = "Mapped Trust 002" }); mapperMock.Setup(m => m.Map(It.Is <GetTrustsD365Model>(t => t.TrustName == "Trust 003"))) .Returns(new GetTrustsModel { TrustName = "Mapped Trust 003" }); var errorHandlerMock = new Mock <IRepositoryErrorResultHandler>(); var trustsController = new TrustsController(trustsRepoMock.Object, _academiesRepository.Object, mapperMock.Object, _getAcademiesMapper.Object, errorHandlerMock.Object); //Execute var result = await trustsController.SearchTrusts(searchTerm); 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 three times, once for each result mapperMock.Verify(m => m.Map(It.IsAny <GetTrustsD365Model>()), Times.Exactly(3)); //Final result should be a 200OK wrapped around a a list with three results Assert.Equal(3, ((List <GetTrustsModel>)castedResult.Value).Count); Assert.Equal("Mapped Trust 001", ((List <GetTrustsModel>)castedResult.Value)[0].TrustName); Assert.Equal("Mapped Trust 002", ((List <GetTrustsModel>)castedResult.Value)[1].TrustName); Assert.Equal("Mapped Trust 003", ((List <GetTrustsModel>)castedResult.Value)[2].TrustName); Assert.Equal(200, castedResult.StatusCode); }