Example #1
0
    def test_dry_run_doesnt_set_tags(self):
        self.mock_parse_filename.return_value = {'artist': 'ANY_ARTIST'}
        args = {'--dry': True, '--import': None, '--pattern': 'ANY_PATTERN'}

        cli.tag(['ANY_FILENAME.mp3'], args)

        self.mock_set_tags.assert_not_called()
Example #2
0
 def test_no_pattern_no_parsing(self):
     cli.tag(
         ['ANY_FILENAME.mp3'], {
             '--artist': 'ANY_ARTIST',
             '--import': None,
             '--dry': False,
             '--pattern': None
         })
     self.mock_parse_filename.assert_not_called()
     self.mock_set_tags.assert_called_once_with('ANY_FILENAME.mp3',
                                                {'artist': 'ANY_ARTIST'},
                                                prefix='')
Example #3
0
 def test_tags_are_read_from_yaml_file(self, mock_load, mock_open,
                                       mock_abspath):
     mock_load.return_value = {'ANY_FILENAME.mp3': {'artist': 'ANY_ARTIST'}}
     mock_abspath.side_effect = lambda fname: fname
     cli.tag(['ANY_FILENAME.mp3'], {
         '--import': 'ANY_YAML',
         '--dry': False,
         '--pattern': None
     })
     mock_load.assert_called_once_with(mock_open.return_value)
     self.mock_set_tags.assert_called_once_with('ANY_FILENAME.mp3',
                                                {'artist': 'ANY_ARTIST'},
                                                prefix='')
Example #4
0
 def test_logging_if_wet_run(self):
     with logbook.TestHandler() as log_handler:
         self.mock_parse_filename.return_value = {}
         cli.tag(
             ['ANY_FILENAME.mp3'], {
                 '--artist': 'ANY_ARTIST',
                 '--import': None,
                 '--dry': False,
                 '--pattern': 'ANY_PATTERN'
             })
         should_log = ("Setting tags {'artist': 'ANY_ARTIST'}"
                       " on file ANY_FILENAME.mp3")
         self.assertIn(should_log, log_handler.formatted_records[0])
Example #5
0
 def test_arguments_take_precendece_over_yaml(self, mock_load, mock_open,
                                              mock_abspath):
     mock_load.return_value = {'ANY_FILE.mp3': {'artist': 'ANY_ARTIST'}}
     mock_abspath.side_effect = lambda fname: fname
     cli.tag(
         ['ANY_FILE.mp3'], {
             '--import': 'ANY_YAML',
             '--dry': False,
             '--pattern': None,
             '--artist': 'OTHER ARTIST'
         })
     self.mock_set_tags.assert_called_once_with('ANY_FILE.mp3',
                                                {'artist': 'OTHER ARTIST'},
                                                prefix='')
Example #6
0
    def test_neither_default_tag_nor_parsed_doesnt_touch_tag(self):
        self.mock_parse_filename.return_value = {}
        args = {
            '--dry': False,
            '--import': None,
            '--artist': None,
            '--pattern': 'ANY_PATTERN'
        }

        cli.tag(['ANY_FILENAME.mp3'], args)

        self.mock_parse_filename.assert_called_once_with(
            'ANY_FILENAME.mp3', 'ANY_PATTERN')
        self.mock_set_tags.assert_called_once_with('ANY_FILENAME.mp3', {},
                                                   prefix='')
Example #7
0
    def test_multiple_filenames(self):
        self.mock_parse_filename.return_value = {'artist': 'ANY_ARTIST'}
        args = {'--dry': False, '--import': None, '--pattern': 'ANY_PATTERN'}

        cli.tag(['FIRST_FILE.mp3', 'SECOND_FILE.flac'], args)

        self.mock_parse_filename.assert_has_calls([
            mock.call('FIRST_FILE.mp3', 'ANY_PATTERN'),
            mock.call('SECOND_FILE.flac', 'ANY_PATTERN')
        ],
                                                  any_order=True)
        self.mock_set_tags.assert_has_calls([
            mock.call('FIRST_FILE.mp3', {'artist': 'ANY_ARTIST'}, prefix=''),
            mock.call('SECOND_FILE.flac', {'artist': 'ANY_ARTIST'}, prefix='')
        ],
                                            any_order=True)
Example #8
0
    def test_no_default_tag_set_but_value_parsed_from_fname(self):
        self.mock_parse_filename.return_value = {'artist': 'ANY_ARTIST'}
        args = {
            '--dry': False,
            '--import': None,
            '--artist': None,
            '--pattern': '<artist>'
        }

        cli.tag(['ANY_FILENAME.mp3'], args)

        self.mock_parse_filename.assert_called_once_with(
            'ANY_FILENAME.mp3', '<artist>')
        self.mock_set_tags.assert_called_once_with('ANY_FILENAME.mp3',
                                                   {'artist': 'ANY_ARTIST'},
                                                   prefix='')
Example #9
0
    def test_parsed_tags_take_precedence_over_config(self):
        self.mock_parse_filename.return_value = {'artist': 'ANY_ARTIST'}
        args = {
            '--dry': False,
            '--import': None,
            '--artist': 'NOT_ARTIST',
            '--pattern': '<artist>'
        }

        cli.tag(['ANY_FILENAME.mp3'], args)

        self.mock_parse_filename.assert_called_once_with(
            'ANY_FILENAME.mp3', '<artist>')
        self.mock_set_tags.assert_called_once_with('ANY_FILENAME.mp3',
                                                   {'artist': 'ANY_ARTIST'},
                                                   prefix='')
Example #10
0
 def test_pattern_takes_precedence_over_yaml(self, mock_load, mock_open,
                                             mock_abspath):
     mock_load.return_value = {
         'FILENAME_ARTIST.mp3': {
             'artist': 'ANY_ARTIST'
         }
     }
     mock_abspath.side_effect = lambda fname: fname
     self.mock_parse_filename.return_value = {'artist': 'FILENAME_ARTIST'}
     cli.tag(['FILENAME_ARTIST.mp3'], {
         '--import': 'ANY_YAML',
         '--dry': False,
         '--pattern': '<artist>'
     })
     self.mock_set_tags.assert_called_once_with(
         'FILENAME_ARTIST.mp3', {'artist': 'FILENAME_ARTIST'}, prefix='')