summaryrefslogtreecommitdiff
path: root/tests/user_commands
diff options
context:
space:
mode:
authorAdam Johnson <me@adamj.eu>2023-01-15 09:19:52 +0000
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-02-03 06:56:57 +0100
commit017fa23d3b0aee9142f531c2a0002fc86c82a54c (patch)
tree456483d46411d866cf5cd1df79f80a80eabff8a7 /tests/user_commands
parent1250483ebf73f7a82ff820b94092c63ce4238264 (diff)
Fixed #34259 -- Passed called_from_command_line to command subparsers.
Diffstat (limited to 'tests/user_commands')
-rw-r--r--tests/user_commands/management/commands/subparser_vanilla.py13
-rw-r--r--tests/user_commands/tests.py24
2 files changed, 37 insertions, 0 deletions
diff --git a/tests/user_commands/management/commands/subparser_vanilla.py b/tests/user_commands/management/commands/subparser_vanilla.py
new file mode 100644
index 0000000000..1605f21cad
--- /dev/null
+++ b/tests/user_commands/management/commands/subparser_vanilla.py
@@ -0,0 +1,13 @@
+import argparse
+
+from django.core.management.base import BaseCommand
+
+
+class Command(BaseCommand):
+ def add_arguments(self, parser):
+ subparsers = parser.add_subparsers(parser_class=argparse.ArgumentParser)
+ parser_foo = subparsers.add_parser("foo")
+ parser_foo.add_argument("bar", type=int)
+
+ def handle(self, *args, **options):
+ pass
diff --git a/tests/user_commands/tests.py b/tests/user_commands/tests.py
index e40632385c..408108b552 100644
--- a/tests/user_commands/tests.py
+++ b/tests/user_commands/tests.py
@@ -468,6 +468,30 @@ class CommandRunTests(AdminScriptTestCase):
self.assertNoOutput(err)
self.assertEqual(out.strip(), "Set foo")
+ def test_subparser_error_formatting(self):
+ self.write_settings("settings.py", apps=["user_commands"])
+ out, err = self.run_manage(["subparser", "foo", "twelve"])
+ self.maxDiff = None
+ self.assertNoOutput(out)
+ err_lines = err.splitlines()
+ self.assertEqual(len(err_lines), 2)
+ self.assertEqual(
+ err_lines[1],
+ "manage.py subparser foo: error: argument bar: invalid int value: 'twelve'",
+ )
+
+ def test_subparser_non_django_error_formatting(self):
+ self.write_settings("settings.py", apps=["user_commands"])
+ out, err = self.run_manage(["subparser_vanilla", "foo", "seven"])
+ self.assertNoOutput(out)
+ err_lines = err.splitlines()
+ self.assertEqual(len(err_lines), 2)
+ self.assertEqual(
+ err_lines[1],
+ "manage.py subparser_vanilla foo: error: argument bar: invalid int value: "
+ "'seven'",
+ )
+
class UtilsTests(SimpleTestCase):
def test_no_existent_external_program(self):