from unittest import mock from django.db import connection from django.db.backends.base.client import BaseDatabaseClient from django.test import SimpleTestCase class SimpleDatabaseClientTests(SimpleTestCase): def setUp(self): self.client = BaseDatabaseClient(connection=connection) def test_settings_to_cmd_args_env(self): msg = ( 'subclasses of BaseDatabaseClient must provide a ' 'settings_to_cmd_args_env() method or override a runshell().' ) with self.assertRaisesMessage(NotImplementedError, msg): self.client.settings_to_cmd_args_env(None, None) def test_runshell_use_environ(self): for env in [None, {}]: with self.subTest(env=env): with mock.patch('subprocess.run') as run: with mock.patch.object( BaseDatabaseClient, 'settings_to_cmd_args_env', return_value=([], env), ): self.client.runshell(None) run.assert_called_once_with([], env=None, check=True)