private IDescriptorsCache MockNHibernateCallsAndInitializeCache()
        {
            MockDescriptorCacheDataProvider = A.Fake <IDescriptorLookupProvider>();

            A.CallTo(() => MockDescriptorCacheDataProvider.GetAllDescriptorLookups())
            .Returns(
                new Dictionary <string, IList <DescriptorLookup> >
            {
                {
                    TestDescriptorName, new List <DescriptorLookup>
                    {
                        TestDescriptorNormal,
                        TestDescriptorCustom,
                        TestDescriptorWithCodeValue
                    }
                }
            });

            CacheProvider = new MemoryCacheProvider();

            MockEdFiOdsInstanceIdentificationProvider =
                A.Fake <IEdFiOdsInstanceIdentificationProvider>();

            A.CallTo(() => MockEdFiOdsInstanceIdentificationProvider.GetInstanceIdentification())
            .Returns(1);

            return(new DescriptorsCache(
                       MockDescriptorCacheDataProvider, CacheProvider, MockEdFiOdsInstanceIdentificationProvider));
        }
        private IDescriptorsCache MockNHibernateCallsAndInitializeCache()
        {
            MockDescriptorCacheDataProvider = A.Fake <IDescriptorLookupProvider>();

            A.CallTo(() => MockDescriptorCacheDataProvider.GetAllDescriptorLookups())
            .Returns(
                new Dictionary <string, IList <DescriptorLookup> >
            {
                {
                    TestDescriptorName, new List <DescriptorLookup>
                    {
                        TestDescriptorNormal,
                        TestDescriptorCustom,
                        TestDescriptorWithCodeValue
                    }
                }
            });

            Dictionary <string, IList <DescriptorLookup> > values = new Dictionary <string, IList <DescriptorLookup> >
            {
                {
                    TestDescriptorName, new List <DescriptorLookup>
                    {
                        TestDescriptorNormal,
                        TestDescriptorCustom,
                        TestDescriptorWithCodeValue
                    }
                }
            };

            var memorycacheoption = A.Fake <IOptions <MemoryCacheOptions> >();

            MemoryCache memoryCache = new MemoryCache(memorycacheoption);

            CacheProvider = new MemoryCacheProvider(memoryCache);
            CacheProvider.Insert(TestDescriptorName, values, DateTime.MaxValue, TimeSpan.FromMinutes(5));

            MockEdFiOdsInstanceIdentificationProvider =
                A.Fake <IEdFiOdsInstanceIdentificationProvider>();

            A.CallTo(() => MockEdFiOdsInstanceIdentificationProvider.GetInstanceIdentification())
            .Returns(1);

            descriptionCache = new DescriptorsCache(
                MockDescriptorCacheDataProvider, CacheProvider, MockEdFiOdsInstanceIdentificationProvider);
            return(descriptionCache);
        }
        public void GetId_ForDescriptor_ForMissingValue_Forces_DatabaseFetch_And_Cache_Update()
        {
            var cache = MockNHibernateCallsAndInitializeCache();

            A.CallTo(() => MockDescriptorCacheDataProvider.GetDescriptorLookupsByDescriptorName(TestDescriptorName))
            .Returns(
                new List <DescriptorLookup>
            {
                TestDescriptorNormal,
                TestDescriptorCustom,
                TestDescriptorCustomNotIncluded
            });

            SystemClock.Now = () => DateTime.UtcNow.AddHours(1);
            var returnedId = cache.GetId(TestDescriptorName, "uri://www.changetest.org/AcademicSubjectDescriptor#210");

            A.CallTo(() => MockDescriptorCacheDataProvider.GetDescriptorLookupsByDescriptorName(TestDescriptorName))
            .MustHaveHappened();

            Assert.AreEqual(TestDescriptorCustomNotIncluded.Id, returnedId);
        }