public void NoProductAvailableForTheContract()
        {
            var contract = ContractReaderStub.Contract();
            var products = ContractProductReaderStub.NoProducts();

            SiteVolumeCalculator.NoProductAvailableForContract(contract, products);
        }
        public void VolumesExcludedCurrentContractBillingMonths()
        {
            var currentContract     = ContractReaderStub.Contract();
            var contracts           = ContractReaderStub.Contracts();
            var previousSiteVolumes =
                ContractProductSiteVolumeReaderStub.PreviousSiteVolumes();
            var currentContractSiteVolumes =
                ContractProductSiteVolumeReaderStub.CurrentSiteVolume();
            var previousContractForTheClient =
                SiteVolumeCalculator.PreviousContractForClient(currentContract,
                                                               contracts);
            var previousContractSiteVolumes =
                SiteVolumeCalculator.SiteVolumesForContract(
                    previousContractForTheClient,
                    previousSiteVolumes);
            var currentContractBillingMonths =
                SiteVolumeCalculator.BillingMonths(
                    currentContractSiteVolumes);

            var actualResult =
                SiteVolumeCalculator
                .VolumesExcludedCurrentContractBillingMonths(
                    currentContractBillingMonths, previousContractSiteVolumes);

            //march 3rd 2015
            Assert.AreEqual(50, actualResult.ElementAt(0).Volume);
            Assert.AreEqual(30, actualResult.ElementAt(0).SiteId);
            Assert.AreEqual(new DateTime(2015, 3, 1),
                            actualResult.ElementAt(0).BillingMonth);
        }
        public void IsContractHasStartDate()
        {
            var contract = ContractReaderStub.Contract();

            var actualResult =
                SiteVolumeCalculator.IsContractHasStartDate(contract);

            Assert.AreEqual(true, actualResult);
        }
        public void NoSiteAvailableForProduct()
        {
            var products = ContractProductReaderStub.Products();
            var sites    = ContractProductSiteReaderStub.NoSites();


            SiteVolumeCalculator.NoSiteAvailableForProduct(products,
                                                           sites);
        }
        public void IsContractHasSomeVolume()
        {
            var contract = ContractReaderStub.Contract();
            var volumes  = ContractProductSiteVolumeReaderStub.SomeVolumes();

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

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


            Assert.AreEqual(true, actualResult);
        }
        public void ProductSites()
        {
            var products = ContractProductReaderStub.Products();
            var sites    = ContractProductSiteReaderStub.Sites();


            var result =
                SiteVolumeCalculator.ProductSites(products, sites);

            Assert.AreEqual(3, result.ElementAt(0).ContractProductId);
        }
        public void PreviousContractForTheClient()
        {
            var contract  = ContractReaderStub.Contract();
            var contracts = ContractReaderStub.Contracts();

            var previousContract =
                SiteVolumeCalculator.PreviousContractForClient(
                    contract, contracts);

            Assert.AreEqual(33, previousContract.ClientId);
            Assert.AreEqual(new DateTime(2015, 3, 1), previousContract.EndDate);
        }
        public void ExpectedBillingMonthsForTheContract()
        {
            var contract = ContractReaderStub.Contract();

            var expectedBillingMonths =
                SiteVolumeCalculator.ExpectedBillingMonthsForTheContract(contract);

            Assert.AreEqual(1, expectedBillingMonths[0].Item1);
            Assert.AreEqual(2016, expectedBillingMonths[0].Item2);
            Assert.AreEqual(2, expectedBillingMonths[1].Item1);
            Assert.AreEqual(2016, expectedBillingMonths[1].Item2);
        }
        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 IsNoVolumeContract()
        {
            var contract = ContractReaderStub.Contract();
            var volumes  = ContractProductSiteVolumeReaderStub.NoVolumes();
            var allSiteVolumesForTheContract =
                SiteVolumeCalculator.SiteVolumesForContract(contract,
                                                            volumes);

            var result =
                SiteVolumeCalculator.IsNoVolumeContract(allSiteVolumesForTheContract);

            Assert.AreEqual(true, result);
        }
        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 ProductsForTheContract()
        {
            var contract = ContractReaderStub.Contract();
            var products = ContractProductReaderStub.Products();


            var result =
                SiteVolumeCalculator.ContractProducts(contract,
                                                      products);

            Assert.AreEqual(1, result.ElementAt(0).ContractAmendmentId);
            Assert.AreEqual(1, result.ElementAt(1).ContractAmendmentId);
        }
        public void MissingBillingMonths()
        {
            var contract = ContractReaderStub.Contract();
            var volumes  = ContractProductSiteVolumeReaderStub.NoVolumes();

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

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

            Assert.AreEqual(2, missingBillingMonths);
        }
Exemplo n.º 15
0
        private static decimal TotalContractedVolume(long contractId)
        {
            var contractFile            = Path.GetFullPath(@"..\..\DataFiles\Contracts.xml");
            var contractProductFile     = Path.GetFullPath(@"..\..\DataFiles\ContractProducts.xml");
            var contractProductSiteFile =
                Path.GetFullPath(@"..\..\DataFiles\ContractProductSites.xml");
            var siteVolumeFile = Path.GetFullPath(@"..\..\DataFiles\SiteVolumes.xml");

            var calculculator = new SiteVolumeCalculator();
            var forecaster    = new SiteVolumeForecaster(calculculator);

            var contractReader = new ContractReader(contractFile);
            var contractData   = new ContractData(contractReader);
            var contractRepo   = new ContractRepository(contractData);


            var contractProductReader = new ContractProductReader(contractProductFile);
            var contractProductData   = new ContractProductData(contractProductReader);
            var productsRepo          = new ContractProductRepository(contractProductData);


            var contractProductSiteReader =
                new ContractProductSiteReader(contractProductSiteFile);
            var contractProductSiteData = new ContractProductSiteData(contractProductSiteReader);
            var sitesRepo =
                new ContractProductSiteRepository(contractProductSiteData);


            var contractProductSiteVolumeReader =
                new ContractProductSiteVolumeReader(siteVolumeFile);
            var contractProductSiteVolumeData =
                new ContractProductSiteVolumeData(contractProductSiteVolumeReader);
            var volumesRepo =
                new ContractProductSiteVolumeRepository(contractProductSiteVolumeData);


            var contract  = contractRepo.Contract(x => x.Id == contractId);
            var contracts = contractRepo.Contracts().ToList();

            var contractProducts     = productsRepo.Records().ToList();
            var contractProductSites = sitesRepo.Records().ToList();
            var siteVolumes          = volumesRepo.Records().ToList();

            var total = forecaster.TotalContractedVolume(contract, contracts,
                                                         contractProducts, contractProductSites, siteVolumes);

            return(total);
        }
        public void CurrentContractBillingMonths()
        {
            var contract    = ContractReaderStub.Contract();
            var volumes     = ContractProductSiteVolumeReaderStub.SomeVolumes();
            var siteVolumes =
                SiteVolumeCalculator.SiteVolumesForContract(contract,
                                                            volumes);

            var billingMonths =
                SiteVolumeCalculator.BillingMonths(
                    siteVolumes);


            Assert.AreEqual(1, billingMonths[0].Item1);
            Assert.AreEqual(2016, billingMonths[0].Item2);
        }
        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 TotalContractedVolumeForNoVolumeAvailableContract()
        {
            var contract  = ContractReaderStub.Contract();
            var contracts = ContractReaderStub.Contracts();
            var products  = ContractProductReaderStub.Products();
            var sites     = ContractProductSiteReaderStub.Sites();
            var volumes   = ContractProductSiteVolumeReaderStub.PreviousSiteVolumes();

            var forecaster =
                new SiteVolumeCalculator();

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

            Assert.AreEqual(150, 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 DecoupleSiteVolumeCalculatorFromForecaster()
        {
            var contract  = ContractReaderStub.Contract();
            var contracts = ContractReaderStub.Contracts();
            var products  = ContractProductReaderStub.Products();
            var sites     = ContractProductSiteReaderStub.Sites();
            var volumes   = ContractProductSiteVolumeReaderStub.SomeVolumes();

            var volumeCalculator =
                new SiteVolumeCalculator();
            var volumeForecaster = new SiteVolumeForecaster(volumeCalculator);

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

            Assert.AreEqual(250, 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);
        }
        [TestMethod] public void NotAllVolumesAvailableAndNotNoVolumesAvailableContract()
        {
            var contract  = ContractReaderStub.Contract();
            var contracts = ContractReaderStub.Contracts();
            var products  = ContractProductReaderStub.Products();
            var sites     = ContractProductSiteReaderStub.Sites();
            var volumes   = ContractProductSiteVolumeReaderStub.NotAllVolumeNotNoVolume();

            var forecaster =
                new SiteVolumeCalculator();

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

            Assert.AreEqual(250, 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 NullContractForTheProducts()
        {
            var products = ContractProductReaderStub.NoProducts();

            SiteVolumeCalculator.NoProductAvailableForContract(null, products);
        }