static ISearchViewModel setupStandardFixture(MoqMockingKernel kernel, IRoutingState router = null) { router = router ?? new RoutingState(); kernel.Bind <ISearchViewModel>().To <SearchViewModel>(); kernel.Bind <IBlobCache>().To <TestBlobCache>().Named("UserAccount"); kernel.Bind <IBlobCache>().To <TestBlobCache>().Named("LocalMachine"); kernel.GetMock <IPlayApi>().Setup(x => x.Search("Foo")) .Returns(Observable.Return(new List <Song>() { Fakes.GetSong() })) .Verifiable(); kernel.GetMock <ILoginMethods>().Setup(x => x.CurrentAuthenticatedClient).Returns(kernel.Get <IPlayApi>()); kernel.GetMock <IScreen>().Setup(x => x.Router).Returns(router); var img = new BitmapImage(); kernel.GetMock <IPlayApi>().Setup(x => x.FetchImageForAlbum(It.IsAny <Song>())) .Returns(Observable.Return(img)) .Verifiable(); RxApp.ConfigureServiceLocator((t, s) => kernel.Get(t, s), (t, s) => kernel.GetAll(t, s)); var fixture = kernel.Get <ISearchViewModel>(); return(fixture); }
IPlayViewModel setupStandardMock(MoqMockingKernel kernel, IRoutingState router, Action extraSetup = null) { kernel.Bind <IPlayViewModel>().To <PlayViewModel>(); var playApi = kernel.GetMock <IPlayApi>(); playApi.Setup(x => x.ListenUrl()).Returns(Observable.Never <string>()); playApi.Setup(x => x.ConnectToSongChangeNotifications()).Returns(Observable.Never <Unit>()); playApi.Setup(x => x.NowPlaying()).Returns(Observable.Return(Fakes.GetSong())); playApi.Setup(x => x.Queue()).Returns(Observable.Return(Fakes.GetAlbum())); playApi.Setup(x => x.FetchImageForAlbum(It.IsAny <Song>())).Returns(Observable.Return <BitmapImage>(null)); kernel.GetMock <IScreen>().Setup(x => x.Router).Returns(router); kernel.GetMock <ILoginMethods>() .Setup(x => x.EraseCredentialsAndNavigateToLogin()) .Callback(() => router.Navigate.Execute(kernel.Get <IWelcomeViewModel>())); kernel.GetMock <ILoginMethods>() .Setup(x => x.CurrentAuthenticatedClient) .Returns(kernel.Get <IPlayApi>()); if (extraSetup != null) { extraSetup(); } RxApp.ConfigureServiceLocator((t, s) => kernel.Get(t, s), (t, s) => kernel.GetAll(t, s)); return(kernel.Get <IPlayViewModel>()); }
public void QueuingASongShouldCallPlayApi() { var kernel = new MoqMockingKernel(); var song = Fakes.GetSong(); var fixture = setupStandardFixture(song, kernel); fixture.QueueSong.Execute(null); kernel.GetMock <IPlayApi>().Verify(x => x.QueueSong(It.IsAny <Song>())); }
public void WhenPusherFiresWeShouldUpdateTheAlbum() { var kernel = new MoqMockingKernel(); var router = new RoutingState(); var pusher = new Subject <Unit>(); int nowPlayingExecuteCount = 0; var fixture = setupStandardMock(kernel, router, () => { kernel.GetMock <IPlayApi>().Setup(x => x.ConnectToSongChangeNotifications()).Returns(pusher); kernel.GetMock <IPlayApi>().Setup(x => x.NowPlaying()) .Callback(() => nowPlayingExecuteCount++).Returns(Observable.Return(Fakes.GetSong())); }); router.Navigate.Execute(fixture); nowPlayingExecuteCount.Should().Be(1); pusher.OnNext(Unit.Default); nowPlayingExecuteCount.Should().Be(2); }
public void QueueingAlbumShouldCallQueueSongForEverySong() { var kernel = new MoqMockingKernel(); var song = Fakes.GetSong(); var fakeAlbum = Fakes.GetAlbum(); var queuedSongs = new List <Song>(); var fixture = setupStandardFixture(song, kernel); kernel.GetMock <IPlayApi>().Setup(x => x.QueueSong(It.IsAny <Song>())) .Callback <Song>(queuedSongs.Add) .Returns(Observable.Return(Unit.Default)) .Verifiable(); fixture.QueueAlbum.Execute(null); this.Log().Info("Queued songs: {0}", String.Join(",", queuedSongs.Select(x => x.name))); queuedSongs.Count.Should().Be(fakeAlbum.Count); fakeAlbum.Zip(queuedSongs, (e, a) => e.id == a.id).All(x => x).Should().BeTrue(); }
public void TheTimerShouldFireIfPusherDoesnt() { (new TestScheduler()).With(sched => { var kernel = new MoqMockingKernel(); var router = new RoutingState(); var pusher = new Subject <Unit>(); int nowPlayingExecuteCount = 0; var fixture = setupStandardMock(kernel, router, () => { kernel.GetMock <IPlayApi>().Setup(x => x.ConnectToSongChangeNotifications()).Returns(pusher); kernel.GetMock <IPlayApi>().Setup(x => x.NowPlaying()) .Callback(() => nowPlayingExecuteCount++).Returns(Observable.Return(Fakes.GetSong())); }); router.Navigate.Execute(fixture); sched.AdvanceToMs(10); nowPlayingExecuteCount.Should().Be(1); sched.AdvanceToMs(1000); nowPlayingExecuteCount.Should().Be(1); pusher.OnNext(Unit.Default); sched.AdvanceToMs(1010); nowPlayingExecuteCount.Should().Be(2); // NB: The 2 minute timer starts after the last Pusher notification // make sure we *don't* tick. sched.AdvanceToMs(2 * 60 * 1000 + 10); nowPlayingExecuteCount.Should().Be(2); sched.AdvanceToMs(3 * 60 * 1000 + 1500); nowPlayingExecuteCount.Should().Be(3); }); }