public async Task GetSubcategories_Uses_Cache_When_Data_Available() { var cacheService = new MockCacheService(); cacheService.DataExistsAndIsValidAsyncDelegate = s => Task.FromResult(true); var categories = new List<Category> { new Category{ Id = 10}, new Category{ Id = 11} }; cacheService.GetDataDelegate = s => { if (s == "SubCategoriesOfCategoryId1") return new ReadOnlyCollection<Category>(categories); return new ReadOnlyCollection<Category>(null); }; var productCatalogService = new MockProductCatalogService(); productCatalogService.GetSubcategoriesAsyncDelegate = (i) => Task.FromResult(new ReadOnlyCollection<Category>(null)); var target = new ProductCatalogRepository(productCatalogService, cacheService); var returnedCategories = await target.GetSubcategoriesAsync(1); Assert.AreEqual(2, returnedCategories.Count); Assert.AreEqual(10, returnedCategories[0].Id); Assert.AreEqual(11, returnedCategories[1].Id); }
public async Task GetSubcategories_Saves_Data_To_Cache() { var cacheService = new MockCacheService(); cacheService.DataExistsAndIsValidAsyncDelegate = s => Task.FromResult(false); cacheService.SaveExternalDataAsyncDelegate = s => Task.FromResult(new Uri("http://test.org")); cacheService.SaveDataAsyncDelegate = (s, o) => { var collection = (ReadOnlyCollection<Category>)o; Assert.AreEqual("SubCategoriesOfCategoryId1", s); Assert.AreEqual(2, collection.Count); Assert.AreEqual(10, collection[0].Id); Assert.AreEqual(11, collection[1].Id); return Task.FromResult(new Uri("http://test.org")); }; var productCatalogService = new MockProductCatalogService(); var subCategories = new List<Category> { new Category{ Id = 10}, new Category{ Id = 11} }; productCatalogService.GetSubcategoriesAsyncDelegate = (i) => Task.FromResult(new ReadOnlyCollection<Category>(subCategories)); var target = new ProductCatalogRepository(productCatalogService, cacheService); await target.GetSubcategoriesAsync(1); }
public async Task GetSubcategories_Calls_Service_When_Cache_Miss() { var cacheService = new MockCacheService(); cacheService.DataExistsAndIsValidAsyncDelegate = s => Task.FromResult(false); cacheService.SaveExternalDataAsyncDelegate = s => Task.FromResult(new Uri("http://test.org")); cacheService.SaveDataAsyncDelegate = (s, c) => Task.FromResult(new Uri("http://test.org")); var productCatalogService = new MockProductCatalogService(); var subCategories = new List<Category> { new Category{ Id = 10}, new Category{ Id = 11} }; productCatalogService.GetSubcategoriesAsyncDelegate = (i) => Task.FromResult(new ReadOnlyCollection<Category>(subCategories)); var target = new ProductCatalogRepository(productCatalogService, cacheService); var returnedSubcategories = await target.GetSubcategoriesAsync(1); Assert.AreEqual(2, returnedSubcategories.Count); Assert.AreEqual(10, returnedSubcategories[0].Id); Assert.AreEqual(11, returnedSubcategories[1].Id); }