diff --git a/deluge/tests/__init__.py b/deluge/tests/__init__.py index cc18352b9..d3bf10def 100644 --- a/deluge/tests/__init__.py +++ b/deluge/tests/__init__.py @@ -2,6 +2,8 @@ # without getting error: what(): epoll: Too many open files from __future__ import print_function, unicode_literals +from deluge.i18n import setup_translation + try: import resource except ImportError: # Does not exist on Windows @@ -12,3 +14,6 @@ else: except (ValueError, resource.error) as ex: error = 'Failed to raise file descriptor limit: %s' % ex # print(error) + +# Initialize gettext +setup_translation() diff --git a/deluge/tests/common.py b/deluge/tests/common.py index 0fb8d5002..e92cc0f91 100644 --- a/deluge/tests/common.py +++ b/deluge/tests/common.py @@ -23,7 +23,6 @@ import deluge.configmanager import deluge.core.preferencesmanager import deluge.log from deluge.error import DelugeError -from deluge.i18n import setup_translation # This sets log level to critical, so use log.critical() to debug while running unit tests deluge.log.setup_logger('none') @@ -74,10 +73,6 @@ def add_watchdog(deferred, timeout=0.05, message=None): return watchdog -# Initialize gettext -setup_translation() - - class ReactorOverride(object): """Class used to patch reactor while running unit tests to avoid starting and stopping the twisted reactor diff --git a/deluge/tests/test_ui_console_fields.py b/deluge/tests/test_ui_console.py similarity index 56% rename from deluge/tests/test_ui_console_fields.py rename to deluge/tests/test_ui_console.py index a844184a1..8c67322ee 100644 --- a/deluge/tests/test_ui_console_fields.py +++ b/deluge/tests/test_ui_console.py @@ -7,22 +7,25 @@ from __future__ import unicode_literals -from twisted.trial import unittest +import argparse from deluge.common import windows_check +from deluge.ui.console.cmdline.commands.add import Command from deluge.ui.console.widgets.fields import TextInput +from .basetest import BaseTestCase -class Parent(object): + +class MockParent(object): def __init__(self): self.border_off_x = 1 self.pane_width = 20 self.encoding = 'utf8' -class UICommonTestCase(unittest.TestCase): +class UIConsoleFieldTestCase(BaseTestCase): def setUp(self): # NOQA: N803 - self.parent = Parent() + self.parent = MockParent() def tearDown(self): # NOQA: N803 pass @@ -44,3 +47,21 @@ class UICommonTestCase(unittest.TestCase): self.assertTrue(t) if not windows_check(): self.assertTrue(t.handle_read(33)) + + +class UIConsoleCommandsTestCase(BaseTestCase): + def setUp(self): + pass + + def tearDown(self): + pass + + def test_add_move_completed(self): + completed_path = 'completed_path' + parser = argparse.ArgumentParser() + cmd = Command() + cmd.add_arguments(parser) + args = parser.parse_args(['torrent', '-m', completed_path]) + self.assertEqual(args.move_completed_path, completed_path) + args = parser.parse_args(['torrent', '--move-path', completed_path]) + self.assertEqual(args.move_completed_path, completed_path) diff --git a/deluge/tests/test_ui_entry.py b/deluge/tests/test_ui_entry.py index 46ec2a421..1d405a153 100644 --- a/deluge/tests/test_ui_entry.py +++ b/deluge/tests/test_ui_entry.py @@ -377,8 +377,9 @@ class ConsoleUIWithDaemonBaseTestCase(UIWithDaemonBaseTestCase): deluge.ui.console.main.reactor = common.ReactorOverride() return UIWithDaemonBaseTestCase.set_up(self) - @defer.inlineCallbacks - def test_console_command_status(self): + def patch_arg_command(self, command): + if type(command) == str: + command = [command] username, password = get_localhost_auth() self.patch( sys, @@ -390,13 +391,55 @@ class ConsoleUIWithDaemonBaseTestCase(UIWithDaemonBaseTestCase): + [username] + ['--password'] + [password] - + ['status'], + + command, + ) + + @defer.inlineCallbacks + def test_console_command_add(self): + filename = common.get_test_data_file('test.torrent') + self.patch_arg_command(['add ' + filename]) + fd = StringFileDescriptor(sys.stdout) + self.patch(sys, 'stdout', fd) + + yield self.exec_command() + + std_output = fd.out.getvalue() + self.assertTrue( + std_output + == 'Attempting to add torrent: ' + filename + '\nTorrent added!\n' + ) + + @defer.inlineCallbacks + def test_console_command_add_move_completed(self): + filename = common.get_test_data_file('test.torrent') + self.patch_arg_command( + [ + 'add --move-path /tmp ' + filename + ' ; status' + ' ; manage' + ' ab570cdd5a17ea1b61e970bb72047de141bce173' + ' move_completed' + ' move_completed_path' + ] ) fd = StringFileDescriptor(sys.stdout) self.patch(sys, 'stdout', fd) yield self.exec_command() + std_output = fd.out.getvalue() + self.assertTrue( + std_output.endswith('move_completed: True\nmove_completed_path: /tmp\n') + or std_output.endswith('move_completed_path: /tmp\nmove_completed: True\n') + ) + + @defer.inlineCallbacks + def test_console_command_status(self): + fd = StringFileDescriptor(sys.stdout) + self.patch_arg_command(['status']) + self.patch(sys, 'stdout', fd) + + yield self.exec_command() + std_output = fd.out.getvalue() self.assertTrue( std_output.startswith('Total upload: ') diff --git a/deluge/ui/console/cmdline/commands/add.py b/deluge/ui/console/cmdline/commands/add.py index e2baf2740..34881d887 100644 --- a/deluge/ui/console/cmdline/commands/add.py +++ b/deluge/ui/console/cmdline/commands/add.py @@ -35,7 +35,13 @@ class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument( - '-p', '--path', dest='path', help=_('download folder for torrent') + '-p', '--path', dest='path', help=_('Download folder for torrent') + ) + parser.add_argument( + '-m', + '--move-path', + dest='move_completed_path', + help=_('Move the completed torrent to this folder'), ) parser.add_argument( 'torrents', @@ -53,6 +59,12 @@ class Command(BaseCommand): os.path.expanduser(options.path) ) + if options.move_completed_path: + t_options['move_completed'] = True + t_options['move_completed_path'] = os.path.abspath( + os.path.expanduser(options.move_completed_path) + ) + def on_success(result): if not result: self.console.write('{!error!}Torrent was not added: Already in session')