private Torrent BuildTorrent(XmlNode node)
        {
            var name = node["title"]?.InnerText;

            if (_ignoreWords.Any(name.Contains)) return null;

            var downloadUrl = node["enclosure"].Attributes["url"].InnerText;

            var torrent = new Torrent
            {
                Name = name,
                PublicationDate = Convert.ToDateTime(node["pubDate"].InnerText),
                PageUrl = node["guid"].InnerText,
                MagnetUrl = node["torrent:magnetURI"].InnerText,
                DownloadUrl = downloadUrl
            };

            return torrent;
        }
        public void DownloadWantedEpisodes()
        {
            var service = new Mock<ITvService>();
            service.Setup(c => c.GetWantedEpisodes()).Returns(new List<TvEpisode> { new TvEpisode() { SeriesName = "SomeSeries", Season = 1, EpisodeNumber = 1 } });

            var torrent = new Torrent()
            {
                DownloadUrl = "DownloadUrl",
                Name = "Torrent"
            };

            var searchProvider = new Mock<ISearchProvider>();
            searchProvider.Setup(sp => sp.GetTorrent(It.IsAny<string>())).Returns(torrent);

            var webRequester = new Mock<IWebClient>();
            var analyticsService = new Mock<IAnalyticsService>();

            var downloader = new EpisodeDownloader(service.Object, searchProvider.Object, webRequester.Object, new TorrentSearchSettings() { TorrentWatchFolder = "WatchFolder\\" }, analyticsService.Object);
            downloader.DownloadWantedEpisodes().Wait();

            webRequester.Verify(wr => wr.DownloadFileAsync(torrent.DownloadUrl, "WatchFolder\\Torrent.torrent", null), Times.Once);
            service.Verify(s => s.AddOrUpdate(It.IsAny<TvEpisode>()), Times.AtLeastOnce);
            service.Verify(s => s.SaveChanges(), Times.Once);
        }