songs2slides

A tool that automatically finds song lyrics and creates lyric slideshows
git clone https://git.ashermorgan.net/songs2slides/
Log | Files | Refs | README

commit 4c0f3640793da3e71ea59e92f3d9455b6f5e91a8
parent ed5032617f423e0e1f5810701f1e3a1129ccb365
Author: AsherMorgan <59518073+AsherMorgan@users.noreply.github.com>
Date:   Sun,  6 Sep 2020 12:09:27 -0700

Add unit tests.

Diffstat:
ATests/test_core.py | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 88 insertions(+), 0 deletions(-)

diff --git a/Tests/test_core.py b/Tests/test_core.py @@ -0,0 +1,88 @@ +# Import dependencies +from Songs2Slides import core, config +import unittest +from unittest.mock import patch + + + +class TestCore(unittest.TestCase): + # Test GetLyrics method on cached songs + def test_GetLyrics_cache(self): + # Set cached songs + config.cachedSongs = { + "test-artist-test-song": { + "title": "Test Song", + "artist": "Test Artist", + "lyrics":"test1\ntest2\n\ntest3\ntest4" + } + } + + # Test cached song + lyrics, title, artist = core.GetLyrics("tEsT sOnG", "tEsT aRtIsT") + self.assertEqual(lyrics, "test1\ntest2\n\ntest3\ntest4") + self.assertEqual(title, "Test Song") + self.assertEqual(artist, "Test Artist") + + + + # Test GetLyrics method on songs on the internet + def test_GetLyrics_web(self): + with patch('Songs2Slides.core.requests.get') as mocked_get: + # Initialize mocked_get + mocked_get.return_value.text = b"<!DOCTYPE html><html><head></head><body><h1 class=\"header_with_cover_art-primary_info-title\">Test Song 2</h1><h2><a class=\"header_with_cover_art-primary_info-primary_artist\">Test Artist</a></h2><div class=\"lyrics\"><p><br>\n<br>\n[Verse 1]<br>\nTest1<br>\nTest2<br>\nTest3<br>\nTest4<br>\nTest5<br>\n<br>\n[Verse 2]<br>\nTest10<br>\nTest20<br>\nTest30<br>\nTest40<br>\nTest50<br>\n<br>\n</p></div></body></html>" + + # Get song lyrics + lyrics, title, artist = core.GetLyrics("tEsT sOnG 2", "tEsT aRtIsT") + + # Validate responce + mocked_get.assert_called_with("https://genius.com/test-artist-test-song-2-lyrics") + self.assertEqual(lyrics, "[Verse 1]\nTest1\nTest2\nTest3\nTest4\nTest5\n\n[Verse 2]\nTest10\nTest20\nTest30\nTest40\nTest50") + self.assertEqual(title, "Test Song 2") + self.assertEqual(artist, "Test Artist") + + + + # Test ParseLyrics method + def test_ParseLyrics(self): + # Initialize settings + settings = { + "title-slides": True, + "slide-between-songs": True, + "lines-per-slide": 4, + "remove-parentheses": False, + } + + # Mock core.getLyrics method + with patch('Songs2Slides.core.GetLyrics') as mocked_get: + # Initialize mocked_get + mocked_get.return_value = ("[Verse 1]\nTest1\nTest2\nTest3\nTest4\nTest5 (Test5)\n\n[Verse 2]\nTest10\nTest20\nTest30\nTest40\nTest50 (Test50)", "Test Song", "Test Artist") + + # Test parser + lyrics = core.ParseLyrics("tEsT sOnG 2", "tEsT aRtIsT", settings) + self.assertEqual(lyrics, ["Test Song\nTest Artist", "Test1\nTest2\nTest3\nTest4", "Test5 (Test5)", "Test10\nTest20\nTest30\nTest40", "Test50 (Test50)", ""]) + mocked_get.assert_called_with("tEsT sOnG 2", "tEsT aRtIsT") + + # Test parser without title slide + settings["title-slides"] = False + lyrics = core.ParseLyrics("tEsT sOnG", "tEsT aRtIsT", settings) + self.assertEqual(lyrics, ["Test1\nTest2\nTest3\nTest4", "Test5 (Test5)", "Test10\nTest20\nTest30\nTest40", "Test50 (Test50)", ""]) + + # Test parser without slide at end + settings["slide-between-songs"] = False + lyrics = core.ParseLyrics("tEsT sOnG", "tEsT aRtIsT", settings) + self.assertEqual(lyrics, ["Test1\nTest2\nTest3\nTest4", "Test5 (Test5)", "Test10\nTest20\nTest30\nTest40", "Test50 (Test50)"]) + + # Test parser with 3 lines per slide + settings["lines-per-slide"] = 3 + lyrics = core.ParseLyrics("tEsT sOnG", "tEsT aRtIsT", settings) + self.assertEqual(lyrics, ["Test1\nTest2\nTest3", "Test4\nTest5 (Test5)", "Test10\nTest20\nTest30", "Test40\nTest50 (Test50)"]) + + # Test parser with parentheses remover + settings["remove-parentheses"] = True + lyrics = core.ParseLyrics("tEsT sOnG 2", "tEsT aRtIsT", settings) + self.assertEqual(lyrics, ["Test1\nTest2\nTest3", "Test4\nTest5 ", "Test10\nTest20\nTest30", "Test40\nTest50 "]) + + # Test parser with blank line + mocked_get.return_value = ("[Verse 1]\nTest1\n\n[Instrumental]\n\n[Verse 2]\nTest2", "Test Song", "Test Artist") + lyrics = core.ParseLyrics("tEsT sOnG 2", "tEsT aRtIsT", settings) + self.assertEqual(lyrics, ["Test1", "", "Test2"])