public void Search_Default_LimitedSongs() { BeatSaverReader reader = new BeatSaverReader() { StoreRawData = true }; int maxSongs = 10; BeatSaverSearchType searchType = BeatSaverSearchType.name; string criteria = "Believer"; BeatSaverSearchQuery query = new SearchQueryBuilder(searchType, criteria).GetQuery(); BeatSaverFeedSettings settings = new BeatSaverFeedSettings((int)BeatSaverFeedName.Search) { MaxSongs = maxSongs, SearchQuery = query }; FeedResult result = reader.GetSongsFromFeed(settings); Assert.IsTrue(result.Count > 0); Assert.IsTrue(result.Count <= 10); int expectedPages = ExpectedPagesForSongs(result.Count); Assert.AreEqual(expectedPages, result.PagesChecked); foreach (ScrapedSong song in result.Songs.Values) { Console.WriteLine($"{song.Name} by {song.LevelAuthorName}, {song.Hash}"); } }
public void Latest() { var settings = new BeatSaverFeedSettings(BeatSaverFeedName.Latest); var feed = new BeatSaverFeed(settings); feed.EnsureValidSettings(); Assert.IsTrue(feed.HasValidSettings); }
public void Success_Authors_LimitedSongs() { BeatSaverReader reader = new BeatSaverReader() { StoreRawData = true }; string[] authorList = new string[] { "BlackBlazon", "greatyazer", "joetastic" }; Dictionary <string, ScrapedSong> songList = new Dictionary <string, ScrapedSong>(); int maxSongs = 59; int maxPages = 10; SearchQueryBuilder queryBuilder = new SearchQueryBuilder(BeatSaverSearchType.author, null); foreach (string author in authorList) { queryBuilder.Criteria = author; BeatSaverFeedSettings settings = new BeatSaverFeedSettings((int)BeatSaverFeedName.Author) { SearchQuery = queryBuilder.GetQuery(), MaxSongs = maxSongs, MaxPages = maxPages }; FeedResult songsByAuthor = reader.GetSongsFromFeed(settings); Assert.IsTrue(songsByAuthor.Count > 0); Assert.IsTrue(songsByAuthor.Count <= maxSongs); int expectedPages = ExpectedPagesForSongs(songsByAuthor.Count); Assert.IsTrue(expectedPages <= songsByAuthor.PagesChecked); foreach (KeyValuePair <string, ScrapedSong> song in songsByAuthor.Songs) { songList.TryAdd(song.Key, song.Value); } } IEnumerable <string> detectedAuthors = songList.Values.Select(s => s.LevelAuthorName.ToLower()).Distinct(); foreach (KeyValuePair <string, ScrapedSong> song in songList) { Assert.IsTrue(song.Value.DownloadUri != null); Assert.IsTrue(authorList.Any(a => a.ToLower() == song.Value.LevelAuthorName.ToLower())); } foreach (string author in authorList) { Assert.IsTrue(songList.Any(s => s.Value.LevelAuthorName.ToLower() == author.ToLower())); } // BlackBlazon check string blazonHash = "58de2d709a45b68fdb1dbbfefb187f59f629bfc5".ToUpper(); ScrapedSong blazonSong = songList[blazonHash]; Assert.IsTrue(blazonSong != null); Assert.IsTrue(blazonSong.DownloadUri != null); // GreatYazer check string songHash = "bf8c016dc6b9832ece3030f05277bbbe67db790d".ToUpper(); ScrapedSong yazerSong = songList[songHash]; Assert.IsTrue(yazerSong != null); Assert.IsTrue(yazerSong.DownloadUri != null); var checkedPages = songList.Values.Select(s => s.SourceUri.OriginalString).Distinct().ToList(); checkedPages.ForEach(p => Console.WriteLine(p)); }
public void Search_NullQuery() { var settings = new BeatSaverFeedSettings(BeatSaverFeedName.Search); var feed = new BeatSaverFeed(settings); var ex = Assert.ThrowsException <InvalidFeedSettingsException>(() => feed.EnsureValidSettings()); Console.WriteLine(ex.Message); Assert.IsFalse(feed.HasValidSettings); }
public void Followings_Exception_WrongSettingsType() { var reader = GetDefaultReader(); int maxSongs = 60; var settings = new BeatSaverFeedSettings((int)BeatSaverFeedName.Author) { MaxSongs = maxSongs }; Assert.ThrowsException <InvalidCastException>(() => reader.GetSongsFromFeed(settings)); }
public void Search_HasQuery() { var settings = new BeatSaverFeedSettings(BeatSaverFeedName.Search); var queryBuilder = new SearchQueryBuilder(BeatSaverSearchType.all, "test"); settings.SearchQuery = queryBuilder.GetQuery(); var feed = new BeatSaverFeed(settings); feed.EnsureValidSettings(); Assert.IsTrue(feed.HasValidSettings); }
public void Author_EmptyCriteria() { var settings = new BeatSaverFeedSettings(BeatSaverFeedName.Author); var queryBuilder = new SearchQueryBuilder(BeatSaverSearchType.author, ""); settings.SearchQuery = queryBuilder.GetQuery(); var feed = new BeatSaverFeed(settings); var ex = Assert.ThrowsException <InvalidFeedSettingsException>(() => feed.EnsureValidSettings()); Console.WriteLine(ex.Message); Assert.IsFalse(feed.HasValidSettings); }
public void Success_Filtered360() { BeatSaverReader reader = new BeatSaverReader() { StoreRawData = true }; int maxSongs = 20; int maxPages = 30; BeatSaverFeedSettings settings = new BeatSaverFeedSettings((int)BeatSaverFeedName.Latest) { MaxSongs = maxSongs, MaxPages = maxPages }; Progress <ReaderProgress> progress = new Progress <ReaderProgress>(p => { if (p.SongCount > 0) { Console.WriteLine($"Progress: Page {p.CurrentPage} found {p.SongCount} songs."); } else { Console.WriteLine($"Progress: Page {p.CurrentPage} did not have any songs."); } }); bool stopAfter(ScrapedSong song) { DateTime uploadDate = song.JsonData["uploaded"].Value <DateTime>(); bool shouldStop = uploadDate < (DateTime.Now - TimeSpan.FromDays(5)); if (shouldStop) { Console.WriteLine($"StopWhenAny reached with {song.Key} ({uploadDate.ToString()})"); } return(shouldStop); } Func <ScrapedSong, bool> filter = SongFeedReaders.Filtering.BuiltInFilters.ThreeSixtyDegree; settings.Filter = filter; settings.StopWhenAny = stopAfter; FeedResult result = reader.GetSongsFromFeedAsync(settings, progress, CancellationToken.None).Result; Assert.IsTrue(result.Count > 0 && result.Count < maxPages * settings.SongsPerPage); int expectedPages = ExpectedPagesForSongs(result.Count); Assert.IsTrue(expectedPages <= result.PagesChecked); Console.WriteLine($"----------------"); foreach (ScrapedSong song in result.Songs.Values) { Console.WriteLine($"{song.Name} by {song.LevelAuthorName}, {song.Hash}"); } }
public override IFeedSettings ToFeedSettings() { BeatSaverFeedSettings settings = new BeatSaverFeedSettings((int)BeatSaverFeedName.Latest) { MaxSongs = this.MaxSongs }; settings.Filter = song => { return(song.JsonData["metadata"]["difficulties"]["expertPlus"].ToObject <bool>()); }; return(settings); }
public void Success_Authors_LimitedSongs() { var reader = new BeatSaverReader() { StoreRawData = true }; var authorList = new string[] { "BlackBlazon", "greatyazer", "joetastic" }; var songList = new Dictionary <string, ScrapedSong>(); int maxSongs = 59; foreach (var author in authorList) { var settings = new BeatSaverFeedSettings((int)BeatSaverFeed.Author) { Criteria = author, MaxSongs = maxSongs }; var songsByAuthor = reader.GetSongsFromFeed(settings); Assert.IsTrue(songsByAuthor.Count > 0); Assert.IsTrue(songsByAuthor.Count <= maxSongs); int expectedPages = ExpectedPagesForSongs(songsByAuthor.Count); Assert.IsTrue(expectedPages <= songsByAuthor.PagesChecked); foreach (var song in songsByAuthor.Songs) { songList.TryAdd(song.Key, song.Value); } } var detectedAuthors = songList.Values.Select(s => s.MapperName.ToLower()).Distinct(); foreach (var song in songList) { Assert.IsTrue(song.Value.DownloadUri != null); Assert.IsTrue(authorList.Any(a => a.ToLower() == song.Value.MapperName.ToLower())); } foreach (var author in authorList) { Assert.IsTrue(songList.Any(s => s.Value.MapperName.ToLower() == author.ToLower())); } // BlackBlazon check var blazonHash = "58de2d709a45b68fdb1dbbfefb187f59f629bfc5".ToUpper(); var blazonSong = songList[blazonHash]; Assert.IsTrue(blazonSong != null); Assert.IsTrue(blazonSong.DownloadUri != null); // GreatYazer check var songHash = "bf8c016dc6b9832ece3030f05277bbbe67db790d".ToUpper(); var yazerSong = songList[songHash]; Assert.IsTrue(yazerSong != null); Assert.IsTrue(yazerSong.DownloadUri != null); }
public void UnusedQuery() { var querylessFeeds = new BeatSaverFeedName[] { BeatSaverFeedName.Latest, BeatSaverFeedName.Plays }; var queryBuilder = new SearchQueryBuilder(BeatSaverSearchType.all, "test"); foreach (var feedType in querylessFeeds) { var settings = new BeatSaverFeedSettings(feedType); settings.SearchQuery = queryBuilder.GetQuery(); var feed = new BeatSaverFeed(settings); feed.EnsureValidSettings(); Assert.IsTrue(feed.HasValidSettings); } }
public void GetUriForDate_Before() { string dateStr = "2021-08-02T20:36:22.804Z"; DateTime.Parse(dateStr); DateTime dateTime = DateTime.Parse(dateStr); FeedDate feedDate = new FeedDate(dateTime, DateDirection.Before); BeatSaverFeedSettings settings = new BeatSaverFeedSettings(BeatSaverFeedName.Latest); BeatSaverFeed feed = new BeatSaverFeed(settings); string expectedUrl = $"https://api.beatsaver.com/maps/latest?automapper=false&before={dateStr}"; string actualUrl = feed.GetUriForDate(feedDate).ToString(); Assert.AreEqual(expectedUrl, actualUrl); }
public void GetSongsFromFeed_Hot_Test() { var reader = new BeatSaverReader() { StoreRawData = true }; var settings = new BeatSaverFeedSettings((int)BeatSaverFeed.Hot) { MaxSongs = 50 }; var songList = reader.GetSongsFromFeed(settings); Assert.IsTrue(songList.Count == settings.MaxSongs); foreach (var song in songList.Values) { Console.WriteLine($"{song.SongName} by {song.MapperName}, {song.Hash}"); } }
public void CancelledInProgress() { BeatSaverReader reader = new BeatSaverReader() { StoreRawData = true }; var cts = new CancellationTokenSource(1000); int maxSongs = 50; BeatSaverFeedSettings settings = new BeatSaverFeedSettings((int)BeatSaverFeedName.Plays) { MaxSongs = maxSongs }; FeedResult result = reader.GetSongsFromFeed(settings, cts.Token); Assert.IsFalse(result.Successful); Assert.IsTrue(result.Count > 0); Assert.AreEqual(FeedResultError.Cancelled, result.ErrorCode); cts.Dispose(); }
public void Success_Downloads() { var reader = new BeatSaverReader() { StoreRawData = true }; int maxSongs = 50; var settings = new BeatSaverFeedSettings((int)BeatSaverFeed.Downloads) { MaxSongs = maxSongs }; var result = reader.GetSongsFromFeed(settings); Assert.IsTrue(result.Count == settings.MaxSongs); int expectedPages = ExpectedPagesForSongs(result.Count); Assert.AreEqual(expectedPages, result.PagesChecked); foreach (var song in result.Songs.Values) { Console.WriteLine($"{song.SongName} by {song.MapperName}, {song.Hash}"); } }
public void Success_Newest() { BeatSaverReader reader = new BeatSaverReader() { StoreRawData = true }; int maxSongs = 55; BeatSaverFeedSettings settings = new BeatSaverFeedSettings((int)BeatSaverFeedName.Latest) { MaxSongs = maxSongs }; FeedResult result = reader.GetSongsFromFeed(settings); Assert.AreEqual(settings.MaxSongs, result.Count); int expectedPages = ExpectedPagesForSongs(result.Count); Assert.IsTrue(expectedPages <= result.PagesChecked); foreach (ScrapedSong song in result.Songs.Values) { Console.WriteLine($"{song.Name} by {song.LevelAuthorName}, {song.Hash}"); } }
public void Search_Default_LimitedSongs() { var reader = new BeatSaverReader() { StoreRawData = true }; int maxSongs = 10; var settings = new BeatSaverFeedSettings((int)BeatSaverFeed.Search) { MaxSongs = maxSongs, Criteria = "Believer" }; var result = reader.GetSongsFromFeed(settings); Assert.IsTrue(result.Count > 0); Assert.IsTrue(result.Count <= 10); int expectedPages = ExpectedPagesForSongs(result.Count); Assert.AreEqual(expectedPages, result.PagesChecked); foreach (var song in result.Songs.Values) { Console.WriteLine($"{song.SongName} by {song.MapperName}, {song.Hash}"); } }
public void GetSongsFromFeed_Authors_Test() { var reader = new BeatSaverReader() { StoreRawData = true }; var authorList = new string[] { "BlackBlazon", "greatyazer" }; var settings = new BeatSaverFeedSettings((int)BeatSaverFeed.Author) { Authors = authorList, MaxSongs = 59 }; var songsByAuthor = reader.GetSongsFromFeed(settings); var detectedAuthors = songsByAuthor.Values.Select(s => s.MapperName.ToLower()).Distinct(); foreach (var song in songsByAuthor) { Assert.IsTrue(song.Value.DownloadUri != null); Assert.IsTrue(authorList.Any(a => a.ToLower() == song.Value.MapperName.ToLower())); } foreach (var author in authorList) { Assert.IsTrue(songsByAuthor.Any(s => s.Value.MapperName.ToLower() == author.ToLower())); } // BlackBlazon check var blazonHash = "58de2d709a45b68fdb1dbbfefb187f59f629bfc5".ToUpper(); var blazonSong = songsByAuthor[blazonHash]; Assert.IsTrue(blazonSong != null); Assert.IsTrue(blazonSong.DownloadUri != null); // GreatYazer check var songHash = "bf8c016dc6b9832ece3030f05277bbbe67db790d".ToUpper(); var yazerSong = songsByAuthor[songHash]; Assert.IsTrue(yazerSong != null); Assert.IsTrue(yazerSong.DownloadUri != null); }
public void Search_User() { var reader = new BeatSaverReader() { StoreRawData = true }; int maxSongs = 10; string criteria = "19F2879D11A91B51A5C090D63471C3E8D9B7AEE3"; var searchType = BeatSaverSearchType.hash; var settings = new BeatSaverFeedSettings((int)BeatSaverFeed.Search) { MaxSongs = maxSongs, Criteria = criteria, SearchType = searchType }; var result = reader.GetSongsFromFeed(settings); Assert.AreEqual(1, result.Count); int expectedPages = ExpectedPagesForSongs(result.Count); Assert.AreEqual(expectedPages, result.PagesChecked); foreach (var song in result.Songs.Values) { Console.WriteLine($"{song.SongName} by {song.MapperName}, {song.Hash}"); } }