public void GivenTier3WithOneCostCentresCached_ThenItShouldOnlyFetchTheUncachedTier3()
        {
            var lines  = new BcrLine[] { A.BcrLine().With(A.Criteria.Tier3, "b").With(A.Criteria.CostCentre, "b") };
            var engine = new Mock <IUnit4Engine>();

            engine.Setup(x => x.RunReport(Resql.BcrTier3("b"))).Returns(lines.AsDataSet());

            var cachedLines = new BcrLine[]
            { A.BcrLine().With(A.Criteria.Tier3, "a").With(A.Criteria.CostCentre, "a") };
            var cache = CreateCache(cachedLines);

            var reader = CreateReader(
                new[] { new CostCentre()
                        {
                            Tier3 = "a", Code = "a"
                        }, new CostCentre()
                        {
                            Tier3 = "b", Code = "b"
                        } },
                cache,
                engine.Object);

            var actualLines = reader.Read().Lines;

            engine.Verify(x => x.RunReport(Resql.BcrTier3("b")), Times.Once);
            engine.Verify(x => x.RunReport(Resql.BcrTier3("a")), Times.Never);

            Assert.That(actualLines, Is.EquivalentTo(lines.Union(cachedLines)));
        }
        public void GivenCachedCostCentreInOneTier3AndUncachedCostCentreInSameTier3_ThenItShouldFetchTheTier3()
        {
            var lines = new BcrLine[]
            {
                A.BcrLine().With(A.Criteria.Tier3, "tier3").With(A.Criteria.CostCentre, "a").Actuals(100),
                A.BcrLine().With(A.Criteria.Tier3, "tier3").With(A.Criteria.CostCentre, "b")
            };
            var engine = new Mock <IUnit4Engine>();

            engine.Setup(x => x.RunReport(Resql.BcrTier3("tier3"))).Returns(lines.AsDataSet());

            var cache = CreateCache(
                A.BcrLine().With(A.Criteria.Tier3, "tier3").With(A.Criteria.CostCentre, "a").Actuals(50));

            var reader = CreateReader(
                new[]
            {
                new CostCentre()
                {
                    Tier3 = "tier3", Code = "a"
                }, new CostCentre()
                {
                    Tier3 = "tier3", Code = "b"
                }
            },
                cache,
                engine.Object);

            var actualLines = reader.Read().Lines;

            engine.Verify(x => x.RunReport(Resql.BcrTier3("tier3")), Times.Once);

            Assert.That(actualLines, Is.EquivalentTo(lines));
        }
        public void GivenTier3ThatFails_ThenTheReportShouldBeRanForEachTier4()
        {
            var hierarchy =
                new List <CostCentre>()
            {
                new CostCentre {
                    Tier3 = "A", Tier4 = "B"
                },
                new CostCentre {
                    Tier3 = "A", Tier4 = "C"
                }
            }.GroupBy(x => x.Tier3, x => x);

            var engineFactory =
                new DummyEngineFactory(
                    returnEmpty: hierarchy.Single().Select(x => Resql.Bcr(tier4: x.Tier4)),
                    throws: new[] { Resql.Bcr(tier3: hierarchy.Single().Key) }
                    );

            var bcrReport = new BcrReport(engineFactory, new NullLogging());

            bcrReport.RunBcr(hierarchy);

            hierarchy.Single().ToList().ForEach(
                c => { engineFactory.Mock.Verify(x => x.RunReport(Resql.BcrTier4(c.Tier4)), Times.Once); });
        }
        public void GivenTier4ThatFails_ThenTheReportShouldBeRanForTheCostCentre()
        {
            var hierarchy =
                new List <CostCentre>()
            {
                new CostCentre {
                    Tier3 = "A", Tier4 = "B", Code = "C"
                }
            }.GroupBy(
                x => x.Tier3,
                x => x);

            var engineFactory =
                new DummyEngineFactory(
                    returnEmpty: new[] { Resql.Bcr(costCentre: hierarchy.Single().Single().Code) },
                    throws: new[]
            {
                Resql.Bcr(tier3: hierarchy.Single().Key), Resql.Bcr(tier4: hierarchy.Single().Single().Tier4)
            }
                    );

            var bcrReport = new BcrReport(engineFactory, new NullLogging());

            bcrReport.RunBcr(hierarchy);

            engineFactory.Mock.Verify(
                x => x.RunReport(Resql.BcrCostCentre(hierarchy.Single().Single().Code)),
                Times.Once);
        }
        public void GivenTier3WithAllCostCentresCachedAndUpdateCacheOption_ThenItShouldFetchThatTier3()
        {
            var engine = new Mock <IUnit4Engine>();

            var cache = CreateCache(A.BcrLine().With(A.Criteria.Tier3, "tier3"));

            var reader = CreateReader(new[] { new CostCentre()
                                              {
                                                  Tier3 = "tier3"
                                              } }, cache, engine.Object);

            reader.Read();

            engine.Verify(x => x.RunReport(Resql.BcrTier3("tier3")), Times.Never);
        }
        public void GivenNoCache_ThenItShouldFetchAllTier3Hierarchies()
        {
            var lines  = new BcrLine[] { A.BcrLine().With(A.Criteria.Tier3, "tier3") };
            var engine = new Mock <IUnit4Engine>();

            engine.Setup(x => x.RunReport(Resql.BcrTier3("tier3"))).Returns(lines.AsDataSet());
            var reader = CreateReader(
                new[] { new CostCentre()
                        {
                            Tier3 = "tier3"
                        } },
                Mock.Of <IFile <Bcr> >(),
                engine.Object);

            reader.Read();

            engine.Verify(x => x.RunReport(Resql.BcrTier3("tier3")), Times.Once);
        }
        public void GivenOneTier3_ThenTheReportShouldBeRanForThatTier3()
        {
            var hierarchy = new List <CostCentre>()
            {
                new CostCentre {
                    Tier3 = "A"
                }
            }.GroupBy(x => x.Tier3, x => x);

            var engineFactory =
                new DummyEngineFactory(
                    new[] { Resql.Bcr(tier3: hierarchy.Single().Single().Tier3) }
                    );

            var bcrReport = new BcrReport(engineFactory, new NullLogging());

            bcrReport.RunBcr(hierarchy);

            engineFactory.Mock.Verify(x => x.RunReport(Resql.BcrTier3(hierarchy.Single().Key)), Times.Once);
        }
        public void GivenTheFinalBcr_ThenItShouldBeWrittenToTheCache()
        {
            var lines = new BcrLine[]
            {
                A.BcrLine().With(A.Criteria.Tier3, "tier3").With(A.Criteria.CostCentre, "a"),
                A.BcrLine().With(A.Criteria.Tier3, "tier3").With(A.Criteria.CostCentre, "b")
            };
            var engine = new Mock <IUnit4Engine>();

            engine.Setup(x => x.RunReport(Resql.BcrTier3("tier3"))).Returns(lines.AsDataSet());

            var cache = new Mock <IFile <Bcr> >();

            cache.Setup(x => x.Exists()).Returns(true);
            cache.Setup(x => x.IsDirty()).Returns(false);
            cache.Setup(x => x.Read()).Returns(
                new Bcr(
                    new BcrLine[] { A.BcrLine().With(A.Criteria.Tier3, "tier3").With(A.Criteria.CostCentre, "a") }));

            var reader = CreateReader(
                new[]
            {
                new CostCentre()
                {
                    Tier3 = "tier3", Code = "a"
                }, new CostCentre()
                {
                    Tier3 = "tier3", Code = "b"
                }
            },
                cache.Object,
                engine.Object);

            var bcr = reader.Read();

            cache.Verify(x => x.Write(bcr), Times.Once);
        }
Example #9
0
        private DataSet RunReport(Tier tier, string value)
        {
            string resql;

            switch (tier)
            {
            case Tier.Tier3:
                resql = Resql.Bcr(tier3: value);
                break;

            case Tier.Tier4:
                resql = Resql.Bcr(tier4: value);
                break;

            case Tier.CostCentre:
                resql = Resql.Bcr(costCentre: value);
                break;

            default:
                throw new InvalidOperationException("Cannot run a report for this tier");
            }

            return(RunReport(resql));
        }
Example #10
0
        public void GivenCostCentreParameter_TheReportShouldUseItAsCostCentre()
        {
            var report = Resql.Bcr(costCentre: "aCostCentre");

            Assert.That(report.Contains(".declare [Cost Centre] String 'aCostCentre'"), Is.True);
        }
Example #11
0
        public void GivenTier4Parameter_TheReportShouldUseItAsTier4()
        {
            var report = Resql.Bcr(tier4: "aTier4");

            Assert.That(report.Contains(".declare [Budget Group (Tier4)] String 'aTier4'"), Is.True);
        }
Example #12
0
        public void GivenTier3Parameter_TheReportShouldUseItAsTier3()
        {
            var report = Resql.Bcr(tier3: "aTier3");

            Assert.That(report.Contains(".declare [Service (Tier3)] String 'aTier3'"), Is.True);
        }