public void AlbumArtLoaderCachesNewArtTest() { var container = new Athena.IoC.Container(); var model = new AmpacheModel(); container.Register<AmpacheModel>().To(model); var defaultStream = new MemoryStream(); var persistor = Substitute.For<IPersister<AlbumArt>>(); container.Register<IPersister<AlbumArt>>().To(persistor); persistor.IsPersisted(Arg.Any<IEntity>()).Returns(false); var art = new AlbumArt(); persistor.IsPersisted(Arg.Is(art)).Returns(false); int timesCalled = 0; persistor.When(x => x.Persist(Arg.Any<AlbumArt>())).Do( x => { ++timesCalled; }); art.ArtStream = new MemoryStream(new byte[8]); persistor.SelectBy<AmpacheSong>(Arg.Any<AmpacheSong>()).Returns(new [] {art}); var prefs = new UserConfiguration(); prefs.CacheArt = true; model.Configuration = prefs; var target = new AlbumArtLoader(container, defaultStream); var sng = new AmpacheSong(); sng.ArtUrl = "test"; model.PlayingSong = sng; System.Threading.Thread.Sleep(100); Assert.That(model.AlbumArtStream, Is.SameAs(art.ArtStream)); Assert.That(timesCalled, Is.EqualTo(1)); }
public virtual void Start(MemoryStream defaultArtStream) { if(defaultArtStream == null) { throw new ArgumentNullException("defaultArtStream"); } _loader = new AlbumArtLoader(_container, defaultArtStream); _model.Factory = CreateFactory(); var tmpConfig = LoadPersistedConfiguration(); if(tmpConfig == null) { tmpConfig = new UserConfiguration(); tmpConfig.AllowSeeking = true; tmpConfig.CacheArt = true; tmpConfig.Password = string.Empty; tmpConfig.User = string.Empty; tmpConfig.ServerUrl = string.Empty; } _model.Configuration = tmpConfig; if (_model.Configuration.ServerUrl != string.Empty) { var task = new Task(() => _model.Factory.AuthenticateToServer(_model.Configuration)); task.ContinueWith((t) => _model.UserMessage = t.Exception.InnerExceptions.First().Message, TaskContinuationOptions.OnlyOnFaulted) .ContinueWith((t) => _model.PropertyChanged += Handle_modelPropertyChanged, TaskContinuationOptions.NotOnCanceled); task.ContinueWith((t) => _model.UserMessage = _successConnectionMessage, TaskContinuationOptions.NotOnFaulted) .ContinueWith((t) => _model.Playlist = LoadPersistedSongs(), TaskContinuationOptions.NotOnCanceled) .ContinueWith((t) => _model.PropertyChanged += Handle_modelPropertyChanged, TaskContinuationOptions.NotOnCanceled); task.Start(); } else { _model.PropertyChanged += Handle_modelPropertyChanged; } StartAutoShutOff(); }
public void AlbumArtLoaderUsesLoadedArtAfterLoadingTest() { var container = new Athena.IoC.Container(); var model = new AmpacheModel(); container.Register<AmpacheModel>().To(model); var defaultStream = new MemoryStream(); var persistor = Substitute.For<IPersister<AlbumArt>>(); container.Register<IPersister<AlbumArt>>().To(persistor); persistor.IsPersisted(Arg.Any<IEntity>()).Returns(false); var art = new AlbumArt(); art.ArtStream = new MemoryStream(); persistor.SelectBy<AmpacheSong>(Arg.Any<AmpacheSong>()).Returns(new [] {art}); var prefs = new UserConfiguration(); prefs.CacheArt = false; model.Configuration = prefs; var target = new AlbumArtLoader(container, defaultStream); var sng = new AmpacheSong(); sng.ArtUrl = "test"; model.PlayingSong = sng; System.Threading.Thread.Sleep(100); Assert.That(model.AlbumArtStream, Is.SameAs(art.ArtStream)); }
public void AlbumArtLoaderUsesDefaultWhenInitializedTest() { var container = new Athena.IoC.Container(); var model = new AmpacheModel(); container.Register<AmpacheModel>().To(model); var defaultStream = new MemoryStream(); Assert.That(model.AlbumArtStream, Is.Not.SameAs(defaultStream)); var target = new AlbumArtLoader(container, defaultStream); Assert.That(model.AlbumArtStream, Is.SameAs(defaultStream)); }
public void AlbumArtLoaderUsesDefaultArtWhenNoArtAvailableTest() { var container = new Athena.IoC.Container(); var model = new AmpacheModel(); container.Register<AmpacheModel>().To(model); var defaultStream = new MemoryStream(); var target = new AlbumArtLoader(container, defaultStream); var sng = new AmpacheSong(); sng.ArtUrl = string.Empty; model.PlayingSong = sng; System.Threading.Thread.Sleep(100); Assert.That(model.AlbumArtStream, Is.SameAs(defaultStream)); }
public void AlbumArtLoaderUsesDefaultArtWhenLoadingArtTest() { var container = new Athena.IoC.Container(); var model = new AmpacheModel(); container.Register<AmpacheModel>().To(model); var defaultStream = new MemoryStream(); var persistor = Substitute.For<IPersister<AlbumArt>>(); persistor.IsPersisted(Arg.Any<IEntity>()).Returns(false); int timesCalled = 0; persistor.SelectBy<AmpacheSong>(Arg.Any<AmpacheSong>()).Returns(x => { ++timesCalled; Assert.That(model.AlbumArtStream, Is.SameAs(defaultStream)); return Enumerable.Empty<AlbumArt>();}); container.Register<IPersister<AlbumArt>>().To(persistor); var target = new AlbumArtLoader(container, defaultStream); var sng = new AmpacheSong(); sng.ArtUrl = "test"; model.PlayingSong = sng; System.Threading.Thread.Sleep(100); Assert.That(timesCalled, Is.EqualTo(1)); }