from unittest import mock, skipUnless from django.db import connection from django.db.backends.oracle.client import DatabaseClient from django.test import SimpleTestCase @skipUnless(connection.vendor == 'oracle', 'Requires cx_Oracle to be installed') class OracleDbshellTests(SimpleTestCase): def settings_to_cmd_args_env(self, settings_dict, parameters=None, rlwrap=False): if parameters is None: parameters = [] with mock.patch('shutil.which', return_value='/usr/bin/rlwrap' if rlwrap else None): return DatabaseClient.settings_to_cmd_args_env(settings_dict, parameters) def test_without_rlwrap(self): expected_args = [ 'sqlplus', '-L', connection.client.connect_string(connection.settings_dict), ] self.assertEqual( self.settings_to_cmd_args_env(connection.settings_dict, rlwrap=False), (expected_args, None), ) def test_with_rlwrap(self): expected_args = [ '/usr/bin/rlwrap', 'sqlplus', '-L', connection.client.connect_string(connection.settings_dict), ] self.assertEqual( self.settings_to_cmd_args_env(connection.settings_dict, rlwrap=True), (expected_args, None), ) def test_parameters(self): expected_args = [ 'sqlplus', '-L', connection.client.connect_string(connection.settings_dict), '-HELP', ] self.assertEqual( self.settings_to_cmd_args_env( connection.settings_dict, parameters=['-HELP'], ), (expected_args, None), )