public void When_connected_to_the_network_should_check_feeds_and_download_new_item()
        {
            FeedsViewModel.IsNetworkAvailable = () => true;

            var gotNewItems = false;
            var feed = new Mock<Feed>();
            feed.CallBase = true;
            feed.Setup(f => f.Name).Returns("The Feed");
            feed.Object.DownloadedGuids = new[] { "item-1", "item-2" };

            var mediaUri = new Uri("http://blockedcontent/media.mp3");
            var feedItem = new FeedItem("new-item", "The Media", mediaUri);
            feed.Setup(f => f.GetNewItemsInFeed()).Callback(() => gotNewItems = true).Returns(new [] { feedItem });
            var feedRepository = new Mock<IFeedRepository>();
            feedRepository.Setup(f => f.Feeds).Returns(new ObservableCollection<Feed> { feed.Object });

            var library = new Mock<ILibrary>();

            var viewModel = new FeedsViewModel(library.Object, feedRepository.Object);
            viewModel.RefreshFeeds(null);

            Assert.IsTrue(gotNewItems);
            library.Verify(l => l.AddNewMediaItem("The Feed: The Media", mediaUri));
            feedRepository.Verify(fr => fr.Update(feed.Object));
            Assert.AreEqual(string.Join("|", new[] { "item-1", "item-2", "new-item" }), string.Join("|", feed.Object.DownloadedGuids));
        }
        public void When_not_connected_to_the_network_should_not_download_feeds()
        {
            FeedsViewModel.IsNetworkAvailable = () => false;

            var gotNewItems = false;
            var feed = new Mock<Feed>();
            feed.Setup(f => f.GetNewItemsInFeed()).Callback(() => gotNewItems = true);
            var feedRepository = new Mock<IFeedRepository>();
            feedRepository.Setup(f => f.Feeds).Returns(new ObservableCollection<Feed> { feed.Object });

            var viewModel = new FeedsViewModel(new Mock<ILibrary>().Object, feedRepository.Object);
            viewModel.RefreshFeeds(null);

            Assert.IsFalse(gotNewItems);
        }