public async Task GetTimestampAsync_ResultsFound_ReturnsListOfModels() { // Arrange var apiQueryModel = new ApiQueryModel(); var returnModel = new Tuple <bool, List <DbViewTimestampReturnModel> >(true, new List <DbViewTimestampReturnModel> { new DbViewTimestampReturnModel() }); _dbViewAccess .Setup(x => x.GetTimestampAsync(It.IsAny <ApiQueryModel>())) .ReturnsAsync(() => returnModel); // Act Db2DbViewController controller = new Db2DbViewController(_dbViewAccess.Object); var result = await controller.GetTimestampAsync(apiQueryModel); // Assert var resultValue = result.Value as ApiOkResponse; var resultValueResult = resultValue.Result.As <Tuple <bool, List <DbViewTimestampReturnModel> > >(); resultValueResult.Item2.Count.Should().Equals(1); resultValueResult.Item2.First().Should().BeOfType <DbViewTimestampReturnModel>(); }
public async Task NewStories_NullNewStoriesEds_ReturnsBadRequest() { var mockStoryProvider = new Mock <IStoryProvider>(); mockStoryProvider.Setup(x => x.GetNewStoryIds()) .Returns(Task.FromResult <IEnumerable <int> >(null)); _storyController = new StoryController(mockStoryProvider.Object); var query = new ApiQueryModel { Page = 1, PageSize = 2 }; var result = await _storyController.NewStories(query); Assert.That(result, Is.TypeOf <BadRequestObjectResult>()); }
public async Task NewStories_NotNullNewStories_ReturnsOk() { var mockStoryProvider = new Mock <IStoryProvider>(); IEnumerable <int> pageList = new List <int> { 1, 2 }; var story_1 = new Item { Id = 1, Title = "Test", Type = ItemType.Story, Url = "https://www.google.com" }; var story_2 = new Item { Id = 2, Title = "Test 2", Type = ItemType.Story, Url = "https://stackoverflow.com" }; var stories = new SortedList <int, Item>(); stories.Add(story_1.Id, story_1); stories.Add(story_2.Id, story_2); mockStoryProvider.Setup(x => x.GetNewStoryIds()) .Returns(Task.FromResult(pageList)); mockStoryProvider.Setup(x => x.GetNewStories(pageList)) .Returns(Task.FromResult(stories)); _storyController = new StoryController(mockStoryProvider.Object); var query = new ApiQueryModel { Page = 1, PageSize = 2 }; var result = await _storyController.NewStories(query); Assert.That(result, Is.TypeOf <OkObjectResult>()); }
public async Task GetTableAsync_AccessMethodThrowsError_LogEventOccursAndErrorStatusCodeReturnedNoExceptionThrown() { // Arrange var exceptionToThrow = new Exception("exception"); var apiQueryModel = new ApiQueryModel(); _dbViewAccess.Setup(x => x.GetTableAsync(apiQueryModel)) .ThrowsAsync(exceptionToThrow); Db2DbViewController controller = new Db2DbViewController(_dbViewAccess.Object); // Set up our Error Handling middleware as a wrapper (the same way it will wrap all incoming Requests) var middleware = new ErrorWrappingMiddleware(async(innerHttpContext) => { var result = await controller.GetTableAsync(apiQueryModel); }, _logger.Object); var context = new DefaultHttpContext(); context.Response.Body = new MemoryStream(); //Act await middleware.Invoke(context); context.Response.Body.Seek(0, SeekOrigin.Begin); var reader = new StreamReader(context.Response.Body); var streamText = reader.ReadToEnd(); var objResponse = JsonConvert.DeserializeObject <ApiResponse>(streamText); //Assert _logger.Verify(x => x.LogError(exceptionToThrow, It.IsAny <string>()), Times.Once); objResponse .Should() .BeEquivalentTo(new ApiResponse(HttpStatusCode.InternalServerError, "exception")); context.Response.StatusCode .Should() .Be((int)HttpStatusCode.InternalServerError); }
public async Task NewStories_PageOutOfBounds_ReturnsBadRequest() { var mockStoryProvider = new Mock <IStoryProvider>(); IEnumerable <int> pageList = new List <int> { 1, 2 }; mockStoryProvider.Setup(x => x.GetNewStoryIds()) .Returns(Task.FromResult(pageList)); _storyController = new StoryController(mockStoryProvider.Object); var query = new ApiQueryModel { Page = 3, PageSize = 2 }; var result = await _storyController.NewStories(query); Assert.That(result, Is.TypeOf <BadRequestObjectResult>()); }
public async Task GetTableAsync_ResultsFound_ReturnsDynamicListOfResults() { // Arrange var apiQueryModel = new ApiQueryModel(); var returnModel = new Tuple <bool, List <dynamic> >(false, new List <dynamic>()); _dbViewAccess .Setup(x => x.GetTableAsync(It.IsAny <ApiQueryModel>())) .ReturnsAsync(() => returnModel); // Act Db2DbViewController controller = new Db2DbViewController(_dbViewAccess.Object); var result = await controller.GetTableAsync(apiQueryModel); // Assert var resultValue = result.Value as ApiOkResponse; var resultValueResult = resultValue.Result.As <Tuple <bool, List <dynamic> > >(); resultValueResult.Item1.Should().Equals(false); resultValueResult.Item2.Should().BeOfType <List <dynamic> >(); }
public async Task <IActionResult> NewStories([FromQuery] ApiQueryModel query) { var newStoryIds = await _storyProvider.GetNewStoryIds(); if (newStoryIds == null) { return(BadRequest("Error loading new story list")); } var pageOffset = (query.Page - 1) * query.PageSize; if (pageOffset >= newStoryIds.Count()) { return(BadRequest("Invalid requested range")); } var pageList = newStoryIds.Skip(pageOffset).Take(query.PageSize); var stories = await _storyProvider.GetNewStories(pageList); if (stories == null) { return(BadRequest("Error pulling new stories")); } var paginatedResult = pageList.Select(id => stories.GetValueOrDefault(id)); var currentPage = query.Page; var lastPage = (int)Math.Ceiling((double)newStoryIds.Count() / query.PageSize); var result = new ApiPagedList <Item>( paginatedResult, currentPage, lastPage ); return(Ok(result)); }