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