public void TestPracticePerformanceIndicatorValues()
        {
            PracticePerformanceIndicatorValues values = new PracticePerformanceIndicatorValues(ReaderFactory.GetGroupDataReader(),
                "C85026", 0);

            var val = values.IndicatorToValue[PracticePerformanceIndicatorValues.Qof];
            Assert.IsTrue(val != null && val.IsValueValid);

            val = values.IndicatorToValue[PracticePerformanceIndicatorValues.PatientsThatWouldRecommendPractice];
            Assert.IsTrue(val != null && val.IsValueValid);

            val = values.IndicatorToValue[PracticePerformanceIndicatorValues.LifeExpectancyMale];
            Assert.IsTrue(val != null && val.IsValueValid);

            val = values.IndicatorToValue[PracticePerformanceIndicatorValues.LifeExpectancyFemale];
            Assert.IsTrue(val != null && val.IsValueValid);
        }
        public void Build()
        {
            var metadataRepo = IndicatorMetadataRepository.Instance;

            const int indicatorId = IndicatorIds.QuinaryPopulations;

            Grouping grouping = groupDataReader.GetGroupingsByGroupIdAndIndicatorId(GroupId, indicatorId);

            area = areasReader.GetAreaFromCode(AreaCode);

            var metadata = metadataRepo.GetIndicatorMetadata(indicatorId);
            period = new DataPointOffsetCalculator(grouping, DataPointOffset, metadata.YearType).TimePeriod;

            // Get data for each sex
            int overallTotal = 0;
            foreach (var sexId in sexIds)
            {
                IEnumerable<double> vals;

                if (area.IsCcg)
                {
                    QuinaryPopulation population = practiceReader.GetCcgQuinaryPopulation(indicatorId, period, AreaCode, sexId);
                    vals = new QuinaryPopulationSorter(population.Values).SortedValues;
                }
                else
                {
                    IList<CoreDataSet> data = groupDataReader.GetCoreDataForAllAges(indicatorId, period, AreaCode, sexId);
                    vals = new QuinaryPopulationSorter(data).SortedValues;
                }

                // Add total
                int total = Convert.ToInt32(Math.Round(vals.Sum(), MidpointRounding.AwayFromZero));
                overallTotal += total;

                Values.Add(sexId, vals);
            }

            // Convert to %
            foreach (var sexId in sexIds)
            {
                Values[sexId] = Values[sexId].Select(x => Math.Round((x / overallTotal) * 100, 2, MidpointRounding.AwayFromZero));
            }

            // List size
            var val = new QofListSizeProvider(groupDataReader, area, GroupId, DataPointOffset, metadata.YearType).Value;
            if (val.HasValue)
            {
                metadata = metadataRepo.GetIndicatorMetadata(QofListSizeProvider.IndicatorId);
                ListSize = new ValueData { Value = val.Value };

                var formatter = NumericFormatterFactory.New(metadata, groupDataReader);
                formatter.Format(ListSize);
            }

            if (area.IsGpPractice && AreOnlyPopulationsRequired == false)
            {
                SetEthnicityText();

                SetDeprivationDecile();

                Shape = practiceReader.GetShape(AreaCode);

                AdHocValues = new PracticePerformanceIndicatorValues(groupDataReader, AreaCode, DataPointOffset).IndicatorToValue;
            }
        }
 public void TestPracticePerformanceIndicatorValuesDataPointYearOvershoot()
 {
     PracticePerformanceIndicatorValues values =
             new PracticePerformanceIndicatorValues(ReaderFactory.GetGroupDataReader(), "C85026", 100);
         Assert.AreEqual(0, values.IndicatorToValue.Count);
 }