django/tests/dbshell/test_sqlite.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

46 lines
1.7 KiB
Python
Raw Permalink Normal View History

import subprocess
from pathlib import Path
from unittest import mock, skipUnless
from django.core.management import CommandError, call_command
from django.db import connection
from django.db.backends.sqlite3.client import DatabaseClient
from django.test import SimpleTestCase
class SqliteDbshellCommandTestCase(SimpleTestCase):
def settings_to_cmd_args_env(self, settings_dict, parameters=None):
if parameters is None:
parameters = []
return DatabaseClient.settings_to_cmd_args_env(settings_dict, parameters)
def test_path_name(self):
self.assertEqual(
self.settings_to_cmd_args_env({"NAME": Path("test.db.sqlite3")}),
(["sqlite3", Path("test.db.sqlite3")], None),
)
def test_parameters(self):
self.assertEqual(
self.settings_to_cmd_args_env({"NAME": "test.db.sqlite3"}, ["-help"]),
(["sqlite3", "test.db.sqlite3", "-help"], None),
)
@skipUnless(connection.vendor == "sqlite", "SQLite test")
def test_non_zero_exit_status_when_path_to_db_is_path(self):
sqlite_with_path = {
"ENGINE": "django.db.backends.sqlite3",
"NAME": Path("test.db.sqlite3"),
}
cmd_args = self.settings_to_cmd_args_env(sqlite_with_path)[0]
msg = '"sqlite3 test.db.sqlite3" returned non-zero exit status 1.'
with (
mock.patch(
"django.db.backends.sqlite3.client.DatabaseClient.runshell",
side_effect=subprocess.CalledProcessError(returncode=1, cmd=cmd_args),
),
self.assertRaisesMessage(CommandError, msg),
):
call_command("dbshell")