public void GetCodeDescription_FillsCache()
        {
            Mock <IJustWareApi>    api   = new Mock <IJustWareApi>();
            Mock <ICodeTableCache> cache = new Mock <ICodeTableCache>();
            List <CaseType>        ct    = new List <CaseType>();

            ct.Add(new CaseType {
                Code = "C", Description = "D"
            });
            ct.Add(new CaseType {
                Code = "C2", Description = "D2"
            });
            api.Setup(a => a.FindCaseTypes(It.IsAny <string>(), null)).Returns(ct);


            List <CaseType> singleItemList = new List <CaseType>();

            singleItemList.Add(new CaseType()
            {
                Code = "C", Description = "D"
            });

            cache.Setup(c => c.QueryCacheCodeTable <CaseType>(It.IsAny <string>())).Returns(singleItemList);
            cache.Setup(c => c.IsCodeTableCached <CaseType>()).Returns(false);

            CodeLookupHelper helper      = new CodeLookupHelper(api.Object, cache.Object);
            string           description = helper.GetCodeDescription <CaseType>("C");

            Assert.AreEqual("D", description, "The correct caseType was not returned");
            api.Verify(a => a.FindCaseTypes(It.Is <string>(s => s == CodeLookupHelper.ALL_CODES_QUERY), null), Times.Once(), "FindCaseTypes was not called correctly");
            cache.Verify(c => c.AddToDictionary(It.Is <List <CaseType> >(l => l.Count() == 2)), Times.Once(), "Full CodeTable was not cached.");
        }
        public void ClearCache_HandlesNoCodeTableCache()
        {
            Mock<IJustWareApi> api = new Mock<IJustWareApi>();
                    Mock<ICodeTableCache> cache = new Mock<ICodeTableCache>();
                    CodeLookupHelper helper = new CodeLookupHelper(api.Object);

                    helper.ClearCache<CaseType>();

                    //As long as we didn't crash because we have no cache, everything is happy.
        }
        public void ClearCache_CallsClearCacheOnCodeTableCache()
        {
            Mock<IJustWareApi> api = new Mock<IJustWareApi>();
                    Mock<ICodeTableCache> cache = new Mock<ICodeTableCache>();
                    CodeLookupHelper helper = new CodeLookupHelper(api.Object, cache.Object);

                    helper.ClearCache<CaseType>();

                    cache.Verify(c => c.ClearCache<CaseType>(), Times.Once(), "ClearCache was not called on the CodeTableCache");
        }
        public void ClearAllCache_HandlesNoCodeTableCache()
        {
            Mock <IJustWareApi>    api    = new Mock <IJustWareApi>();
            Mock <ICodeTableCache> cache  = new Mock <ICodeTableCache>();
            CodeLookupHelper       helper = new CodeLookupHelper(api.Object);

            helper.ClearAllCache();

            //As long as we didn't crash because we have no cache, everything is happy.
        }
        public void ClearAllCache_CallsClearAllCacheOnCodeTableCache()
        {
            Mock <IJustWareApi>    api    = new Mock <IJustWareApi>();
            Mock <ICodeTableCache> cache  = new Mock <ICodeTableCache>();
            CodeLookupHelper       helper = new CodeLookupHelper(api.Object, cache.Object);

            helper.ClearAllCache();

            cache.Verify(c => c.ClearAllCache(), Times.Once(), "ClearAllCache was not called on the CodeTableCache");
        }
        public void GetCodeDescriptionTest()
        {
            Mock<IJustWareApi> api = new Mock<IJustWareApi>();
            List<CaseType> ct = new List<CaseType>();
            ct.Add(new CaseType { Code = "C", Description = "D" });
            api.Setup(a => a.FindCaseTypes(It.IsAny<string>(), null)).Returns(ct);

            CodeLookupHelper helper = new CodeLookupHelper(api.Object);

            string description = helper.GetCodeDescription<CaseType>("C");
            Assert.AreEqual("D", description, "The correct caseType was not returned");
            api.Verify(a => a.FindCaseTypes(It.Is<string>(s => s == "Code == \"C\""), null), Times.Once(), "FindCaseTypes was not called correctly");
        }
        public void QueryCodeTableTest_NoCache()
        {
            Mock <IJustWareApi> api = new Mock <IJustWareApi>();
            List <CaseType>     ct  = new List <CaseType>();

            ct.Add(new CaseType {
                Code = "C", Description = "D"
            });
            api.Setup(a => a.FindCaseTypes(It.IsAny <string>(), null)).Returns(ct);

            CodeLookupHelper helper = new CodeLookupHelper(api.Object);

            List <CaseType> returned = helper.QueryCodeTable <CaseType>("1==1");

            Assert.AreSame(ct, returned, "CaseTypes not returned correctly.");
            api.Verify(a => a.FindCaseTypes(It.IsAny <string>(), null), Times.Once(), "Api FindCaseTypes not called.");
        }
        public void GetCodeDescriptionTest()
        {
            Mock <IJustWareApi> api = new Mock <IJustWareApi>();
            List <CaseType>     ct  = new List <CaseType>();

            ct.Add(new CaseType {
                Code = "C", Description = "D"
            });
            api.Setup(a => a.FindCaseTypes(It.IsAny <string>(), null)).Returns(ct);

            CodeLookupHelper helper = new CodeLookupHelper(api.Object);

            string description = helper.GetCodeDescription <CaseType>("C");

            Assert.AreEqual("D", description, "The correct caseType was not returned");
            api.Verify(a => a.FindCaseTypes(It.Is <string>(s => s == "Code == \"C\""), null), Times.Once(), "FindCaseTypes was not called correctly");
        }
        public void GetCodeTable_NoCache_DoesntBlowup()
        {
            Mock <IJustWareApi> api = new Mock <IJustWareApi>();
            List <CaseType>     ct  = new List <CaseType>();

            ct.Add(new CaseType {
                Code = "C", Description = "D"
            });
            api.Setup(a => a.FindCaseTypes(It.IsAny <string>(), null)).Returns(ct);

            CodeLookupHelper helper = new CodeLookupHelper(api.Object);

            List <CaseType> returned = helper.GetCodeTable <CaseType>();

            Assert.AreSame(ct, returned, "CaseTypes not returned correctly.");
            api.Verify(a => a.FindCaseTypes(It.Is <string>(s => s == CodeLookupHelper.ALL_CODES_QUERY), null), Times.Once(), "FindCaseTypes was not called correctly");
        }
        public void GetCodeTableTest()
        {
            Mock <IJustWareApi>    api   = new Mock <IJustWareApi>();
            Mock <ICodeTableCache> cache = new Mock <ICodeTableCache>();
            List <CaseType>        ct    = new List <CaseType>();

            ct.Add(new CaseType {
                Code = "C", Description = "D"
            });
            api.Setup(a => a.FindCaseTypes(It.IsAny <string>(), null)).Returns(ct);
            cache.Setup(c => c.QueryCacheCodeTable <CaseType>(It.IsAny <string>())).Returns(new List <CaseType>());

            CodeLookupHelper helper = new CodeLookupHelper(api.Object, cache.Object);

            List <CaseType> returned = helper.GetCodeTable <CaseType>();

            Assert.AreSame(ct, returned, "CaseTypes not returned correctly.");
            api.Verify(a => a.FindCaseTypes(It.Is <string>(s => s == CodeLookupHelper.ALL_CODES_QUERY), null), Times.Once(), "FindCaseTypes was not called correctly");
            cache.Verify(c => c.AddToDictionary(It.Is <List <CaseType> >(l => l == ct)), Times.Once(), "Code Table was not cached");
        }
        public void QueryCodeTableTest_QueriesFromCache()
        {
            Mock <IJustWareApi>    api   = new Mock <IJustWareApi>();
            Mock <ICodeTableCache> cache = new Mock <ICodeTableCache>();
            List <CaseType>        ct    = new List <CaseType>();

            ct.Add(new CaseType {
                Code = "C", Description = "D"
            });
            cache.Setup(c => c.IsCodeTableCached <CaseType>()).Returns(true);
            cache.Setup(c => c.QueryCacheCodeTable <CaseType>(It.IsAny <string>())).Returns(ct);

            CodeLookupHelper helper = new CodeLookupHelper(api.Object, cache.Object);

            string          QUERY    = "1==1";
            List <CaseType> returned = helper.QueryCodeTable <CaseType>(QUERY);

            Assert.AreSame(ct, returned, "CaseTypes not returned correctly.");
            api.Verify(a => a.FindCaseTypes(It.IsAny <string>(), null), Times.Never(), "Api FindCaseTypes called when it should not have been.");
            cache.Verify(c => c.AddToDictionary(It.IsAny <List <CaseType> >()), Times.Never(), "AddToDictionary was called when it should not have been.");
            cache.Verify(c => c.QueryCacheCodeTable <CaseType>(QUERY), Times.Once(), "QueryCachedCodeTable was not called");
        }
        public void GetCodeDescription_FillsCache()
        {
            Mock<IJustWareApi> api = new Mock<IJustWareApi>();
            Mock<ICodeTableCache> cache = new Mock<ICodeTableCache>();
            List<CaseType> ct = new List<CaseType>();
            ct.Add(new CaseType { Code = "C", Description = "D" });
            ct.Add(new CaseType { Code = "C2", Description = "D2" });
            api.Setup(a => a.FindCaseTypes(It.IsAny<string>(), null)).Returns(ct);

            List<CaseType> singleItemList = new List<CaseType>();
            singleItemList.Add(new CaseType(){Code = "C", Description = "D"});

            cache.Setup(c => c.QueryCacheCodeTable<CaseType>(It.IsAny<string>())).Returns(singleItemList);
            cache.Setup(c => c.IsCodeTableCached<CaseType>()).Returns(false);

            CodeLookupHelper helper = new CodeLookupHelper(api.Object, cache.Object);
            string description = helper.GetCodeDescription<CaseType>("C");

            Assert.AreEqual("D", description, "The correct caseType was not returned");
            api.Verify(a => a.FindCaseTypes(It.Is<string>(s => s == CodeLookupHelper.ALL_CODES_QUERY), null), Times.Once(), "FindCaseTypes was not called correctly");
            cache.Verify(c=>c.AddToDictionary(It.Is<List<CaseType>>(l=>l.Count() == 2)), Times.Once(), "Full CodeTable was not cached.");
        }
        public void QueryCodeTableTest_QueriesFromCache()
        {
            Mock<IJustWareApi> api = new Mock<IJustWareApi>();
            Mock<ICodeTableCache> cache = new Mock<ICodeTableCache>();
            List<CaseType> ct = new List<CaseType>();
            ct.Add(new CaseType { Code = "C", Description = "D" });
            cache.Setup(c => c.IsCodeTableCached<CaseType>()).Returns(true);
            cache.Setup(c => c.QueryCacheCodeTable<CaseType>(It.IsAny<string>())).Returns(ct);

            CodeLookupHelper helper = new CodeLookupHelper(api.Object, cache.Object);

            string QUERY = "1==1";
            List<CaseType> returned = helper.QueryCodeTable<CaseType>(QUERY);
            Assert.AreSame(ct, returned, "CaseTypes not returned correctly.");
            api.Verify(a => a.FindCaseTypes(It.IsAny<string>(), null), Times.Never(), "Api FindCaseTypes called when it should not have been.");
            cache.Verify(c => c.AddToDictionary(It.IsAny<List<CaseType>>()), Times.Never(), "AddToDictionary was called when it should not have been.");
            cache.Verify(c => c.QueryCacheCodeTable<CaseType>(QUERY), Times.Once(), "QueryCachedCodeTable was not called");
        }
        public void QueryCodeTableTest_NoCache()
        {
            Mock<IJustWareApi> api = new Mock<IJustWareApi>();
            List<CaseType> ct = new List<CaseType>();
            ct.Add(new CaseType {Code = "C", Description = "D"});
            api.Setup(a => a.FindCaseTypes(It.IsAny<string>(), null)).Returns(ct);

            CodeLookupHelper helper = new CodeLookupHelper(api.Object);

            List<CaseType> returned = helper.QueryCodeTable<CaseType>("1==1");
            Assert.AreSame(ct, returned, "CaseTypes not returned correctly.");
            api.Verify(a=>a.FindCaseTypes(It.IsAny<string>(), null), Times.Once(), "Api FindCaseTypes not called.");
        }
        public void GetCodeTable_NoCache_DoesntBlowup()
        {
            Mock<IJustWareApi> api = new Mock<IJustWareApi>();
            List<CaseType> ct = new List<CaseType>();
            ct.Add(new CaseType { Code = "C", Description = "D" });
            api.Setup(a => a.FindCaseTypes(It.IsAny<string>(), null)).Returns(ct);

            CodeLookupHelper helper = new CodeLookupHelper(api.Object);

            List<CaseType> returned = helper.GetCodeTable<CaseType>();
            Assert.AreSame(ct, returned, "CaseTypes not returned correctly.");
            api.Verify(a => a.FindCaseTypes(It.Is<string>(s => s == CodeLookupHelper.ALL_CODES_QUERY), null), Times.Once(), "FindCaseTypes was not called correctly");
        }
        public void GetCodeTable_GetsFromCacheIfThere()
        {
            Mock<IJustWareApi> api = new Mock<IJustWareApi>();
            Mock<ICodeTableCache> cache = new Mock<ICodeTableCache>();
            List<CaseType> ct = new List<CaseType>();
            ct.Add(new CaseType { Code = "C", Description = "D" });
            cache.Setup(c => c.QueryCacheCodeTable<CaseType>(It.IsAny<string>())).Returns(ct);
            api.Setup(a => a.FindCaseTypes(It.IsAny<string>(), null)).Returns(ct);

            CodeLookupHelper helper = new CodeLookupHelper(api.Object, cache.Object);

            List<CaseType> returned = helper.GetCodeTable<CaseType>();
            Assert.AreSame(ct, returned, "CaseTypes not returned correctly.");
            api.Verify(a => a.FindCaseTypes(It.Is<string>(s => s == CodeLookupHelper.ALL_CODES_QUERY), null), Times.Never(), "FindCaseTypes was called when it should not have been");
            cache.Verify(c => c.QueryCacheCodeTable<CaseType>(It.Is<string>(s => s == CodeLookupHelper.ALL_CODES_QUERY)), Times.Once(), "Code Table was not cached");
        }