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 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 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); }