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>();
        }
示例#2
0
        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>());
        }
示例#3
0
        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);
        }
示例#5
0
        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));
        }