diff --git a/src/postorius/tests/fixtures/vcr_cassettes/TestSubscription.test_subscribe_mod_then_open.yaml b/src/postorius/tests/fixtures/vcr_cassettes/TestSubscription.test_subscribe_mod_then_open.yaml new file mode 100644 index 0000000..b74eadf --- /dev/null +++ b/src/postorius/tests/fixtures/vcr_cassettes/TestSubscription.test_subscribe_mod_then_open.yaml @@ -0,0 +1,735 @@ +interactions: +- request: + body: mail_host=example.com + headers: + accept-encoding: ['gzip, deflate'] + !!python/unicode content-type: [!!python/unicode application/x-www-form-urlencoded] + method: !!python/unicode POST + uri: http://localhost:9001/3.0/domains + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + location: ['http://localhost:9001/3.0/domains/example.com'] + status: {code: 201, message: Created} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/domains/example.com + response: + body: {string: !!python/unicode '{"base_url": "http://example.com", "description": + null, "http_etag": "\"e736411818ff1815ca83575e0958c38c5188f0a4\"", "mail_host": + "example.com", "self_link": "http://localhost:9001/3.0/domains/example.com", + "url_host": "example.com"}'} + headers: + content-length: ['233'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: fqdn_listname=open_list%40example.com + headers: + accept-encoding: ['gzip, deflate'] + !!python/unicode content-type: [!!python/unicode application/x-www-form-urlencoded] + method: !!python/unicode POST + uri: http://localhost:9001/3.0/lists + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + location: ['http://localhost:9001/3.0/lists/open_list.example.com'] + status: {code: 201, message: Created} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/open_list.example.com + response: + body: {string: !!python/unicode '{"display_name": "Open_list", "fqdn_listname": + "open_list@example.com", "http_etag": "\"6726e101e1dd1de6043eee72f741d4c2479f4735\"", + "list_id": "open_list.example.com", "list_name": "open_list", "mail_host": + "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.0/lists/open_list.example.com", + "volume": 1}'} + headers: + content-length: ['324'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/open_list@example.com/config + response: + body: {string: !!python/unicode '{"acceptable_aliases": [], "admin_immed_notify": + true, "admin_notify_mchanges": false, "administrivia": true, "advertised": + true, "allow_list_posts": true, "anonymous_list": false, "archive_policy": + "public", "autorespond_owner": "none", "autorespond_postings": "none", "autorespond_requests": + "none", "autoresponse_grace_period": "90d", "autoresponse_owner_text": "", + "autoresponse_postings_text": "", "autoresponse_request_text": "", "bounces_address": + "open_list-bounces@example.com", "collapse_alternatives": true, "convert_html_to_plaintext": + false, "created_at": "2005-08-01T07:49:23", "default_member_action": "defer", + "default_nonmember_action": "hold", "description": "", "digest_last_sent_at": + null, "digest_send_periodic": true, "digest_size_threshold": 30.0, "digest_volume_frequency": + "monthly", "digests_enabled": true, "display_name": "Open_list", "filter_content": + false, "first_strip_reply_to": false, "fqdn_listname": "open_list@example.com", + "http_etag": "\"0df09b8caf490c5b0108208cf1a653105fcc6893\"", "include_rfc2369_headers": + true, "join_address": "open_list-join@example.com", "last_post_at": null, + "leave_address": "open_list-leave@example.com", "list_name": "open_list", + "mail_host": "example.com", "next_digest_number": 1, "no_reply_address": "noreply@example.com", + "owner_address": "open_list-owner@example.com", "post_id": 1, "posting_address": + "open_list@example.com", "posting_pipeline": "default-posting-pipeline", "reply_goes_to_list": + "no_munging", "reply_to_address": "", "request_address": "open_list-request@example.com", + "scheme": "http", "send_welcome_message": true, "subject_prefix": "[Open_list] + ", "subscription_policy": "confirm", "volume": 1, "web_host": "example.com", + "welcome_message_uri": "mailman:///welcome.txt"}'} + headers: + content-length: ['1763'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: subscription_policy=open + headers: + accept-encoding: ['gzip, deflate'] + !!python/unicode content-type: [!!python/unicode application/x-www-form-urlencoded] + method: !!python/unicode PATCH + uri: http://localhost:9001/3.0/lists/open_list@example.com/config + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + status: {code: 204, message: No Content} +- request: + body: fqdn_listname=moderate_subs%40example.com + headers: + accept-encoding: ['gzip, deflate'] + !!python/unicode content-type: [!!python/unicode application/x-www-form-urlencoded] + method: !!python/unicode POST + uri: http://localhost:9001/3.0/lists + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + location: ['http://localhost:9001/3.0/lists/moderate_subs.example.com'] + status: {code: 201, message: Created} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs.example.com + response: + body: {string: !!python/unicode '{"display_name": "Moderate_subs", "fqdn_listname": + "moderate_subs@example.com", "http_etag": "\"4cf5a031a451ad84a54e4c708cacda8e676e617f\"", + "list_id": "moderate_subs.example.com", "list_name": "moderate_subs", "mail_host": + "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.0/lists/moderate_subs.example.com", + "volume": 1}'} + headers: + content-length: ['344'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs@example.com/config + response: + body: {string: !!python/unicode '{"acceptable_aliases": [], "admin_immed_notify": + true, "admin_notify_mchanges": false, "administrivia": true, "advertised": + true, "allow_list_posts": true, "anonymous_list": false, "archive_policy": + "public", "autorespond_owner": "none", "autorespond_postings": "none", "autorespond_requests": + "none", "autoresponse_grace_period": "90d", "autoresponse_owner_text": "", + "autoresponse_postings_text": "", "autoresponse_request_text": "", "bounces_address": + "moderate_subs-bounces@example.com", "collapse_alternatives": true, "convert_html_to_plaintext": + false, "created_at": "2005-08-01T07:49:23", "default_member_action": "defer", + "default_nonmember_action": "hold", "description": "", "digest_last_sent_at": + null, "digest_send_periodic": true, "digest_size_threshold": 30.0, "digest_volume_frequency": + "monthly", "digests_enabled": true, "display_name": "Moderate_subs", "filter_content": + false, "first_strip_reply_to": false, "fqdn_listname": "moderate_subs@example.com", + "http_etag": "\"0ef83c8b84b16db2b497557f2d5cbba080ff1f77\"", "include_rfc2369_headers": + true, "join_address": "moderate_subs-join@example.com", "last_post_at": null, + "leave_address": "moderate_subs-leave@example.com", "list_name": "moderate_subs", + "mail_host": "example.com", "next_digest_number": 1, "no_reply_address": "noreply@example.com", + "owner_address": "moderate_subs-owner@example.com", "post_id": 1, "posting_address": + "moderate_subs@example.com", "posting_pipeline": "default-posting-pipeline", + "reply_goes_to_list": "no_munging", "reply_to_address": "", "request_address": + "moderate_subs-request@example.com", "scheme": "http", "send_welcome_message": + true, "subject_prefix": "[Moderate_subs] ", "subscription_policy": "confirm", + "volume": 1, "web_host": "example.com", "welcome_message_uri": "mailman:///welcome.txt"}'} + headers: + content-length: ['1803'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: subscription_policy=moderate + headers: + accept-encoding: ['gzip, deflate'] + !!python/unicode content-type: [!!python/unicode application/x-www-form-urlencoded] + method: !!python/unicode PATCH + uri: http://localhost:9001/3.0/lists/moderate_subs@example.com/config + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + status: {code: 204, message: No Content} +- request: + body: email=test%40example.com + headers: + accept-encoding: ['gzip, deflate'] + !!python/unicode content-type: [!!python/unicode application/x-www-form-urlencoded] + method: !!python/unicode POST + uri: http://localhost:9001/3.0/users + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + location: ['http://localhost:9001/3.0/users/1'] + status: {code: 201, message: Created} +- request: + body: email=fritz%40example.org + headers: + accept-encoding: ['gzip, deflate'] + !!python/unicode content-type: [!!python/unicode application/x-www-form-urlencoded] + method: !!python/unicode POST + uri: http://localhost:9001/3.0/users/1/addresses + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + location: ['http://localhost:9001/3.0/addresses/fritz@example.org'] + status: {code: 201, message: Created} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode POST + uri: http://localhost:9001/3.0/addresses/fritz@example.org/verify + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + status: {code: 204, message: No Content} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs.example.com + response: + body: {string: !!python/unicode '{"display_name": "Moderate_subs", "fqdn_listname": + "moderate_subs@example.com", "http_etag": "\"4cf5a031a451ad84a54e4c708cacda8e676e617f\"", + "list_id": "moderate_subs.example.com", "list_name": "moderate_subs", "mail_host": + "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.0/lists/moderate_subs.example.com", + "volume": 1}'} + headers: + content-length: ['344'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/users/test@example.com + response: + body: {string: !!python/unicode '{"created_on": "2005-08-01T07:49:23", "http_etag": + "\"d000604df7fcf30f09fb110b78bb199a2f4354a3\"", "is_server_owner": false, + "password": "$6$rounds=659686$FJfzJ0zbBHLK53.o$7pD4Z9ueX8OmPOpIHMsZ52rLufxDxzHcF5w8v7DYEuSI5ibQ3sHEVXsU4upeGbMZAHiElHwIIyulDm24m9vgV/", + "self_link": "http://localhost:9001/3.0/users/1", "user_id": 1}'} + headers: + content-length: ['324'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/users/1/addresses + response: + body: {string: !!python/unicode '{"entries": [{"email": "fritz@example.org", "http_etag": + "\"beba50816195251c83f486bbd257e29fd639385f\"", "original_email": "fritz@example.org", + "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.0/addresses/fritz@example.org", + "user": "http://localhost:9001/3.0/users/1", "verified_on": "2005-08-01T07:49:23"}, + {"email": "test@example.com", "http_etag": "\"0e805a389459bccaa6e81517808582547119e624\"", + "original_email": "test@example.com", "registered_on": "2005-08-01T07:49:23", + "self_link": "http://localhost:9001/3.0/addresses/test@example.com", "user": + "http://localhost:9001/3.0/users/1"}], "http_etag": "\"ee559713b362b6255ec837d55998b5008bee5f45\"", + "start": 0, "total_size": 2}'} + headers: + content-length: ['712'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs.example.com/roster/owner + response: + body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", + "start": 0, "total_size": 0}'} + headers: + content-length: ['90'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs.example.com/roster/moderator + response: + body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", + "start": 0, "total_size": 0}'} + headers: + content-length: ['90'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: display_name=None&list_id=moderate_subs.example.com&pre_confirmed=True&pre_verified=True&subscriber=test%40example.com + headers: + accept-encoding: ['gzip, deflate'] + !!python/unicode content-type: [!!python/unicode application/x-www-form-urlencoded] + method: !!python/unicode POST + uri: http://localhost:9001/3.0/members + response: + body: {string: !!python/unicode '{"http_etag": "\"8171955e8578477ccef9f84470dd4b8e2ebb3615\"", + "token": "0000000000000000000000000000000000000001", "token_owner": "moderator"}'} + headers: + content-length: ['142'] + content-type: [application/json; charset=utf-8] + status: {code: 202, message: Accepted} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs@example.com/roster/member + response: + body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", + "start": 0, "total_size": 0}'} + headers: + content-length: ['90'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs@example.com/requests + response: + body: {string: !!python/unicode '{"entries": [{"display_name": "", "email": "test@example.com", + "http_etag": "\"8efa5e1807fb677a182a8fad178f764070f16556\"", "list_id": "moderate_subs.example.com", + "token": "0000000000000000000000000000000000000001", "token_owner": "moderator", + "type": "subscription", "when": "2005-08-01T07:49:23"}], "http_etag": "\"389657a991521e274eeead2cd3166d897f1cb4cf\"", + "start": 0, "total_size": 1}'} + headers: + content-length: ['391'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs@example.com/config + response: + body: {string: !!python/unicode '{"acceptable_aliases": [], "admin_immed_notify": + true, "admin_notify_mchanges": false, "administrivia": true, "advertised": + true, "allow_list_posts": true, "anonymous_list": false, "archive_policy": + "public", "autorespond_owner": "none", "autorespond_postings": "none", "autorespond_requests": + "none", "autoresponse_grace_period": "90d", "autoresponse_owner_text": "", + "autoresponse_postings_text": "", "autoresponse_request_text": "", "bounces_address": + "moderate_subs-bounces@example.com", "collapse_alternatives": true, "convert_html_to_plaintext": + false, "created_at": "2005-08-01T07:49:23", "default_member_action": "defer", + "default_nonmember_action": "hold", "description": "", "digest_last_sent_at": + null, "digest_send_periodic": true, "digest_size_threshold": 30.0, "digest_volume_frequency": + "monthly", "digests_enabled": true, "display_name": "Moderate_subs", "filter_content": + false, "first_strip_reply_to": false, "fqdn_listname": "moderate_subs@example.com", + "http_etag": "\"d3e0584c03eeb46b4dbfe4412a8d63477a9c3d3c\"", "include_rfc2369_headers": + true, "join_address": "moderate_subs-join@example.com", "last_post_at": null, + "leave_address": "moderate_subs-leave@example.com", "list_name": "moderate_subs", + "mail_host": "example.com", "next_digest_number": 1, "no_reply_address": "noreply@example.com", + "owner_address": "moderate_subs-owner@example.com", "post_id": 1, "posting_address": + "moderate_subs@example.com", "posting_pipeline": "default-posting-pipeline", + "reply_goes_to_list": "no_munging", "reply_to_address": "", "request_address": + "moderate_subs-request@example.com", "scheme": "http", "send_welcome_message": + true, "subject_prefix": "[Moderate_subs] ", "subscription_policy": "moderate", + "volume": 1, "web_host": "example.com", "welcome_message_uri": "mailman:///welcome.txt"}'} + headers: + content-length: ['1804'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: subscription_policy=open + headers: + accept-encoding: ['gzip, deflate'] + !!python/unicode content-type: [!!python/unicode application/x-www-form-urlencoded] + method: !!python/unicode PATCH + uri: http://localhost:9001/3.0/lists/moderate_subs@example.com/config + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + status: {code: 204, message: No Content} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs@example.com/config + response: + body: {string: !!python/unicode '{"acceptable_aliases": [], "admin_immed_notify": + true, "admin_notify_mchanges": false, "administrivia": true, "advertised": + true, "allow_list_posts": true, "anonymous_list": false, "archive_policy": + "public", "autorespond_owner": "none", "autorespond_postings": "none", "autorespond_requests": + "none", "autoresponse_grace_period": "90d", "autoresponse_owner_text": "", + "autoresponse_postings_text": "", "autoresponse_request_text": "", "bounces_address": + "moderate_subs-bounces@example.com", "collapse_alternatives": true, "convert_html_to_plaintext": + false, "created_at": "2005-08-01T07:49:23", "default_member_action": "defer", + "default_nonmember_action": "hold", "description": "", "digest_last_sent_at": + null, "digest_send_periodic": true, "digest_size_threshold": 30.0, "digest_volume_frequency": + "monthly", "digests_enabled": true, "display_name": "Moderate_subs", "filter_content": + false, "first_strip_reply_to": false, "fqdn_listname": "moderate_subs@example.com", + "http_etag": "\"d7aa0fd214f12d213401f69434fa4ea4915ca5e6\"", "include_rfc2369_headers": + true, "join_address": "moderate_subs-join@example.com", "last_post_at": null, + "leave_address": "moderate_subs-leave@example.com", "list_name": "moderate_subs", + "mail_host": "example.com", "next_digest_number": 1, "no_reply_address": "noreply@example.com", + "owner_address": "moderate_subs-owner@example.com", "post_id": 1, "posting_address": + "moderate_subs@example.com", "posting_pipeline": "default-posting-pipeline", + "reply_goes_to_list": "no_munging", "reply_to_address": "", "request_address": + "moderate_subs-request@example.com", "scheme": "http", "send_welcome_message": + true, "subject_prefix": "[Moderate_subs] ", "subscription_policy": "open", + "volume": 1, "web_host": "example.com", "welcome_message_uri": "mailman:///welcome.txt"}'} + headers: + content-length: ['1800'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: display_name=None&list_id=moderate_subs.example.com&subscriber=test%40example.com + headers: + accept-encoding: ['gzip, deflate'] + !!python/unicode content-type: [!!python/unicode application/x-www-form-urlencoded] + method: !!python/unicode POST + uri: http://localhost:9001/3.0/members + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + location: ['http://localhost:9001/3.0/members/1'] + status: {code: 201, message: Created} +- request: + body: list_id=moderate_subs.example.com&role=owner&subscriber=owner%40example.com + headers: + accept-encoding: ['gzip, deflate'] + !!python/unicode content-type: [!!python/unicode application/x-www-form-urlencoded] + method: !!python/unicode POST + uri: http://localhost:9001/3.0/members + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + location: ['http://localhost:9001/3.0/members/2'] + status: {code: 201, message: Created} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs@example.com/requests + response: + body: {string: !!python/unicode '{"entries": [{"display_name": "", "email": "test@example.com", + "http_etag": "\"8efa5e1807fb677a182a8fad178f764070f16556\"", "list_id": "moderate_subs.example.com", + "token": "0000000000000000000000000000000000000001", "token_owner": "moderator", + "type": "subscription", "when": "2005-08-01T07:49:23"}], "http_etag": "\"389657a991521e274eeead2cd3166d897f1cb4cf\"", + "start": 0, "total_size": 1}'} + headers: + content-length: ['391'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs.example.com + response: + body: {string: !!python/unicode '{"display_name": "Moderate_subs", "fqdn_listname": + "moderate_subs@example.com", "http_etag": "\"a6393b93de923071ca7ff53a24659f3af9943b1a\"", + "list_id": "moderate_subs.example.com", "list_name": "moderate_subs", "mail_host": + "example.com", "member_count": 1, "self_link": "http://localhost:9001/3.0/lists/moderate_subs.example.com", + "volume": 1}'} + headers: + content-length: ['344'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/users/owner@example.com + response: + body: {string: !!python/unicode '{"created_on": "2005-08-01T07:49:23", "http_etag": + "\"b36f8ca1d91d583901c768dc116815282d469c66\"", "is_server_owner": false, + "self_link": "http://localhost:9001/3.0/users/2", "user_id": 2}'} + headers: + content-length: ['188'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/users/2/addresses + response: + body: {string: !!python/unicode '{"entries": [{"email": "owner@example.com", "http_etag": + "\"6d4a96d1a2b0769920049ab9095c2fa1404cf393\"", "original_email": "owner@example.com", + "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.0/addresses/owner@example.com", + "user": "http://localhost:9001/3.0/users/2"}], "http_etag": "\"6ea82977c32c28e8aa28a1dc75a795d4ae1c336b\"", + "start": 0, "total_size": 1}'} + headers: + content-length: ['390'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs.example.com/roster/owner + response: + body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.0/addresses/owner@example.com", + "delivery_mode": "regular", "email": "owner@example.com", "http_etag": "\"c2bb2d9adfc185c7d38c14643224570fe8747fda\"", + "list_id": "moderate_subs.example.com", "member_id": 2, "moderation_action": + "accept", "role": "owner", "self_link": "http://localhost:9001/3.0/members/2", + "user": "http://localhost:9001/3.0/users/2"}], "http_etag": "\"bb5aee1cdfd2fb8488fe4673d767098ebeb900ac\"", + "start": 0, "total_size": 1}'} + headers: + content-length: ['493'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs.example.com/roster/moderator + response: + body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", + "start": 0, "total_size": 0}'} + headers: + content-length: ['90'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs.example.com + response: + body: {string: !!python/unicode '{"display_name": "Moderate_subs", "fqdn_listname": + "moderate_subs@example.com", "http_etag": "\"a6393b93de923071ca7ff53a24659f3af9943b1a\"", + "list_id": "moderate_subs.example.com", "list_name": "moderate_subs", "mail_host": + "example.com", "member_count": 1, "self_link": "http://localhost:9001/3.0/lists/moderate_subs.example.com", + "volume": 1}'} + headers: + content-length: ['344'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: action=accept + headers: + accept-encoding: ['gzip, deflate'] + !!python/unicode content-type: [!!python/unicode application/x-www-form-urlencoded] + method: !!python/unicode POST + uri: http://localhost:9001/3.0/lists/moderate_subs.example.com/requests/0000000000000000000000000000000000000001 + response: + body: {string: !!python/unicode Already subscribed} + headers: + content-length: ['18'] + content-type: [application/json; charset=utf-8] + status: {code: 409, message: Conflict} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs.example.com + response: + body: {string: !!python/unicode '{"display_name": "Moderate_subs", "fqdn_listname": + "moderate_subs@example.com", "http_etag": "\"a6393b93de923071ca7ff53a24659f3af9943b1a\"", + "list_id": "moderate_subs.example.com", "list_name": "moderate_subs", "mail_host": + "example.com", "member_count": 1, "self_link": "http://localhost:9001/3.0/lists/moderate_subs.example.com", + "volume": 1}'} + headers: + content-length: ['344'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/users/owner@example.com + response: + body: {string: !!python/unicode '{"created_on": "2005-08-01T07:49:23", "http_etag": + "\"b36f8ca1d91d583901c768dc116815282d469c66\"", "is_server_owner": false, + "self_link": "http://localhost:9001/3.0/users/2", "user_id": 2}'} + headers: + content-length: ['188'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/users/2/addresses + response: + body: {string: !!python/unicode '{"entries": [{"email": "owner@example.com", "http_etag": + "\"6d4a96d1a2b0769920049ab9095c2fa1404cf393\"", "original_email": "owner@example.com", + "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.0/addresses/owner@example.com", + "user": "http://localhost:9001/3.0/users/2"}], "http_etag": "\"6ea82977c32c28e8aa28a1dc75a795d4ae1c336b\"", + "start": 0, "total_size": 1}'} + headers: + content-length: ['390'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs.example.com/roster/owner + response: + body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.0/addresses/owner@example.com", + "delivery_mode": "regular", "email": "owner@example.com", "http_etag": "\"c2bb2d9adfc185c7d38c14643224570fe8747fda\"", + "list_id": "moderate_subs.example.com", "member_id": 2, "moderation_action": + "accept", "role": "owner", "self_link": "http://localhost:9001/3.0/members/2", + "user": "http://localhost:9001/3.0/users/2"}], "http_etag": "\"bb5aee1cdfd2fb8488fe4673d767098ebeb900ac\"", + "start": 0, "total_size": 1}'} + headers: + content-length: ['493'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs.example.com/roster/moderator + response: + body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", + "start": 0, "total_size": 0}'} + headers: + content-length: ['90'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs.example.com + response: + body: {string: !!python/unicode '{"display_name": "Moderate_subs", "fqdn_listname": + "moderate_subs@example.com", "http_etag": "\"a6393b93de923071ca7ff53a24659f3af9943b1a\"", + "list_id": "moderate_subs.example.com", "list_name": "moderate_subs", "mail_host": + "example.com", "member_count": 1, "self_link": "http://localhost:9001/3.0/lists/moderate_subs.example.com", + "volume": 1}'} + headers: + content-length: ['344'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs@example.com/requests + response: + body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", + "start": 0, "total_size": 0}'} + headers: + content-length: ['90'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/open_list@example.com/requests + response: + body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", + "start": 0, "total_size": 0}'} + headers: + content-length: ['90'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode GET + uri: http://localhost:9001/3.0/lists/moderate_subs@example.com/requests + response: + body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", + "start": 0, "total_size": 0}'} + headers: + content-length: ['90'] + content-type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode DELETE + uri: http://localhost:9001/3.0/lists/open_list@example.com + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + status: {code: 204, message: No Content} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode DELETE + uri: http://localhost:9001/3.0/lists/moderate_subs@example.com + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + status: {code: 204, message: No Content} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode DELETE + uri: http://localhost:9001/3.0/users/1 + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + status: {code: 204, message: No Content} +- request: + body: null + headers: + accept-encoding: ['gzip, deflate'] + method: !!python/unicode DELETE + uri: http://localhost:9001/3.0/domains/example.com + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + status: {code: 204, message: No Content} +version: 1 diff --git a/src/postorius/tests/mailman_api_tests/test_subscriptions.py b/src/postorius/tests/mailman_api_tests/test_subscriptions.py index 78119a4..b0098bb 100644 --- a/src/postorius/tests/mailman_api_tests/test_subscriptions.py +++ b/src/postorius/tests/mailman_api_tests/test_subscriptions.py @@ -120,3 +120,35 @@ self.assertRedirects(response, reverse('list_summary', args=('moderate_subs.example.com', ))) self.assertHasSuccessMessage(response) + + def test_subscribe_mod_then_open(self): + # The list is moderated when the subscription is requested, then the + # list is switched to open. + self.client.login(username='testuser', password='pwd') + response = self.client.post( + reverse('list_subscribe', args=('moderate_subs.example.com', )), + {'email': 'test@example.com'}) + self.assertEqual(len(self.mod_list.members), 0) + self.assertEqual(len(self.mod_list.requests), 1) + self.assertHasSuccessMessage(response) + # Switch the list to 'open' + self.mod_list.settings['subscription_policy'] = 'open' + self.mod_list.settings.save() + self.assertEqual(self.mod_list.settings['subscription_policy'], 'open') + # Subscribe the user (they are now allowed to self-subscribe) + self.mod_list.subscribe('test@example.com') + # Login as the owner to accept the subscription + owner = User.objects.create_user( + 'testowner', 'owner@example.com', 'pwd') + self.mod_list.add_owner('owner@example.com') + self.client.logout() + self.client.login(username='testowner', password='pwd') + accept_url = reverse( + 'handle_subscription_request', args=['moderate_subs.example.com', + self.mod_list.requests[0]['token'], 'accept']) + response = self.client.get(accept_url) + self.assertRedirects( + response, reverse('list_subscription_requests', + args=['moderate_subs.example.com'])) + message = self.assertHasSuccessMessage(response) + self.assertIn('Already subscribed', message) diff --git a/src/postorius/views/list.py b/src/postorius/views/list.py index 5c7ff62..8bb777d 100644 --- a/src/postorius/views/list.py +++ b/src/postorius/views/list.py @@ -612,7 +612,12 @@ except MailmanApiError: return utils.render_api_error(request) except HTTPError as e: - messages.error(request, _('The request could not be moderated: %s') % e.reason) + if e.code == 409: + messages.success(request, + _('The request was already moderated: %s') % e.reason) + else: + messages.error(request, + _('The request could not be moderated: %s') % e.reason) return redirect('list_subscription_requests', m_list.list_id)