public void Can_ParseSongDifficultModes(string xPathToSong, string xPathToDifficultMode, int difficultyLevel,
                                                DifficultyCategory difficultyCategory)
        {
            var doc = new HtmlDocument();

            doc.Load("ez2onDBSample.html");
            var            songNode   = doc.DocumentNode.SelectSingleNode(xPathToSong);
            var            mockLogger = new Mock <ILogger <Ez2OnParser> >();
            Ez2OnParser    parser     = new Ez2OnParser(mockLogger.Object);
            DifficultyMode parsedMode =
                parser.ParseDifficultyModeFromSongNode(songNode, xPathToDifficultMode, difficultyCategory);

            Assert.Equal(difficultyLevel, parsedMode.Level);
            Assert.Equal(difficultyCategory, parsedMode.Category);
        }
        public void Can_ParseDynamicHTML_As_GameTracks(string keyMode, string numOfSongs, int numOfGameTracks)
        {
            string url = $"https://ez2on.co.kr/{keyMode}/?mode=database&pagelist={numOfSongs}";

            var web1        = new HtmlWeb();
            var loadUrlTask = web1.LoadFromWebAsync(url);
            var htmlDoc     = loadUrlTask.Result;
            var xpath       = "/html/body/div[@id='contentmain']/table[@id='EZ2ONContent']/tbody[@id='EZ2DJ_TRACKS']/tr";
            var songNodes   = htmlDoc.DocumentNode.SelectNodes(xpath);

            var         mockLogger = new Mock <ILogger <Ez2OnParser> >();
            Ez2OnParser parser     = new Ez2OnParser(mockLogger.Object);

            List <Ez2OnGameTrack> ez2OnGameTracks = parser.AggregateGameTracksForAllSongs(songNodes);

            Assert.Equal(numOfGameTracks, ez2OnGameTracks.Count);
        }
        public void Can_ParseSongNode_As_ValidGame(string xPathToEz2DjSongNode, string gameTitle)
        {
            var doc = new HtmlDocument();

            doc.Load("ez2onDBSample.html");
            var         songNode   = doc.DocumentNode.SelectSingleNode(xPathToEz2DjSongNode);
            var         mockLogger = new Mock <ILogger <Ez2OnParser> >();
            Ez2OnParser parser     = new Ez2OnParser(mockLogger.Object);
            var         game       = parser.InferGameFromSongAlbum(songNode);

            Assert.Equal(gameTitle, game.Title);
            Assert.False(game.IsDlc);
            GameValidator gameValidator    = new GameValidator();
            var           validationResult = gameValidator.Validate(game);

            Assert.True(validationResult.IsValid);
        }
        public void Can_ParseSongNode_As_ValidSongTitle(string xPath, string songTitle, string composer, string bpm,
                                                        string album, string genre)
        {
            var doc = new HtmlDocument();

            doc.Load("ez2onDBSample.html");
            var         songNode   = doc.DocumentNode.SelectSingleNode(xPath);
            var         mockLogger = new Mock <ILogger <Ez2OnParser> >();
            Ez2OnParser parser     = new Ez2OnParser(mockLogger.Object);
            Song        actualSong = parser.ParseSongFromHtmlNode(songNode);

            Assert.Equal(songTitle, actualSong.Title);
            Assert.Equal(composer, actualSong.Composer);
            Assert.Equal(bpm, actualSong.Bpm);
            Assert.Equal(album, actualSong.Album);
            Assert.Equal(genre, actualSong.Genre);
            SongValidator songValidator     = new SongValidator();
            var           validationResults = songValidator.Validate(actualSong);

            Assert.True(validationResults.IsValid);
        }