From 4d07e45732848f79d6614181ff7bc1d1b29b5576 Mon Sep 17 00:00:00 2001 From: Jesse Weinstein Date: Mon, 4 Jan 2016 01:51:49 -0800 Subject: [PATCH 1/6] Bring test_ftintitle up to 94% Just need a test for importing. --- test/test_ftintitle.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/test_ftintitle.py b/test/test_ftintitle.py index c02424dbe..481917f85 100644 --- a/test/test_ftintitle.py +++ b/test/test_ftintitle.py @@ -36,6 +36,7 @@ class FtInTitlePluginFunctional(unittest.TestCase, TestHelper): def _ft_add_item(self, path, artist, title, aartist): return self.add_item(path=path, artist=artist, + artist_sort=artist, title=title, albumartist=aartist) @@ -51,6 +52,14 @@ class FtInTitlePluginFunctional(unittest.TestCase, TestHelper): self.assertEqual(item['artist'], u'Alice') self.assertEqual(item['title'], u'Song 1') + def test_functional_not_found(self): + item = self._ft_add_item('/', u'Alice ft Bob', u'Song 1', u'George') + self.run_command('ftintitle', '-d') + item.load() + # item should be unchanged + self.assertEqual(item['artist'], u'Alice ft Bob') + self.assertEqual(item['title'], u'Song 1') + def test_functional_custom_format(self): self._ft_set_config('feat. {0}') item = self._ft_add_item('/', u'Alice ft Bob', u'Song 1', u'Alice') @@ -126,6 +135,11 @@ class FtInTitlePluginTest(unittest.TestCase): 'album_artist': 'Bob', 'feat_part': 'Alice' }, + { + 'artist': 'Alice ft. Carol', + 'album_artist': 'Bob', + 'feat_part': None + }, ] for test_case in test_cases: From edefc1373e0ecc27e0f33ed2cbf24443df421141 Mon Sep 17 00:00:00 2001 From: Jesse Weinstein Date: Mon, 4 Jan 2016 23:42:14 -0800 Subject: [PATCH 2/6] Bring test_permissions.py up to 100% --- test/test_permissions.py | 54 +++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/test/test_permissions.py b/test/test_permissions.py index 479c5e5af..eb2c49f42 100644 --- a/test/test_permissions.py +++ b/test/test_permissions.py @@ -5,6 +5,9 @@ from __future__ import (division, absolute_import, print_function, unicode_literals) +import os +from mock import patch, Mock + from test._common import unittest from test.helper import TestHelper from beetsplug.permissions import (check_permissions, @@ -26,45 +29,40 @@ class PermissionsPluginTest(unittest.TestCase, TestHelper): self.unload_plugins() def test_permissions_on_album_imported(self): - self.importer = self.create_importer() - self.importer.run() - item = self.lib.items().get() - - file_perm = self.config['permissions']['file'].get() - file_perm = convert_perm(file_perm) - - dir_perm = self.config['permissions']['dir'].get() - dir_perm = convert_perm(dir_perm) - - music_dirs = dirs_in_library(self.lib.directory, item.path) - - self.assertTrue(check_permissions(item.path, file_perm)) - self.assertFalse(check_permissions(item.path, convert_perm(644))) - - for path in music_dirs: - self.assertTrue(check_permissions(path, dir_perm)) - self.assertFalse(check_permissions(path, convert_perm(644))) + self.do_test(True) def test_permissions_on_item_imported(self): self.config['import']['singletons'] = True + self.do_test(True) + + @patch("os.chmod", Mock()) + def test_failing_to_set_permissions(self): + self.do_test(False) + + def do_test(self, expectSuccess): self.importer = self.create_importer() self.importer.run() item = self.lib.items().get() - file_perm = self.config['permissions']['file'].get() - file_perm = convert_perm(file_perm) + exp_perms = {k: convert_perm(self.config['permissions'][k].get()) + for k in ['file', 'dir']} - dir_perm = self.config['permissions']['dir'].get() - dir_perm = convert_perm(dir_perm) + self.assertPerms(item.path, convert_perm(644), + exp_perms['file'], expectSuccess) - music_dirs = dirs_in_library(self.lib.directory, item.path) + for path in dirs_in_library(self.lib.directory, item.path): + self.assertPerms(path, convert_perm(755), + exp_perms['dir'], expectSuccess) - self.assertTrue(check_permissions(item.path, file_perm)) - self.assertFalse(check_permissions(item.path, convert_perm(644))) + def assertPerms(self, path, old_perms, new_perms, expectSuccess): + for x in [(True, new_perms if expectSuccess else old_perms, '!='), + (False, old_perms if expectSuccess else new_perms, '==')]: + self.assertEqual(x[0], check_permissions(path, x[1]), + msg='{} : {} {} {}'.format( + path, oct(os.stat(path).st_mode), x[2], oct(x[1]))) - for path in music_dirs: - self.assertTrue(check_permissions(path, dir_perm)) - self.assertFalse(check_permissions(path, convert_perm(644))) + def test_convert_perm_from_string(self): + self.assertEqual(convert_perm('10'), 8) def suite(): From 28257db654b07cd39ce77b260b92ebac4970144d Mon Sep 17 00:00:00 2001 From: Jesse Weinstein Date: Tue, 5 Jan 2016 00:03:34 -0800 Subject: [PATCH 3/6] Add test for help command --- test/test_ui.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/test_ui.py b/test/test_ui.py index 60cc122df..f774b1f13 100644 --- a/test/test_ui.py +++ b/test/test_ui.py @@ -1129,6 +1129,16 @@ class CommonOptionsParserCliTest(unittest.TestCase, TestHelper): '--format-album', '$albumartist', 'ls', '-a') self.assertEqual(l, 'the album artist\n') + def test_help(self): + l = self.run_with_output('help') + self.assertIn('Usage:', l) + + l = self.run_with_output('help', 'list') + self.assertIn('Usage:', l) + + with self.assertRaises(ui.UserError): + self.run_command('help', 'this.is.not.a.real.command') + class CommonOptionsParserTest(unittest.TestCase, TestHelper): def setUp(self): From cce2d5450fd91d17033ecdf8cfa4049ccddfc311 Mon Sep 17 00:00:00 2001 From: Jesse Weinstein Date: Tue, 5 Jan 2016 00:28:43 -0800 Subject: [PATCH 4/6] Adjust test_permissions to handle different starting perms --- test/test_permissions.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/test/test_permissions.py b/test/test_permissions.py index eb2c49f42..74c9585a4 100644 --- a/test/test_permissions.py +++ b/test/test_permissions.py @@ -40,23 +40,28 @@ class PermissionsPluginTest(unittest.TestCase, TestHelper): self.do_test(False) def do_test(self, expectSuccess): + def get_stat(v): + return os.stat( + os.path.join(self.temp_dir, 'import', *v)).st_mode & 0o777 self.importer = self.create_importer() + typs = ['file', 'dir'] + self.exp_perms = { + True: {k: convert_perm(self.config['permissions'][k].get()) + for k in typs}, + False: {k: get_stat(v) + for (k, v) in zip(typs, (('album 0', 'track 0.mp3'), ()))}} + self.importer.run() item = self.lib.items().get() - exp_perms = {k: convert_perm(self.config['permissions'][k].get()) - for k in ['file', 'dir']} - - self.assertPerms(item.path, convert_perm(644), - exp_perms['file'], expectSuccess) + self.assertPerms(item.path, 'file', expectSuccess) for path in dirs_in_library(self.lib.directory, item.path): - self.assertPerms(path, convert_perm(755), - exp_perms['dir'], expectSuccess) + self.assertPerms(path, 'dir', expectSuccess) - def assertPerms(self, path, old_perms, new_perms, expectSuccess): - for x in [(True, new_perms if expectSuccess else old_perms, '!='), - (False, old_perms if expectSuccess else new_perms, '==')]: + def assertPerms(self, path, typ, expectSuccess): + for x in [(True, self.exp_perms[expectSuccess][typ], '!='), + (False, self.exp_perms[not expectSuccess][typ], '==')]: self.assertEqual(x[0], check_permissions(path, x[1]), msg='{} : {} {} {}'.format( path, oct(os.stat(path).st_mode), x[2], oct(x[1]))) From 78b81fc8b85bcd62d074c635b5e95a8799649d68 Mon Sep 17 00:00:00 2001 From: Jesse Weinstein Date: Tue, 5 Jan 2016 00:35:01 -0800 Subject: [PATCH 5/6] apparently do_test is a magic name. Who knew? --- test/test_permissions.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_permissions.py b/test/test_permissions.py index 74c9585a4..c1777ed59 100644 --- a/test/test_permissions.py +++ b/test/test_permissions.py @@ -29,17 +29,17 @@ class PermissionsPluginTest(unittest.TestCase, TestHelper): self.unload_plugins() def test_permissions_on_album_imported(self): - self.do_test(True) + self.do_thing(True) def test_permissions_on_item_imported(self): self.config['import']['singletons'] = True - self.do_test(True) + self.do_thing(True) @patch("os.chmod", Mock()) def test_failing_to_set_permissions(self): - self.do_test(False) + self.do_thing(False) - def do_test(self, expectSuccess): + def do_thing(self, expectSuccess): def get_stat(v): return os.stat( os.path.join(self.temp_dir, 'import', *v)).st_mode & 0o777 From 1111ab9fdfef49661c4c667ec051e8a05c293a2b Mon Sep 17 00:00:00 2001 From: Jesse Weinstein Date: Wed, 6 Jan 2016 01:02:07 -0800 Subject: [PATCH 6/6] Add tests for stats and version --- test/test_ui.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/test_ui.py b/test/test_ui.py index f774b1f13..b32a4c452 100644 --- a/test/test_ui.py +++ b/test/test_ui.py @@ -1139,6 +1139,22 @@ class CommonOptionsParserCliTest(unittest.TestCase, TestHelper): with self.assertRaises(ui.UserError): self.run_command('help', 'this.is.not.a.real.command') + def test_stats(self): + l = self.run_with_output('stats') + self.assertIn('Approximate total size:', l) + + # # Need to have more realistic library setup for this to work + # l = self.run_with_output('stats', '-e') + # self.assertIn('Total size:', l) + + def test_version(self): + l = self.run_with_output('version') + self.assertIn('no plugins loaded', l) + + # # Need to have plugin loaded + # l = self.run_with_output('version') + # self.assertIn('plugins: ', l) + class CommonOptionsParserTest(unittest.TestCase, TestHelper): def setUp(self):