public async Task ReturnsCollectionOnlyContainingTheNoneOptionIfCacheReadFails() { var apiClient = Substitute.For<IApiClient>(); var cache = Substitute.For<IBlobCache>(); cache.Get(Args.String) .Returns(Observable.Throw<byte[]>(new InvalidOperationException("Unknown"))); var modelService = new ModelService(apiClient, cache, Substitute.For<IAvatarProvider>()); var fetched = await modelService.GetLicenses(); Assert.Equal(1, fetched.Count); Assert.Equal("None", fetched[0].Name); }
public async Task ReturnsCollectionOnlyContainingTheNoneOptionWhenLicenseApiNotFound() { var apiClient = Substitute.For<IApiClient>(); apiClient.GetLicenses() .Returns(Observable.Throw<LicenseMetadata>(new NotFoundException("Not Found", HttpStatusCode.NotFound))); var cache = new InMemoryBlobCache(); var modelService = new ModelService(apiClient, cache, Substitute.For<IAvatarProvider>()); var fetched = await modelService.GetLicenses(); Assert.Equal(1, fetched.Count); Assert.Equal("None", fetched[0].Name); }
public async Task CanRetrieveAndCacheLicenses() { var licenses = new[] { new LicenseMetadata("mit", "MIT", new Uri("https://github.com/")), new LicenseMetadata("apache", "Apache", new Uri("https://github.com/")) }; var apiClient = Substitute.For<IApiClient>(); apiClient.GetLicenses().Returns(licenses.ToObservable()); var cache = new InMemoryBlobCache(); var modelService = new ModelService(apiClient, cache, Substitute.For<IAvatarProvider>()); var fetched = await modelService.GetLicenses(); Assert.Equal(3, fetched.Count); Assert.Equal("None", fetched[0].Name); Assert.Equal("MIT", fetched[1].Name); Assert.Equal("Apache", fetched[2].Name); var cached = await cache.GetObject<IReadOnlyList<ModelService.LicenseCacheItem>>("licenses"); Assert.Equal(2, cached.Count); Assert.Equal("mit", cached[0].Key); Assert.Equal("apache", cached[1].Key); }
public async Task CanRetrieveAndCacheLicenses() { var data = new[] { new LicenseMetadata("mit", "MIT", new Uri("https://github.com/")), new LicenseMetadata("apache", "Apache", new Uri("https://github.com/")) }; var apiClient = Substitute.For<IApiClient>(); apiClient.GetLicenses().Returns(data.ToObservable()); var cache = new InMemoryBlobCache(); var modelService = new ModelService(apiClient, cache, Substitute.For<IAvatarProvider>()); var fetched = await modelService.GetLicenses().ToList(); Assert.Equal(2, fetched.Count); for (int i = 0; i < data.Length; i++) Assert.Equal(data[i].Name, fetched[i].Name); var indexKey = CacheIndex.LicensesPrefix; var cached = await cache.GetObject<CacheIndex>(indexKey); Assert.Equal(2, cached.Keys.Count); var items = await cache.GetObjects<LicenseCacheItem>(cached.Keys).Take(1); for (int i = 0; i < data.Length; i++) Assert.Equal(data[i].Name, items[indexKey + "|" + data[i].Key].Name); }
public async Task ReturnsEmptyIfCacheReadFails() { var apiClient = Substitute.For<IApiClient>(); var cache = Substitute.For<IBlobCache>(); cache.Get(Args.String) .Returns(Observable.Throw<byte[]>(new InvalidOperationException("Unknown"))); var modelService = new ModelService(apiClient, cache, Substitute.For<IAvatarProvider>()); var fetched = await modelService.GetLicenses().ToList(); Assert.Equal(0, fetched.Count); }
public async Task ReturnsEmptyIfLicenseApiNotFound() { var apiClient = Substitute.For<IApiClient>(); apiClient.GetLicenses() .Returns(Observable.Throw<LicenseMetadata>(new NotFoundException("Not Found", HttpStatusCode.NotFound))); var cache = new InMemoryBlobCache(); var modelService = new ModelService(apiClient, cache, Substitute.For<IAvatarProvider>()); var fetched = await modelService.GetLicenses().ToList(); Assert.Equal(0, fetched.Count); }