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));
        }
Exemple #2
0
        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));
        }