diff options
| author | Barry Warsaw | 2011-09-01 20:16:51 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2011-09-01 20:16:51 -0400 |
| commit | a6fb7c76a44ffe0c7ec52247065f758827b93326 (patch) | |
| tree | b118b0219d1346057b833c3dc4f0b1a2a2f4e067 /src | |
| parent | a6fcb3e732fbf880e02a94ce8265be6624459ed8 (diff) | |
| download | mailman-a6fb7c76a44ffe0c7ec52247065f758827b93326.tar.gz mailman-a6fb7c76a44ffe0c7ec52247065f758827b93326.tar.zst mailman-a6fb7c76a44ffe0c7ec52247065f758827b93326.zip | |
* PATCHing an invalid attribute on a member did not give a 400 error
(LP: #833376). Given by Stephen A. Goss.
Diffstat (limited to 'src')
| -rw-r--r-- | src/mailman/docs/NEWS.rst | 2 | ||||
| -rw-r--r-- | src/mailman/rest/members.py | 6 | ||||
| -rw-r--r-- | src/mailman/rest/tests/test_membership.py | 16 |
3 files changed, 22 insertions, 2 deletions
diff --git a/src/mailman/docs/NEWS.rst b/src/mailman/docs/NEWS.rst index 2a59835d6..d2b6a8ccb 100644 --- a/src/mailman/docs/NEWS.rst +++ b/src/mailman/docs/NEWS.rst @@ -51,6 +51,8 @@ REST Stephen A. Goss. * Getting the roster or configuration of a nonexistent list did not give a 404 error (LP: #837676). Given by Stephen A. Goss. + * PATCHing an invalid attribute on a member did not give a 400 error + (LP: #833376). Given by Stephen A. Goss. Commands -------- diff --git a/src/mailman/rest/members.py b/src/mailman/rest/members.py index e7d0a095f..8f447ac75 100644 --- a/src/mailman/rest/members.py +++ b/src/mailman/rest/members.py @@ -140,8 +140,10 @@ class AMember(_MemberBase): """ if self._member is None: return http.not_found() - # Currently, only the `address` parameter can be patched. - values = Validator(address=unicode)(request) + try: + values = Validator(address=unicode)(request) + except ValueError as error: + return http.bad_request([], str(error)) assert len(values) == 1, 'Unexpected values' email = values['address'] address = getUtility(IUserManager).get_address(email) diff --git a/src/mailman/rest/tests/test_membership.py b/src/mailman/rest/tests/test_membership.py index db1c2e4d2..8a315e359 100644 --- a/src/mailman/rest/tests/test_membership.py +++ b/src/mailman/rest/tests/test_membership.py @@ -203,6 +203,22 @@ class TestMembership(unittest.TestCase): else: raise AssertionError('Expected HTTPError') + def test_patch_bogus_member_attribute_400(self): + # /members/<id> PATCH 'bogus' returns 400 + anne = self._usermanager.create_address('anne@example.com') + self._mlist.subscribe(anne) + config.db.commit() + try: + # For Python 2.6 + call_api('http://localhost:9001/3.0/members/1', { + 'powers': 'super', + }, method='PATCH') + except HTTPError as exc: + self.assertEqual(exc.code, 400) + self.assertEqual(exc.msg, 'Unexpected parameters: powers') + else: + raise AssertionError('Expected HTTPError') + def test_suite(): |
