public async Task ThenItShouldReturnLocationStatistics() { var ukprn = 12345678; var cancellationToken = new CancellationToken(); var expected = new FeProviderLocationStatistics[0]; _feProviderManagerMock.Setup(manager => manager.RetrieveLocationStatisticsAsync(It.IsAny <int>(), It.IsAny <CancellationToken>())) .ReturnsAsync(expected); var result = await _controller.GetLocationsAsync(ukprn.ToString(), cancellationToken); var okObjectResult = result as OkObjectResult; var actual = okObjectResult?.Value as FeProviderLocationStatistics[]; Assert.IsNotNull(result); Assert.IsNotNull(okObjectResult); Assert.AreSame(expected, actual); }
public async Task <FeProviderLocationStatistics[]> RetrieveLocationStatisticsAsync(int ukprn, CancellationToken cancellationToken) { if (ukprn < 10000000 || ukprn > 99999999) { throw new InvalidRequestException("UKPRN must be an 8 digit number"); } var numberOfActiveLearners = await _learnerRepository.GetCountOfContinuingLearnersByProviderLocationAsync(ukprn, cancellationToken); var numberOfLearnersOnABreak = await _learnerRepository.GetCountOfLearnersOnABreakByProviderLocationAsync(ukprn, cancellationToken); var numberOfAimTypes = await _learningDeliveryRepository.GetCountOfAimTypesDeliveredByProviderLocationAsync(ukprn, cancellationToken); var allProviderLocations = numberOfActiveLearners.Keys .Concat(numberOfLearnersOnABreak.Keys) .Concat(numberOfAimTypes.Keys) .Distinct() .ToArray(); int GetDictionaryValue(Dictionary <string, int> dict, string key) { return(dict.ContainsKey(key) ? dict[key] : 0); }; var statistics = new FeProviderLocationStatistics[allProviderLocations.Length]; for (var i = 0; i < statistics.Length; i++) { var postcode = allProviderLocations[i]; statistics[i] = new FeProviderLocationStatistics { DeliveryLocationPostcode = postcode, NumberOfActiveLearners = GetDictionaryValue(numberOfActiveLearners, postcode), NumberOfLearnersOnABreak = GetDictionaryValue(numberOfLearnersOnABreak, postcode), NumberOfAimTypes = GetDictionaryValue(numberOfAimTypes, postcode), }; } return(statistics); }