From 5708327c3769262b845730996ca2784245ada4d1 Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Fri, 1 Nov 2019 21:08:23 -0700 Subject: Fixed #23433 -- Deprecated django-admin.py entry point in favor of django-admin. Unify on the entry point created by setuptools entry_points feature. --- tests/admin_scripts/test_django_admin_py.py | 37 +++++++++++++++++++++++++++++ tests/admin_scripts/tests.py | 22 ++++++++--------- 2 files changed, 48 insertions(+), 11 deletions(-) create mode 100644 tests/admin_scripts/test_django_admin_py.py (limited to 'tests/admin_scripts') diff --git a/tests/admin_scripts/test_django_admin_py.py b/tests/admin_scripts/test_django_admin_py.py new file mode 100644 index 0000000000..56f5f0c1b5 --- /dev/null +++ b/tests/admin_scripts/test_django_admin_py.py @@ -0,0 +1,37 @@ +import subprocess +import sys +from pathlib import Path + +import django +from django.test import SimpleTestCase + + +class DeprecationTests(SimpleTestCase): + DEPRECATION_MESSAGE = ( + b'RemovedInDjango40Warning: django-admin.py is deprecated in favor of ' + b'django-admin.' + ) + + def _run_test(self, args): + p = subprocess.run( + [sys.executable, *args], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + check=True, + ) + return p.stdout, p.stderr + + def test_django_admin_py_deprecated(self): + django_admin_py = Path(django.__file__).parent / 'bin' / 'django-admin.py' + _, err = self._run_test(['-Wd', django_admin_py, '--version']) + self.assertIn(self.DEPRECATION_MESSAGE, err) + + def test_main_not_deprecated(self): + _, err = self._run_test(['-Wd', '-m', 'django', '--version']) + self.assertNotIn(self.DEPRECATION_MESSAGE, err) + + def test_django_admin_py_equivalent_main(self): + django_admin_py = Path(django.__file__).parent / 'bin' / 'django-admin.py' + django_admin_py_out, _ = self._run_test([django_admin_py, '--version']) + django_out, _ = self._run_test(['-m', 'django', '--version']) + self.assertEqual(django_admin_py_out, django_out) diff --git a/tests/admin_scripts/tests.py b/tests/admin_scripts/tests.py index a0b7770757..6266619216 100644 --- a/tests/admin_scripts/tests.py +++ b/tests/admin_scripts/tests.py @@ -14,7 +14,6 @@ import unittest from io import StringIO from unittest import mock -import django from django import conf, get_version from django.conf import settings from django.core.management import ( @@ -125,8 +124,7 @@ class AdminScriptTestCase(SimpleTestCase): return p.stdout, p.stderr def run_django_admin(self, args, settings_file=None): - script_dir = os.path.abspath(os.path.join(os.path.dirname(django.__file__), 'bin')) - return self.run_test([os.path.join(script_dir, 'django-admin.py'), *args], settings_file) + return self.run_test(['-m', 'django', *args], settings_file) def run_manage(self, args, settings_file=None, manage_py=None): template_manage_py = ( @@ -1898,7 +1896,12 @@ class StartProject(LiveServerTestCase, AdminScriptTestCase): # running again.. out, err = self.run_django_admin(args) self.assertNoOutput(out) - self.assertOutput(err, "already exists") + self.assertOutput( + err, + "CommandError: 'testproject' conflicts with the name of an " + "existing Python module and cannot be used as a project name. " + "Please try another name.", + ) def test_invalid_project_name(self): "Make sure the startproject management command validates a project name" @@ -2160,8 +2163,10 @@ class StartApp(AdminScriptTestCase): ) def test_overlaying_app(self): - self.run_django_admin(['startapp', 'app1']) - out, err = self.run_django_admin(['startapp', 'app2', 'app1']) + # Use a subdirectory so it is outside the PYTHONPATH. + os.makedirs(os.path.join(self.test_dir, 'apps/app1')) + self.run_django_admin(['startapp', 'app1', 'apps/app1']) + out, err = self.run_django_admin(['startapp', 'app2', 'apps/app1']) self.assertOutput( err, "already exists. Overlaying an app into an existing directory " @@ -2261,11 +2266,6 @@ class Dumpdata(AdminScriptTestCase): class MainModule(AdminScriptTestCase): """python -m django works like django-admin.""" - def test_runs_django_admin(self): - cmd_out, _ = self.run_django_admin(['--version']) - mod_out, _ = self.run_test(['-m', 'django', '--version']) - self.assertEqual(mod_out, cmd_out) - def test_program_name_in_help(self): out, err = self.run_test(['-m', 'django', 'help']) self.assertOutput(out, "Type 'python -m django help ' for help on a specific subcommand.") -- cgit v1.2.1