public async Task OurOwnReleaseShouldBeCached() { var input = @"https://github.com/akavache/Akavache/releases/download/3.2.0/Akavache.3.2.0.zip"; var blobCache = new TestBlobCache(); var fixture = new CachingHttpScheduler(new HttpScheduler(), blobCache); fixture.Client = new HttpClient(new HttpClientHandler() { AllowAutoRedirect = true, MaxRequestContentBufferSize = 1048576 * 64, }); Assert.Equal(0, blobCache.GetAllKeys().First().Count()); var result = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 5); Assert.True(result.Item1.IsSuccessStatusCode); Assert.Equal(8089690, result.Item2.Length); Assert.Equal(1, blobCache.GetAllKeys().First().Count()); var result2 = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 3); Assert.True(result2.Item1.IsSuccessStatusCode); Assert.Equal(8089690, result2.Item2.Length); }
public void SuccessfulLoginIntegrationTest() { var kernel = new MoqMockingKernel(); kernel.Bind <IWelcomeViewModel>().To <WelcomeViewModel>(); var cache = new TestBlobCache(null, (IEnumerable <KeyValuePair <string, byte[]> >)null); kernel.Bind <ISecureBlobCache>().ToConstant(cache); var mock = kernel.GetMock <IScreen>(); var routingState = new RoutingState(); mock.Setup(x => x.Router).Returns(routingState); var initialPage = kernel.Get <IRoutableViewModel>(); kernel.Get <IScreen>().Router.NavigateAndReset.Execute(initialPage); var fixture = kernel.Get <IWelcomeViewModel>(); kernel.Get <IScreen>().Router.Navigate.Execute(fixture); fixture.BaseUrl = IntegrationTestUrl.Current; fixture.Token = IntegrationTestUrl.Token; fixture.OkButton.Execute(null); kernel.Get <IScreen>().Router.ViewModelObservable().Skip(1) .Timeout(TimeSpan.FromSeconds(10.0), RxApp.TaskpoolScheduler) .First(); fixture.ErrorMessage.Should().BeNull(); kernel.Get <IScreen>().Router.GetCurrentViewModel().Should().Be(initialPage); }
IKernel createDefaultKernel() { var ret = new StandardKernel(); ret.Bind <IScreen>().ToConstant(this); ret.Bind <ILoginMethods>().ToConstant(this); ret.Bind <IWelcomeViewModel>().To <WelcomeViewModel>(); ret.Bind <IPlayViewModel>().To <PlayViewModel>(); ret.Bind <ISearchViewModel>().To <SearchViewModel>(); ret.Bind <IViewForViewModel <WelcomeViewModel> >().To <WelcomeView>(); ret.Bind <IViewForViewModel <PlayViewModel> >().To <PlayView>(); ret.Bind <IViewForViewModel <SearchViewModel> >().To <SearchView>(); ret.Bind <IViewForViewModel <SongTileViewModel> >().To <SongTileView>().InTransientScope(); #if DEBUG var testBlobCache = new TestBlobCache(); ret.Bind <IBlobCache>().ToConstant(testBlobCache).Named("LocalMachine"); ret.Bind <IBlobCache>().ToConstant(testBlobCache).Named("UserAccount"); ret.Bind <ISecureBlobCache>().ToConstant(testBlobCache); #else ret.Bind <ISecureBlobCache>().ToConstant(BlobCache.Secure); ret.Bind <IBlobCache>().ToConstant(BlobCache.LocalMachine).Named("LocalMachine"); ret.Bind <IBlobCache>().ToConstant(BlobCache.UserAccount).Named("UserAccount"); #endif return(ret); }
public void SucceededLoginSetsTheCurrentAuthenticatedClient() { var kernel = new MoqMockingKernel(); kernel.Bind <IWelcomeViewModel>().To <WelcomeViewModel>(); string expectedUser = "******"; string expectedUrl = "http://bar"; kernel.Bind <Func <string, string, IObservable <Unit> > >() .ToConstant <Func <string, string, IObservable <Unit> > >((url, user) => Observable.Return <Unit>(Unit.Default)) .Named("connectToServer"); var mock = kernel.GetMock <IScreen>(); var routingState = new RoutingState(); mock.Setup(x => x.Router).Returns(routingState); kernel.Bind <IScreen>().ToConstant(mock.Object); var initialPage = kernel.Get <IRoutableViewModel>(); kernel.Get <IScreen>().Router.NavigateAndReset.Execute(initialPage); var cache = new TestBlobCache(null, (IEnumerable <KeyValuePair <string, byte[]> >)null); kernel.Bind <ISecureBlobCache>().ToConstant(cache); var fixture = kernel.Get <IWelcomeViewModel>(); kernel.Get <IScreen>().Router.Navigate.Execute(fixture); bool errorThrown = false; using (UserError.OverrideHandlersForTesting(ex => { errorThrown = true; return(Observable.Return(RecoveryOptionResult.CancelOperation)); })) { fixture.Token = expectedUser; fixture.BaseUrl = expectedUrl; fixture.OkButton.Execute(null); } errorThrown.Should().BeFalse(); kernel.Get <IScreen>().Router.GetCurrentViewModel().Should().Be(initialPage); kernel.GetMock <ILoginMethods>().Verify(x => x.SaveCredentials(expectedUrl, expectedUser), Times.Once()); }
public async Task PostsShouldntBeCached() { var input = @"https://httpbin.org/post"; var blobCache = new TestBlobCache(); var fixture = new CachingHttpScheduler(new HttpScheduler(), blobCache); fixture.Client = new HttpClient(new HttpClientHandler() { AllowAutoRedirect = true, MaxRequestContentBufferSize = 1048576 * 64, }); Assert.Equal(0, blobCache.GetAllKeys().First().Count()); var result = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Post, new Uri(input)), 5); Assert.Equal(0, blobCache.GetAllKeys().First().Count()); Assert.True(result.Item1.IsSuccessStatusCode); }
public async Task PostsWithETagsShouldBeCached() { var input = @"https://httpbin.org/post"; var blobCache = new TestBlobCache(); var fixture = new CachingHttpScheduler(new HttpScheduler(), blobCache); var requestCount = 0; fixture.Client = new HttpClient(new TestHttpMessageHandler(_ => { var response = IntegrationTestHelper.GetResponse("Http", "fixtures", "ResponseWithETag"); requestCount++; if (requestCount > 1) { // Rig the data to be zero - if we see this, we know we didn't // use the cached version var newData = new ByteArrayContent(new byte[0]); foreach (var kvp in response.Content.Headers) { newData.Headers.Add(kvp.Key, kvp.Value); } response.Content = newData; } return(Observable.Return(response)); })); Assert.Equal(0, blobCache.GetAllKeys().First().Count()); Assert.Equal(0, requestCount); var result = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 5); Assert.Equal(1, blobCache.GetAllKeys().First().Count()); Assert.Equal(1, requestCount); Assert.True(result.Item2.Length > 0); var result2 = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 5); Assert.Equal(1, blobCache.GetAllKeys().First().Count()); Assert.Equal(2, requestCount); Assert.True(result2.Item2.Length > 0); }
public void NavigatingToPlayWithoutAPasswordShouldNavigateToLogin() { var kernel = new MoqMockingKernel(); kernel.Bind <IPlayViewModel>().To <PlayViewModel>(); var cache = new TestBlobCache(null, (IEnumerable <KeyValuePair <string, byte[]> >)null); kernel.Bind <ISecureBlobCache>().ToConstant(cache); kernel.GetMock <ILoginMethods>() .Setup(x => x.EraseCredentialsAndNavigateToLogin()).Verifiable(); var router = new RoutingState(); kernel.GetMock <IScreen>().Setup(x => x.Router).Returns(router); var fixture = kernel.Get <IPlayViewModel>(); router.Navigate.Execute(fixture); kernel.GetMock <ILoginMethods>().Verify(x => x.EraseCredentialsAndNavigateToLogin(), Times.Once()); }
public async Task PostsWithETagsShouldBeCached() { var input = @"https://httpbin.org/post"; var blobCache = new TestBlobCache(); var fixture = new CachingHttpScheduler(new HttpScheduler(), blobCache); var requestCount = 0; fixture.Client = new HttpClient(new TestHttpMessageHandler(_ => { var response = IntegrationTestHelper.GetResponse("Http", "fixtures", "ResponseWithETag"); requestCount++; if (requestCount > 1) { // Rig the data to be zero - if we see this, we know we didn't // use the cached version var newData = new ByteArrayContent(new byte[0]); foreach (var kvp in response.Content.Headers) newData.Headers.Add(kvp.Key, kvp.Value); response.Content = newData; } return Observable.Return(response); })); Assert.Equal(0, blobCache.GetAllKeys().First().Count()); Assert.Equal(0, requestCount); var result = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 5); Assert.Equal(1, blobCache.GetAllKeys().First().Count()); Assert.Equal(1, requestCount); Assert.True(result.Item2.Length > 0); var result2 = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 5); Assert.Equal(1, blobCache.GetAllKeys().First().Count()); Assert.Equal(2, requestCount); Assert.True(result2.Item2.Length > 0); }