public void IsVolumeAvailableForContractProductSite()
        {
            var sites        = ContractProductSiteReaderStub.Sites();
            var volumes      = ContractProductSiteVolumeReaderStub.AllVolumes();
            var actualResult =
                SiteVolumeCalculator.IsVolumeAvailableForContractProductSite(sites,
                                                                             volumes);


            Assert.AreEqual(true, actualResult);
        }
        public void SiteVolumesForTheContract()
        {
            var contract = ContractReaderStub.Contract();
            var volumes  = ContractProductSiteVolumeReaderStub.AllVolumes();

            var actualResult =
                SiteVolumeCalculator.SiteVolumesForContract(contract,
                                                            volumes);

            Assert.AreEqual(200, actualResult.ElementAt(0).Volume);
            Assert.AreEqual(100, actualResult.ElementAt(1).Volume);
        }
        public void SiteVolumes()
        {
            var sites   = ContractProductSiteReaderStub.Sites();
            var volumes = ContractProductSiteVolumeReaderStub.AllVolumes();

            var contractProductSiteVolumes =
                SiteVolumeCalculator.SiteVolumes(sites, volumes);

            Assert.AreEqual(200,
                            contractProductSiteVolumes.ElementAt(0).Volume);
            Assert.AreEqual(100,
                            contractProductSiteVolumes.ElementAt(1).Volume);
        }
        public void CurrentContractVolumes()
        {
            var contract = ContractReaderStub.Contract();
            var volumes  = ContractProductSiteVolumeReaderStub.AllVolumes();

            var actualResult =
                SiteVolumeCalculator.CurrentContractVolumes(contract,
                                                            volumes);

            Assert.AreEqual(200, actualResult.ElementAt(0).Volume);
            Assert.AreEqual(20, actualResult.ElementAt(0).SiteId);
            Assert.AreEqual(new DateTime(2016, 1, 1), actualResult.ElementAt(0).BillingMonth);
            Assert.AreEqual(100, actualResult.ElementAt(1).Volume);
            Assert.AreEqual(20, actualResult.ElementAt(1).SiteId);
            Assert.AreEqual(new DateTime(2016, 2, 1), actualResult.ElementAt(1).BillingMonth);
        }
        public void TotalSiteVolume()
        {
            var contract = ContractReaderStub.Contract();
            var volumes  = ContractProductSiteVolumeReaderStub.AllVolumes();

            var allSiteVolumesForTheContract =
                SiteVolumeCalculator.SiteVolumesForContract(contract,
                                                            volumes);
            var groupedSiteVolumes =
                SiteVolumeCalculator.GroupedSiteVolumes(allSiteVolumesForTheContract);


            var totalContractedSiteVolume =
                SiteVolumeCalculator.TotalSiteVolume(groupedSiteVolumes);

            Assert.AreEqual(300, totalContractedSiteVolume);
        }
        public void IsAllVolumesExistForTheContract()
        {
            var contract = ContractReaderStub.Contract();
            var volumes  = ContractProductSiteVolumeReaderStub.AllVolumes();


            var expectedBillingMonths =
                SiteVolumeCalculator.ExpectedBillingMonthsForTheContract(contract);
            var actualBillingMonths = SiteVolumeCalculator.BillingMonths(volumes);

            var totalNumberOfMissingBillingMonths =
                SiteVolumeCalculator.MissingBillingMonths(
                    expectedBillingMonths, actualBillingMonths);

            var actualResult =
                SiteVolumeCalculator.IsAllVolumesExistForTheContract(
                    totalNumberOfMissingBillingMonths);

            Assert.AreEqual(true, actualResult);
        }
        public void TotalContractedVolumeForAllVolumeAvailableContract()
        {
            var contract  = ContractReaderStub.Contract();
            var contracts = ContractReaderStub.Contracts();
            var products  = ContractProductReaderStub.Products();
            var sites     = ContractProductSiteReaderStub.Sites();
            var volumes   = ContractProductSiteVolumeReaderStub.AllVolumes();

            var forecaster =
                new SiteVolumeCalculator();

            var actualResult =
                forecaster.TotalContractedVolume(
                    contract, contracts,
                    products,
                    sites,
                    volumes
                    );

            Assert.AreEqual(300, actualResult);
        }
        public void GroupedSiteVolumes()
        {
            var contract = ContractReaderStub.Contract();
            var volumes  = ContractProductSiteVolumeReaderStub.AllVolumes();

            var allSiteVolumesForTheContract =
                SiteVolumeCalculator.SiteVolumesForContract(contract,
                                                            volumes);

            var groupedSiteVolumes =
                SiteVolumeCalculator.GroupedSiteVolumes(allSiteVolumesForTheContract);

            Assert.AreEqual(200, groupedSiteVolumes.ElementAt(0).Volume);
            Assert.AreEqual(new DateTime(2016, 1, 1),
                            groupedSiteVolumes.ElementAt(0).BillingMonth);
            Assert.AreEqual(20, groupedSiteVolumes.ElementAt(0).SiteId);
            Assert.AreEqual(100, groupedSiteVolumes.ElementAt(1).Volume);
            Assert.AreEqual(new DateTime(2016, 2, 1),
                            groupedSiteVolumes.ElementAt(1).BillingMonth);
            Assert.AreEqual(20, groupedSiteVolumes.ElementAt(1).SiteId);
        }