def reset_default_tags(self) -> None: audio_file = \ self.path_to_test_files + self.file_delimit + "audio_file_1.mp3" ba_audio = base_audio.BaseAudio() ba_audio.load_track(audio_file) ba_audio.set_tag("artist", "Dee Yan-Key") ba_audio.set_tag("album", "little night thoughts") ba_audio.set_tag("genre", "electroswing") ba_audio.set_tag("year", 2019) ba_audio.set_tag("tracknumber", 1) ba_audio.set_tag("title", "gloomy sky") ba_audio.write_tags() audio_file = \ self.path_to_test_files + self.file_delimit + "audio_file_2.mp3" ba_audio = base_audio.BaseAudio() ba_audio.load_track(audio_file) ba_audio.set_tag("artist", "Siddhartha Corsus") ba_audio.set_tag("album", "Fragments of Light") ba_audio.set_tag("tracknumber", 1) ba_audio.set_tag("title", "Let Go of Time (and Time Will Let Go of You)") audio_file = \ self.path_to_test_files + self.file_delimit + self.audio_file_3 ba_audio = base_audio.BaseAudio() ba_audio.load_track(audio_file) ba_audio.set_tag("artist", "Unknown") ba_audio.set_tag("album", "Unknown") ba_audio.set_tag("tracknumber", 1) ba_audio.set_tag("title", "Unknown") ba_audio.write_tags()
def test_regex_from_file_clean_and_capitalize(self) -> None: ''' When passing a regex expression to extract as is the track title from the actual audio file, using from-file option 1. Pass a valid text file with option parse-title-capitalize. 2. Pass a valid regex expression. 3. The tracktitle tag should be names accordingly. ''' pattern = "(?<=\\d\\d).+(?=.mp3)" audio_file = self.path_to_test_files + self.file_delimit +\ self.audio_file_3 tags_and_values = { "parse-title-clean": pattern, "file": audio_file, } options = self.to_options(**tags_and_values) test_file_txt = self.write_to_test_text_file(*options) runner = CliRunner() result = runner.invoke(cli, ["--from-file", test_file_txt]) expected = "Audio Test File 3" self.assertEqual(result.exit_code, 0) audio = base_audio.BaseAudio() audio.load_track(audio_file) self.assertEqual(audio.get_tag("tracktitle"), expected)
def test_regex_number_from_file(self) -> None: ''' When passing a regex to extract track number from a valid file. 1. Given a valid audio file. 2. and a valid regex pattern. 3. Extract the track number as a number type. ''' pattern = "\\d+(?=.+\\.mp3)" audio_file =\ self.path_to_test_files +\ self.file_delimit +\ self.audio_file_3 expected = 1 tags_and_values = { "parse-track_number": pattern, "file": audio_file, } options = self.to_options(**tags_and_values) test_file_txt = self.write_to_test_text_file(*options) runner = CliRunner() result = runner.invoke(cli, ["--from-file", test_file_txt]) self.assertEqual(result.exit_code, 0) audio = base_audio.BaseAudio() audio.load_track(audio_file) self.assertEqual(audio.get_tag("tracknumber"), expected)
def test_extract_title_cleanup_and_capitalize(self) -> None: ''' When passing a regex expression to extract, cleanup and Capitalize track title from the actual audio file, 1. Pass a valid audio file. 2. Pass a valid regex expression. 3. The tracktitle tag should be named without "-", "_" and multiples white spaces. ''' runner = CliRunner() audio_file = self.path_to_test_files + self.file_delimit +\ self.audio_file_3 pattern = "(?<=\\d\\d).+(?=.mp3)" result = runner.invoke(cli, ["--file", audio_file, "--parse-title-clean", pattern] ) expected = "Audio Test File 3" self.assertEqual(result.exit_code, 0) audio = base_audio.BaseAudio() audio.load_track(audio_file) self.assertEqual(audio.get_tag("tracktitle"), expected)
def test_run_cli_all_files(self): ''' When attempting to change the meta tags of all valid audio files in a directory: 1. Pass a valid directory. 2. Attempt to change the artist of all files. 3. Check for changes. ''' audio_files_path = self.path_to_test_files audio_file_1 = \ self.path_to_test_files + self.file_delimit + "audio_file_1.mp3" audio_file_2 = \ self.path_to_test_files + self.file_delimit + "audio_file_2.mp3" new_artist = "Lucifer" runner = CliRunner() result = runner.invoke(cli, ["--files-directory", audio_files_path, "--artist", new_artist ]) self.assertEqual(result.exit_code, 0) audio = base_audio.BaseAudio() audio.load_track(audio_file_1) self.assertEqual(audio.get_tag("artist"), new_artist) audio.load_track(audio_file_2) self.assertEqual(audio.get_tag("artist"), new_artist)
def test_run_cli_set_tracktitle_and_album_and_genre(self): ''' When attempting to tun the CLI and set tracktitle tag: 1. Pass a valid audio file. 2. set the 'tracktitle', 'album', and 'genre' tags. 3. check for changes. ''' audio_file = \ self.path_to_test_files + self.file_delimit + "audio_file_1.mp3" runner = CliRunner() new_title = "Perreando con Lucifer" new_album = "Satanas se Fue de Rumba" new_genre = "Techno-Cumbia Norteña Progresiva" result = runner.invoke(cli, ["--file", audio_file, "--tracktitle", new_title, "--album", new_album, "--genre", new_genre]) self.assertEqual(result.exit_code, 0) ba_audio = base_audio.BaseAudio() ba_audio.load_track(audio_file) self.assertEqual(ba_audio.get_tag("tracktitle"), new_title) self.assertEqual(ba_audio.get_tag("album"), new_album) self.assertEqual(ba_audio.get_tag("genre"), new_genre) audio_file = \ self.path_to_test_files + self.file_delimit + "audio_file_1.mp3" runner = CliRunner() new_title = "Perreando con Lucifer" result = runner.invoke(cli, ["--file", audio_file, "--tracktitle", new_title]) self.assertEqual(result.exit_code, 0)
def test_regex_number_from_file_directory(self) -> None: ''' When passing a regex to extract track number from a valid file. 1. Given a valid audio file. 2. and a valid regex pattern. 3. Extract the track number as a number type. ''' pattern = "(?<=_)\\d+(?=\\.mp3)" # directory and individual files audio_directory = self.path_to_test_files first_f =\ self.path_to_test_files +\ self.file_delimit +\ self.audio_file_3 second_f =\ self.path_to_test_files +\ self.file_delimit +\ self.audio_file_1 third_f =\ self.path_to_test_files +\ self.file_delimit +\ self.audio_file_2 # expected track numbers expected1 = 3 expected2 = 1 expected3 = 2 # options for runner tags_and_values = { "parse-track-number": pattern, "files-directory": audio_directory, } options = self.to_options(**tags_and_values) test_file_txt = self.write_to_test_text_file(*options) # runner runner = CliRunner() result = runner.invoke(cli, ["--from-file", test_file_txt]) self.assertEqual(result.exit_code, 0) audio = base_audio.BaseAudio() # expected 1 audio.load_track(first_f) self.assertEqual(audio.get_tag("tracknumber"), expected1) # expected 2 audio.load_track(second_f) self.assertEqual(audio.get_tag("tracknumber"), expected2) # expected 3 audio.load_track(third_f) self.assertEqual(audio.get_tag("tracknumber"), expected3)
def test_run_cli_from_text_file_multiple_files(self): ''' When attempting to set tags to multiple files in a directory from a text file 1. Load a text file with the expected tags. Pointing to a directory with multiple audio files. 2. The syntax should be as follows: option=value option=value 3. All options remain the same, just without the first two hyphens at the beginning, so --file becomes file and --files-directory becomes files-directory. 4. Only one option per line. ''' tags_and_values = { "artist": "Los Luciferinos", "album": "Rumbeando en el Noveno Infierno", "files-directory": self.path_to_test_files, "year": 1984 } options = self.to_options(**tags_and_values) test_file_txt = self.write_to_test_text_file(*options) runner = CliRunner() result = runner.invoke(cli, ["--from-file", test_file_txt]) self.assertEqual(result.exit_code, 0) audio = base_audio.BaseAudio() audio.load_track(tags_and_values["files-directory"] + self.file_delimit + "audio_file_1.mp3") for key in tags_and_values: if key == "files-directory": continue self.assertEqual(audio.get_tag(key), tags_and_values[key]) audio.load_track(tags_and_values["files-directory"] + self.file_delimit + "audio_file_2.mp3") for key in tags_and_values: if key == "files-directory": continue self.assertEqual(audio.get_tag(key), tags_and_values[key])
def test_regex_number_directory(self) -> None: ''' When passing a regex to extract track number from a directory with valid audio files. 1. Given a directory with valid audio files. 2. and a valid regex pattern. 3. Extract the track number as a number type. ''' pattern = "(?<=_)\\d+(?=\\.mp3)" # directory and individual files audio_directory = self.path_to_test_files first_f =\ self.path_to_test_files +\ self.file_delimit +\ self.audio_file_3 second_f =\ self.path_to_test_files +\ self.file_delimit +\ self.audio_file_1 third_f =\ self.path_to_test_files +\ self.file_delimit +\ self.audio_file_2 # expected track numbers expected1 = 3 expected2 = 1 expected3 = 2 runner = CliRunner() result = runner.invoke(cli, ["--files-directory", audio_directory, "--parse-track-number", pattern]) self.assertEqual(result.exit_code, 0) audio = base_audio.BaseAudio() # expected 1 audio.load_track(first_f) self.assertEqual(audio.get_tag("tracknumber"), expected1) # expected 2 audio.load_track(second_f) self.assertEqual(audio.get_tag("tracknumber"), expected2) # expected 3 audio.load_track(third_f) self.assertEqual(audio.get_tag("tracknumber"), expected3)
def test_run_cli_set_tracktitle(self): ''' When attempting to tun the CLI and set tracktitle tag: 1. Pass a valid audio file. 2. set the 'tracktitle' tag. 3. check for changes. ''' audio_file = \ self.path_to_test_files + self.file_delimit + "audio_file_1.mp3" runner = CliRunner() new_title = "Perreando con Lucifer" result = runner.invoke(cli, ["--file", audio_file, "--tracktitle", new_title]) self.assertEqual(result.exit_code, 0) ba_audio = base_audio.BaseAudio() ba_audio.load_track(audio_file) self.assertEqual(ba_audio.get_tag("tracktitle"), new_title)
def base_audio_wrapper(file, **tags_to_set): ''' send and write tags to file ''' try: audio_file = base_audio.BaseAudio() audio_file.load_track(file) audio_file.set_tags(**tags_to_set) audio_file.write_tags() except NotImplementedError as nie: print(nie) print(f"Error while loading file:{file}") exit(1) except TypeError as te: print(te) exit(1) except Exception as e: print(e) exit(1)
def test_regex_number_file(self) -> None: ''' When passing a regex to extract track number from a valid file. 1. Given a valid audio file. 2. and a valid regex pattern. 3. Extract the track number as a number type. ''' pattern = "\\d+(?=.+\\.mp3)" audio_file =\ self.path_to_test_files +\ self.file_delimit +\ self.audio_file_3 expected = 1 runner = CliRunner() result = runner.invoke(cli, ["--file", audio_file, "--parse-track-number", pattern]) self.assertEqual(result.exit_code, 0) audio = base_audio.BaseAudio() audio.load_track(audio_file) self.assertEqual(audio.get_tag("tracknumber"), expected)
def test_extract_title_title_as_is(self) -> None: ''' When passing a regex expression to extract as is the track title from the actual audio file, 1. Pass a valid audio file. 2. Pass a valid regex expression. 3. The tracktitle tag should be named as it appears in title. ''' runner = CliRunner() audio_file = self.path_to_test_files + self.file_delimit +\ self.audio_file_3 pattern = "(?<=\\d\\d).+(?=.mp3)" result = runner.invoke(cli, ["--file", audio_file, "--parse-title-as-is", pattern] ) expected = "_audio_test_file_3" self.assertEqual(result.exit_code, 0) audio = base_audio.BaseAudio() audio.load_track(audio_file) self.assertEqual(audio.get_tag("tracktitle"), expected)