예제 #1
0
		public void GetTab_Should_Return_A_Tab_from_cache_when_it_is_already_cached()
		{
			var cache = new Mock<ICache>();
			var database = new Mock<IDatabase>();
			ITabRepository pageRepository = new TabRepository(database.Object, cache.Object);

			const int pageId = 1;
			var page = default(Tab);
			var sampleTab = new Tab() { ID = pageId, Title = "Test Tab", ColumnCount = 3, LayoutType = 3, VersionNo = 1, 
                PageType = (int)Enumerations.PageType.PersonalTab, CreatedDate = DateTime.Now };

			"Given TabRepository and the requested page in cache".Context(() =>
			{
				cache.Expect(c => c.Get(CacheKeys.TabKeys.TabId(sampleTab.ID)))
						.Returns(sampleTab).AtMostOnce();
			});

			"when GetTabById is called".Do(() =>
					page = pageRepository.GetTabById(1));

			"it checks in the cache first and finds the object is in cache".Assert(() =>
			{
				cache.VerifyAll();
			});

			"it returns the page as expected".Assert(() =>
			{
				Assert.Equal<int>(pageId, page.ID);
			});
		}
예제 #2
0
		public void GetTab_Should_Return_A_Tab_from_database_when_cache_is_empty_and_then_caches_it()
		{
			var cache = new Mock<ICache>();
			var database = new Mock<IDatabase>();
			ITabRepository pageRepository = new TabRepository(database.Object, cache.Object);

			const int pageId = 1;
			var page = default(Tab);
			var sampleTab = new Tab() { ID = pageId, Title = "Test Tab", ColumnCount = 3, LayoutType = 3, VersionNo = 1, PageType = (int)Enumerations.PageType.PersonalTab, CreatedDate = DateTime.Now };

			database
					.Expect<IQueryable<Tab>>(d => d.Query<int, Tab>(CompiledQueries.TabQueries.GetTabById, 1))
					.Returns(new Tab[] { sampleTab }.AsQueryable()).Verifiable();

			"Given TabRepository and empty cache".Context(() =>
			{
				// cache is empty
				cache.Expect(c => c.Get(It.IsAny<string>())).Returns(default(object));
				// It will cache the Tab object afte loading from database
				cache.Expect(c => c.Add(It.Is<string>(cacheKey => cacheKey == CacheKeys.TabKeys.TabId(pageId)),
						It.Is<Tab>(cacheTab => object.ReferenceEquals(cacheTab, sampleTab)))).Verifiable();
			});

			"when GetTabById is called".Do(() =>
					page = pageRepository.GetTabById(1));

			"it checks in the cache first and finds nothing and then caches it".Assert(() =>
					cache.VerifyAll());


			"it loads the page from database".Assert(() =>
					database.VerifyAll());

			"it returns the page as expected".Assert(() =>
			{
				Assert.Equal<int>(pageId, page.ID);
			});
		}
예제 #3
0
		public void InsertTab_should_insert_a_page_in_database_and_cache_it()
		{
			var cache = new Mock<ICache>();
			var database = new Mock<IDatabase>();
			ITabRepository pageRepository = new TabRepository(database.Object, cache.Object);

			const int pageId = 1;
            Guid userId = Guid.NewGuid();
			var page = default(Tab);
			var sampleTab = new Tab() { Title = "Test Tab", ColumnCount = 3, 
				LayoutType = 3, AspNetUser = new AspNetUser { UserId = userId }, VersionNo = 1, 
				PageType = (int)Enumerations.PageType.PersonalTab, CreatedDate = DateTime.Now };

			database.Expect<Tab>(d => d.Insert<AspNetUser, Tab>(
                        It.Is<AspNetUser>(u => u.UserId == userId),
                        It.IsAny<Action<AspNetUser, Tab>>(),
                        It.Is<Tab>(p => p.ID == default(int))))
                    .Callback(() => sampleTab.ID = pageId)
					.Returns(sampleTab)
                    .AtMostOnce()
                    .Verifiable();

			"Given TabRepository".Context(() =>
			{
				// It will clear items from cache
				cache.Expect(c => c.Remove(CacheKeys.UserKeys.TabsOfUser(sampleTab.AspNetUser.UserId)));
			});

			"when Insert is called".Do(() =>
					page = pageRepository.Insert(new Tab
					{
						Title = sampleTab.Title,
						ColumnCount = sampleTab.ColumnCount,
						LayoutType = sampleTab.LayoutType,
						AspNetUser = new AspNetUser { UserId = userId },
						VersionNo = sampleTab.VersionNo,
						PageType = sampleTab.PageType
					}));

			("then it should insert the page in database" +
			"and clear any cached collection of pages for the user who gets the new page" +
			"and it returns the newly inserted page").Assert(() =>
			{
				database.VerifyAll();
				cache.VerifyAll();

				Assert.Equal<int>(pageId, page.ID);
			});			
		}