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); }
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)); }
public void GivenCostCentreParameter_TheReportShouldUseItAsCostCentre() { var report = Resql.Bcr(costCentre: "aCostCentre"); Assert.That(report.Contains(".declare [Cost Centre] String 'aCostCentre'"), Is.True); }
public void GivenTier4Parameter_TheReportShouldUseItAsTier4() { var report = Resql.Bcr(tier4: "aTier4"); Assert.That(report.Contains(".declare [Budget Group (Tier4)] String 'aTier4'"), Is.True); }
public void GivenTier3Parameter_TheReportShouldUseItAsTier3() { var report = Resql.Bcr(tier3: "aTier3"); Assert.That(report.Contains(".declare [Service (Tier3)] String 'aTier3'"), Is.True); }