summaryrefslogtreecommitdiff
path: root/src/mailman/rest/tests/test_lists.py
diff options
context:
space:
mode:
authorBarry Warsaw2016-04-29 00:28:05 -0400
committerBarry Warsaw2016-04-29 00:28:05 -0400
commit78d1f5918d2ec0b2351edb3ed005d5b8f7e4319c (patch)
tree05ca840c89d0950d95b36566bed5723bd9409764 /src/mailman/rest/tests/test_lists.py
parent17103aae14f53655fd7685a0867724f6420b9282 (diff)
downloadmailman-78d1f5918d2ec0b2351edb3ed005d5b8f7e4319c.tar.gz
mailman-78d1f5918d2ec0b2351edb3ed005d5b8f7e4319c.tar.zst
mailman-78d1f5918d2ec0b2351edb3ed005d5b8f7e4319c.zip
Diffstat (limited to 'src/mailman/rest/tests/test_lists.py')
-rw-r--r--src/mailman/rest/tests/test_lists.py125
1 files changed, 99 insertions, 26 deletions
diff --git a/src/mailman/rest/tests/test_lists.py b/src/mailman/rest/tests/test_lists.py
index 207743e50..891afa889 100644
--- a/src/mailman/rest/tests/test_lists.py
+++ b/src/mailman/rest/tests/test_lists.py
@@ -213,38 +213,111 @@ class TestLists(unittest.TestCase):
'/owner/nobody@example.com')
self.assertEqual(cm.exception.code, 404)
- def test_list_mass_unsubscribe(self):
+ def test_list_mass_unsubscribe_all_succeed(self):
with transaction():
- aperson = self._usermanager.create_address('aperson@test.com')
- bperson = self._usermanager.create_address('bperson@test.com')
- cperson = self._usermanager.create_address('cperson@test.com')
- mlist = create_list('testlist@example.com')
- mlist.subscribe(aperson)
- mlist.subscribe(bperson)
- mlist.subscribe(cperson)
+ aperson = self._usermanager.create_address('aperson@example.com')
+ bperson = self._usermanager.create_address('bperson@example.com')
+ cperson = self._usermanager.create_address('cperson@example.com')
+ self._mlist.subscribe(aperson)
+ self._mlist.subscribe(bperson)
+ self._mlist.subscribe(cperson)
+ resource, response = call_api(
+ 'http://localhost:9001/3.0/lists/test.example.com'
+ '/roster/member', {
+ 'emails': ['aperson@example.com',
+ 'bperson@example.com',
+ ]},
+ 'DELETE')
+ self.assertEqual(response.status, 200)
+ # Remove variable data.
+ resource.pop('http_etag')
+ self.assertEqual(resource, {'aperson@example.com': True,
+ 'bperson@example.com': True,
+ })
+
+ def test_list_mass_unsubscribe_all_fail(self):
+ with transaction():
+ aperson = self._usermanager.create_address('aperson@example.com')
+ bperson = self._usermanager.create_address('bperson@example.com')
+ cperson = self._usermanager.create_address('cperson@example.com')
+ self._mlist.subscribe(aperson)
+ self._mlist.subscribe(bperson)
+ self._mlist.subscribe(cperson)
+ resource, response = call_api(
+ 'http://localhost:9001/3.0/lists/test.example.com'
+ '/roster/member', {
+ 'emails': ['yperson@example.com',
+ 'zperson@example.com',
+ ]},
+ 'DELETE')
+ self.assertEqual(response.status, 200)
+ # Remove variable data.
+ resource.pop('http_etag')
+ self.assertEqual(resource, {'yperson@example.com': False,
+ 'zperson@example.com': False,
+ })
+
+ def test_list_mass_unsubscribe_mixed_success(self):
+ with transaction():
+ aperson = self._usermanager.create_address('aperson@example.com')
+ bperson = self._usermanager.create_address('bperson@example.com')
+ cperson = self._usermanager.create_address('cperson@example.com')
+ self._mlist.subscribe(aperson)
+ self._mlist.subscribe(bperson)
+ self._mlist.subscribe(cperson)
+ resource, response = call_api(
+ 'http://localhost:9001/3.0/lists/test.example.com'
+ '/roster/member', {
+ 'emails': ['aperson@example.com',
+ 'zperson@example.com',
+ ]},
+ 'DELETE')
+ self.assertEqual(response.status, 200)
+ # Remove variable data.
+ resource.pop('http_etag')
+ self.assertEqual(resource, {'aperson@example.com': True,
+ 'zperson@example.com': False,
+ })
+
+ def test_list_mass_unsubscribe_with_duplicates(self):
+ with transaction():
+ aperson = self._usermanager.create_address('aperson@example.com')
+ bperson = self._usermanager.create_address('bperson@example.com')
+ cperson = self._usermanager.create_address('cperson@example.com')
+ self._mlist.subscribe(aperson)
+ self._mlist.subscribe(bperson)
+ self._mlist.subscribe(cperson)
+ resource, response = call_api(
+ 'http://localhost:9001/3.0/lists/test.example.com'
+ '/roster/member', {
+ 'emails': ['aperson@example.com',
+ 'aperson@example.com',
+ 'bperson@example.com',
+ 'zperson@example.com',
+ ]},
+ 'DELETE')
+ self.assertEqual(response.status, 200)
+ # Remove variable data.
+ resource.pop('http_etag')
+ self.assertEqual(resource, {'aperson@example.com': True,
+ 'bperson@example.com': True,
+ 'zperson@example.com': False,
+ })
+
+ def test_list_mass_unsubscribe_bogus_list(self):
with self.assertRaises(HTTPError) as cm:
call_api('http://localhost:9001/3.0/lists/bogus.example.com'
- '/roster/member', None, 'DELETE')
+ '/roster/member',
+ None, 'DELETE')
self.assertEqual(cm.exception.code, 404)
+
+ def test_list_mass_unsubscribe_with_no_data(self):
with self.assertRaises(HTTPError) as cm:
- call_api('http://localhost:9001/3.0/lists/testlist.example.com'
- '/roster/member', None, 'DELETE')
+ call_api('http://localhost:9001/3.0/lists/test.example.com'
+ '/roster/member',
+ None, 'DELETE')
self.assertEqual(cm.exception.code, 400)
- self.assertEqual(cm.exception.reason, b'Invalid Input.')
- resource, response = call_api(
- 'http://127.0.0.1:9001/3.0/lists/testlist.example.com'
- '/roster/member', {'emails': ['aperson@test.com']}, 'DELETE')
- self.assertEqual(response.status, 204)
- resource, response = call_api(
- 'http://127.0.0.1:9001/3.0/lists/testlist.example.com'
- '/roster/member', {'emails': ['bperson@test.com',
- 'cperson@test.com',
- 'bperson@test.com',
- 'bogus@test.com']}, 'DELETE')
- self.assertEqual(response.status, 200)
- self.assertEqual(resource['bperson@test.com'],
- 'Member already deleted.')
- self.assertEqual(resource['bogus@test.com'], 'No such member.')
+ self.assertEqual(cm.exception.reason, b'Missing parameters: emails')
class TestListArchivers(unittest.TestCase):