public async Task Fetch_NthPage_Succeeds() { var fixture = new Fixture(); var type = fixture.Create <string>(); var path = fixture.Create <string>(); var pageSize = fixture.Create <int>(); var page = fixture.Create <int>(); var total = fixture.Create <int>(); var agentCollection = fixture.Create <AgentCollection>(); var agentCollectionResult = Result.Ok(agentCollection); var responseMessage = Result.Ok(new HttpResponseMessage()); var validationResult = Result.Ok(); var query = new ListingFetcherQuery(type, path, pageSize); var queryString = query.ToString(page); _jsonApiGetRequest.Setup(z => z.Execute(HttpClientNames.Funda, _apiKey, queryString)).ReturnsAsync(responseMessage); _httpResponseMessageJsonParser.Setup(z => z.Parse <AgentCollection>(responseMessage)).ReturnsAsync(agentCollectionResult); _agentCollectionResultValidator.Setup(z => z.Validate(agentCollectionResult, total, page)).Returns(validationResult); var result = await _listingFetcher.Fetch(query, page, total); _jsonApiGetRequest.Verify(z => z.Execute(HttpClientNames.Funda, _apiKey, queryString), Times.Once); _httpResponseMessageJsonParser.Verify(z => z.Parse <AgentCollection>(responseMessage), Times.Once); _agentCollectionResultValidator.Verify(z => z.Validate(agentCollectionResult, total, page), Times.Once); result.Should().Be(agentCollectionResult); }
public async Task <Result <AgentCollection> > Fetch(ListingFetcherQuery query, int page, int total) { var fetchingResult = await Fetch(query.ToString(page)); var validationResult = _agentCollectionResultValidator.Validate(fetchingResult, total, page); if (validationResult.IsFailed) { return(validationResult); } return(fetchingResult); }
public void FirstPageQueryToString_ReturnsCorrectQuery() { var fixture = new Fixture(); var type = fixture.Create <string>(); var path = fixture.Create <string>(); var pageSize = fixture.Create <int>(); var query = new ListingFetcherQuery(type, path, pageSize); var expectedResult = $"?type={type}&zo={path}&pagesize={pageSize}"; var result = query.FirstPageQueryToString(); result.Should().BeEquivalentTo(expectedResult); }
public async Task <Result <ListingCountPerAgent> > GetMostActiveAgents(int count, string type, string filterPath) { var query = new ListingFetcherQuery(type, filterPath, ApiConstants.MaxPageSize); var fetchingResult = await _agentFetcher.Fetch(query); if (fetchingResult.IsFailed) { return(fetchingResult.ToResult()); } var initialData = fetchingResult.Value; var pageCount = (int)Math.Ceiling((double)initialData.TotalFound / ApiConstants.MaxPageSize); var results = await _taskBatcher.BatchExecute(pageCount, (page) => _agentFetcher.Fetch(query, page, initialData.TotalFound)); var parsedResults = _agentCollectionResultParser.Parse(results, initialData.FetchedAgents); return(parsedResults.GetMostActive(count)); }
public async Task Fetch_FirstPageFetchingFails_ReturnsFailure() { var fixture = new Fixture(); var type = fixture.Create <string>(); var path = fixture.Create <string>(); var pageSize = fixture.Create <int>(); var agentCollectionResult = Result.Fail <AgentCollection>(""); var responseMessage = Result.Fail <HttpResponseMessage>(""); var query = new ListingFetcherQuery(type, path, pageSize); var queryString = query.FirstPageQueryToString(); _jsonApiGetRequest.Setup(z => z.Execute(HttpClientNames.Funda, _apiKey, queryString)).ReturnsAsync(responseMessage); _httpResponseMessageJsonParser.Setup(z => z.Parse <AgentCollection>(responseMessage)).ReturnsAsync(agentCollectionResult); var result = await _listingFetcher.Fetch(query); _jsonApiGetRequest.Verify(z => z.Execute(HttpClientNames.Funda, _apiKey, queryString), Times.Once); _httpResponseMessageJsonParser.Verify(z => z.Parse <AgentCollection>(responseMessage), Times.Once); result.IsFailed.Should().BeTrue(); }
public async Task <Result <AgentCollection> > Fetch(ListingFetcherQuery query) { return(await Fetch(query.FirstPageQueryToString())); }