public void Following_Username()
        {
            var settings = new BeastSaberFeedSettings(BeastSaberFeedName.Following, "TestUser");
            var feed     = new BeastSaberFeed(settings);

            feed.EnsureValidSettings();
            Assert.IsTrue(feed.HasValidSettings);
        }
        public void CuratorRecommended_Username()
        {
            var settings = new BeastSaberFeedSettings(BeastSaberFeedName.CuratorRecommended, "TestUser");
            var feed     = new BeastSaberFeed(settings);

            feed.EnsureValidSettings();
            Assert.IsTrue(feed.HasValidSettings);
        }
        public void Following_NoUsername()
        {
            var settings = new BeastSaberFeedSettings(BeastSaberFeedName.Following);
            var feed     = new BeastSaberFeed(settings);
            var ex       = Assert.ThrowsException <InvalidFeedSettingsException>(() => feed.EnsureValidSettings());

            Console.WriteLine(ex.Message);
            Assert.IsFalse(feed.HasValidSettings);
        }
        public void Success_JSON()
        {
            var reader   = new BeastSaberReader("Zingabopp", DefaultMaxConcurrency);
            var text     = File.ReadAllText("Data\\BeastSaberJsonPage.json");
            Uri uri      = new Uri("https://BeatSaver.com");
            var songList = BeastSaberFeed.GetSongsFromPageText(text, uri, ContentType.JSON, true);

            Assert.IsTrue(songList.Count == 20);
            var firstHash = "a3bbbe2d6f64dfe8324c7098d5c35281d21fd20f".ToUpper();
            var firstUrl  = "https://cdn.beatsaver.com/a3bbbe2d6f64dfe8324c7098d5c35281d21fd20f.zip";

            Assert.IsTrue(songList.First().Hash == firstHash);
            Assert.AreEqual(firstUrl, songList.First().DownloadUri?.ToString());
            var lastHash = "20b9326bd71db4454aba08df06b035ea536322a9".ToUpper();
            var lastUrl  = "https://cdn.beatsaver.com/20b9326bd71db4454aba08df06b035ea536322a9.zip";

            Assert.IsTrue(songList.Last().Hash == lastHash);
            Assert.AreEqual(lastUrl, songList.Last().DownloadUri?.ToString());
            Assert.IsFalse(songList.Any(s => string.IsNullOrEmpty(s.Hash)));
            Assert.IsFalse(songList.Any(s => s.DownloadUri == null));
        }
        public void Success_XML()
        {
            //var reader = new BeastSaberReader("Zingabopp", DefaultMaxConcurrency) { StoreRawData = true };
            var feedSettings = new BeastSaberFeedSettings(BeastSaberFeedName.Following, "Zingabopp");
            var feed         = new BeastSaberFeed(feedSettings);
            var text         = File.ReadAllText("Data\\BeastSaberXMLPage.xml");
            Uri uri          = null;
            var songList     = BeastSaberFeed.GetSongsFromPageText(text, uri, ContentType.XML, true);

            Assert.IsTrue(songList.Count == 50);
            var firstHash        = "74575254ae759f3f836eb521b4b80093ca52cd3d".ToUpper();
            var firstKey         = "56ff";
            var firstLevelAuthor = "Rustic";
            var firstTitle       = "Xilent – Code Blood";
            var firstDownloadUrl = "https://beatsaver.com/api/download/key/56ff";
            var firstUrl         = "https://beatsaver.com/api/download/key/56ff";
            var firstSong        = songList.First();

            Assert.IsTrue(firstSong.Hash == firstHash);
            Assert.IsTrue(firstSong.DownloadUri.ToString() == firstUrl);
            // Raw Data test
            JToken firstRawData = JToken.Parse(firstSong.RawData);

            Assert.IsTrue(firstRawData["Hash"]?.Value <string>().ToUpper() == firstHash);
            Assert.IsTrue(firstRawData["SongKey"]?.Value <string>() == firstKey);
            Assert.IsTrue(firstRawData["LevelAuthorName"]?.Value <string>() == firstLevelAuthor);
            Assert.IsTrue(firstRawData["SongTitle"]?.Value <string>() == firstTitle);
            Assert.IsTrue(firstRawData["DownloadURL"]?.Value <string>() == firstDownloadUrl);



            var lastHash = "e3487474b70d969927e459a1590e93b7ad25a436".ToUpper();
            var lastUrl  = "https://beatsaver.com/api/download/key/5585";

            Assert.IsTrue(songList.Last().Hash == lastHash);
            Assert.IsTrue(songList.Last().DownloadUri.ToString() == lastUrl);
            Assert.IsFalse(songList.Any(s => string.IsNullOrEmpty(s.Hash)));
            Assert.IsFalse(songList.Any(s => s.DownloadUri == null));
        }