summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarry Warsaw2009-12-28 07:37:25 -0500
committerBarry Warsaw2009-12-28 07:37:25 -0500
commitba2c7550b005255f75aaf3396f908cc3ead10032 (patch)
tree13b4c6338aaf2542b530e11e7e4ed130b675579c
parent7174e2fc80c296a71496b177b53205e8f4508feb (diff)
downloadmailman-ba2c7550b005255f75aaf3396f908cc3ead10032.tar.gz
mailman-ba2c7550b005255f75aaf3396f908cc3ead10032.tar.zst
mailman-ba2c7550b005255f75aaf3396f908cc3ead10032.zip
-rw-r--r--src/mailman/app/membership.py3
-rw-r--r--src/mailman/interfaces/member.py1
-rw-r--r--src/mailman/rest/configure.zcml14
-rw-r--r--src/mailman/rest/docs/membership.txt42
4 files changed, 58 insertions, 2 deletions
diff --git a/src/mailman/app/membership.py b/src/mailman/app/membership.py
index 09ecf3a8b..cf7bb2419 100644
--- a/src/mailman/app/membership.py
+++ b/src/mailman/app/membership.py
@@ -36,7 +36,8 @@ from mailman.core.i18n import _
from mailman.email.message import OwnerNotification
from mailman.email.validate import validate
from mailman.interfaces.member import (
- AlreadySubscribedError, MemberRole, MembershipIsBannedError)
+ AlreadySubscribedError, MemberRole, MembershipIsBannedError,
+ NotAMemberError)
from mailman.interfaces.usermanager import IUserManager
diff --git a/src/mailman/interfaces/member.py b/src/mailman/interfaces/member.py
index 66cf61581..6fe4f32ca 100644
--- a/src/mailman/interfaces/member.py
+++ b/src/mailman/interfaces/member.py
@@ -78,6 +78,7 @@ class MembershipError(MailmanError):
"""Base exception for all membership errors."""
+@error_status(400)
class AlreadySubscribedError(MembershipError):
"""The member is already subscribed to the mailing list with this role."""
diff --git a/src/mailman/rest/configure.zcml b/src/mailman/rest/configure.zcml
index 5bff5d563..cf08b331e 100644
--- a/src/mailman/rest/configure.zcml
+++ b/src/mailman/rest/configure.zcml
@@ -51,6 +51,20 @@
name="index.html"
/>
+ <!--
+ XXX 2009-12-28 Why is this necessary? NotAMemberError is decorated with
+ @error_status(400) so it /should/ already be adaptable to
+ WebServiceExceptionView. For some reason though rest/membership.txt fails
+ without this.
+ -->
+ <adapter
+ for="mailman.interfaces.member.NotAMemberError
+ lazr.restful.simple.Request"
+ provides="zope.interface.Interface"
+ factory="lazr.restful.error.WebServiceExceptionView"
+ name="index.html"
+ />
+
<utility
factory="mailman.rest.configuration.AdminWebServiceConfiguration"
provides="lazr.restful.interfaces.IWebServiceConfiguration"
diff --git a/src/mailman/rest/docs/membership.txt b/src/mailman/rest/docs/membership.txt
index 42c6bb242..4628e6af2 100644
--- a/src/mailman/rest/docs/membership.txt
+++ b/src/mailman/rest/docs/membership.txt
@@ -188,7 +188,7 @@ created for her.
... 'address': 'eperson@example.com',
... 'real_name': 'Elly Person',
... })
- http_etag: "a0213c9ff485ef3d24a6e2cc8ee68ed147f05398"
+ http_etag: ...
resource_type_link: http://localhost:8001/3.0/#member
self_link: http://localhost:8001/3.0/lists/alpha@example.com/member/eperson@example.com
@@ -229,3 +229,43 @@ Elly is no longer a member of the mailing list.
>>> set(member.mailing_list for member in elly.memberships.members)
set([])
+
+
+Corner cases
+============
+
+For some reason Elly tries to join a mailing list that does not exist.
+
+ >>> dump_json('http://localhost:8001/3.0/members', {
+ ... 'ws.op': 'join',
+ ... 'fqdn_listname': 'beta@example.com',
+ ... 'address': 'eperson@example.com',
+ ... 'real_name': 'Elly Person',
+ ... })
+ Traceback (most recent call last):
+ ...
+ HTTPError: HTTP Error 400: Bad Request
+
+Then, she tries to leave a mailing list that does not exist.
+
+ >>> dump_json('http://localhost:8001/3.0/members', {
+ ... 'ws.op': 'leave',
+ ... 'fqdn_listname': 'beta@example.com',
+ ... 'address': 'eperson@example.com',
+ ... 'real_name': 'Elly Person',
+ ... })
+ Traceback (most recent call last):
+ ...
+ HTTPError: HTTP Error 400: Bad Request
+
+For some reason, Elly tries to leave the mailing list again, but she's already
+been unsubscribed.
+
+ >>> dump_json('http://localhost:8001/3.0/members', {
+ ... 'ws.op': 'leave',
+ ... 'fqdn_listname': 'alpha@example.com',
+ ... 'address': 'eperson@example.com',
+ ... })
+ Traceback (most recent call last):
+ ...
+ HTTPError: HTTP Error 400: Bad Request