Opened 4 days ago

Last modified 2 days ago

#36280 assigned Cleanup/optimization

Replace cm.exception.messages with assertRaisesMessage() in tests

Reported by: Tim Graham Owned by: Georgii (George) Randiuk
Component: Core (Other) Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: yes UI/UX: no

Description (last modified by Georgii (George) Randiuk)

I haven't audited each instance, but most likely many of the uses of cm.exception.messages could be made more consistent with the rest of the Django test suite by instead using self.assertRaisesMessage().

tests/composite_pk/test_models.py:                self.assertSequenceEqual(ctx.exception.messages, messages)
tests/composite_pk/test_models.py:            ctx.exception.messages, ("User with this Email already exists.",)
tests/validation/test_error_messages.py:        self.assertEqual(cm.exception.messages, expected)
tests/auth_tests/test_validators.py:        self.assertEqual(cm.exception.messages, [msg_too_short])
tests/auth_tests/test_validators.py:            cm.exception.messages, ["This password is too common.", msg_too_short]
tests/auth_tests/test_validators.py:        self.assertEqual(cm.exception.messages, [expected_error % 8])
tests/auth_tests/test_validators.py:        self.assertEqual(cm.exception.messages, [expected_error % 3])
tests/auth_tests/test_validators.py:        self.assertEqual(cm.exception.messages, [expected_error % "username"])
tests/auth_tests/test_validators.py:        self.assertEqual(cm.exception.messages, [expected_error % "email address"])
tests/auth_tests/test_validators.py:        self.assertEqual(cm.exception.messages, [expected_error % "first name"])
tests/auth_tests/test_validators.py:        self.assertEqual(cm.exception.messages, [expected_error % "first name"])
tests/auth_tests/test_validators.py:            cm.exception.messages, ["The password is too similar to the username."]
tests/auth_tests/test_validators.py:        self.assertEqual(cm.exception.messages, [expected_error])
tests/auth_tests/test_validators.py:                self.assertEqual(cm.exception.messages, [expected_error])
tests/auth_tests/test_validators.py:        self.assertEqual(cm.exception.messages, [expected_error])
tests/auth_tests/test_validators.py:        self.assertEqual(cm.exception.messages, [expected_error])
tests/forms_tests/tests/test_error_messages.py:        self.assertEqual(cm.exception.messages, expected)
tests/forms_tests/tests/test_validators.py:        self.assertEqual(2, len(e.exception.messages))
tests/test_exceptions/test_validation_error.py:        self.assertEqual(sorted(exception.messages), [])
tests/test_exceptions/test_validation_error.py:        self.assertEqual(sorted(exception.messages), ["E1", "E2"])
tests/test_exceptions/test_validation_error.py:        self.assertEqual(sorted(exception.messages), ["E1", "E2", "E3", "E4"])
tests/postgres_tests/test_array.py:            cm.exception.messages[0],
tests/postgres_tests/test_array.py:            cm.exception.messages[0], "Nested arrays must have the same length."
tests/postgres_tests/test_array.py:            cm.exception.messages[0],
tests/postgres_tests/test_array.py:            cm.exception.messages[0],
tests/postgres_tests/test_array.py:            cm.exception.messages[0],
tests/postgres_tests/test_array.py:            cm.exception.messages[0],
tests/postgres_tests/test_array.py:            cm.exception.messages[0],
tests/postgres_tests/test_array.py:        self.assertEqual(cm.exception.messages[0], "This field is required.")
tests/postgres_tests/test_array.py:            cm.exception.messages,
tests/postgres_tests/test_array.py:            cm.exception.messages,
tests/postgres_tests/test_hstore.py:        self.assertEqual(cm.exception.messages[0], "Could not load JSON data.")
tests/postgres_tests/test_hstore.py:        self.assertEqual(cm.exception.messages[0], "Some keys were missing: b")
tests/postgres_tests/test_hstore.py:        self.assertEqual(cm.exception.messages[0], "Some unknown keys were provided: c")
tests/postgres_tests/test_hstore.py:        self.assertEqual(cm.exception.messages[0], "Foobar")
tests/postgres_tests/test_hstore.py:        self.assertEqual(cm.exception.messages[0], "Some unknown keys were provided: c")
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], msg)
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], msg)
tests/postgres_tests/test_ranges.py:            cm.exception.messages[0],
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "Enter two whole numbers.")
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "Enter a whole number.")
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "Enter a whole number.")
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "This field is required.")
tests/postgres_tests/test_ranges.py:            cm.exception.messages[0],
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "Enter two numbers.")
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "Enter a number.")
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "Enter a number.")
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "This field is required.")
tests/postgres_tests/test_ranges.py:            cm.exception.messages[0],
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "Enter two valid dates.")
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "Enter a valid date.")
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "Enter a valid date.")
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "This field is required.")
tests/postgres_tests/test_ranges.py:            cm.exception.messages[0],
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "Enter two valid date/times.")
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "Enter a valid date/time.")
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "Enter a valid date/time.")
tests/postgres_tests/test_ranges.py:        self.assertEqual(cm.exception.messages[0], "This field is required.")

PR link: https://github.com/django/django/pull/19317

According to the ticket's flags, the next step(s) to move this issue forward are:

  • To improve the patch as described in the pull request review comments or on this ticket, then uncheck "Patch needs improvement".
  • If creating a new pull request, include a link to the pull request in the ticket comment when making that update. The usual format is: [https://github.com/django/django/pull/#### PR].

Change History (4)

comment:1 by Sarah Boyce, 3 days ago

Triage Stage: UnreviewedAccepted

Agree that most can be updated
Likely that the ones that check the error code (cm.exception.code) may need to stay the same

in reply to:  1 comment:2 by Georgii (George) Randiuk, 2 days ago

Replying to Sarah Boyce:

Agree that most can be updated
Likely that the ones that check the error code (cm.exception.code) may need to stay the same

I assume the same goes for assertEqual's that validate two lists of errors? Since, assertRaisesMessage validates against a string, not a list of them. Otherwise, we would need to write a new assert for that specifically.

comment:3 by Georgii (George) Randiuk, 2 days ago

Owner: set to Georgii (George) Randiuk
Status: newassigned

comment:4 by Georgii (George) Randiuk, 2 days ago

Description: modified (diff)
Has patch: set
Patch needs improvement: set
Note: See TracTickets for help on using tickets.
Back to Top