From d469db978ea6a705549b9519313d9adc198e4232 Mon Sep 17 00:00:00 2001 From: Ahmed Nassar Date: Wed, 16 Apr 2025 17:02:56 +0200 Subject: Fixed #36314 -- Fixed MinimumLengthValidator error message translation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Regression in ec7d69035a408b357f1803ca05a7c991cc358cfa. Thank you Gabriel Trouvé for the report and Claude Paroz for the review. --- tests/auth_tests/test_validators.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'tests/auth_tests/test_validators.py') diff --git a/tests/auth_tests/test_validators.py b/tests/auth_tests/test_validators.py index ea75c4a080..fdbf495ff5 100644 --- a/tests/auth_tests/test_validators.py +++ b/tests/auth_tests/test_validators.py @@ -1,4 +1,5 @@ import os +from unittest import mock from django.contrib.auth import validators from django.contrib.auth.models import User @@ -132,11 +133,16 @@ class MinimumLengthValidatorTest(SimpleTestCase): with self.assertRaises(ValidationError) as cm: MinimumLengthValidator().validate("1234567") self.assertEqual(cm.exception.messages, [expected_error % 8]) - self.assertEqual(cm.exception.error_list[0].code, "password_too_short") + error = cm.exception.error_list[0] + self.assertEqual(error.code, "password_too_short") + self.assertEqual(error.params, {"min_length": 8}) with self.assertRaises(ValidationError) as cm: MinimumLengthValidator(min_length=3).validate("12") self.assertEqual(cm.exception.messages, [expected_error % 3]) + error = cm.exception.error_list[0] + self.assertEqual(error.code, "password_too_short") + self.assertEqual(error.params, {"min_length": 3}) def test_help_text(self): self.assertEqual( @@ -144,6 +150,24 @@ class MinimumLengthValidatorTest(SimpleTestCase): "Your password must contain at least 8 characters.", ) + @mock.patch("django.contrib.auth.password_validation.ngettext") + def test_l10n(self, mock_ngettext): + with self.subTest("get_error_message"): + MinimumLengthValidator().get_error_message() + mock_ngettext.assert_called_with( + "This password is too short. It must contain at least %d character.", + "This password is too short. It must contain at least %d characters.", + 8, + ) + mock_ngettext.reset() + with self.subTest("get_help_text"): + MinimumLengthValidator().get_help_text() + mock_ngettext.assert_called_with( + "Your password must contain at least %(min_length)d " "character.", + "Your password must contain at least %(min_length)d " "characters.", + 8, + ) + def test_custom_error(self): class CustomMinimumLengthValidator(MinimumLengthValidator): def get_error_message(self): -- cgit v1.3