~abompard/mailman/pgsql_upgrade

« back to all changes in this revision

Viewing changes to src/mailman/rest/tests/test_addresses.py

  • Committer: Barry Warsaw
  • Date: 2014-04-15 03:12:01 UTC
  • mfrom: (7240.1.1 floaddr)
  • Revision ID: barry@list.org-20140415031201-td1fuuyvptco2pqy
 * Addresses can be added to existing users, including display names, via the
   REST API.  [Florian Fuchs]

Also, email addresses are validated when they are added via the IUserManager
interface.  They are still also validated when subscribing to a mailing list,
but that is redundant.

Show diffs side-by-side

added added

removed removed

Lines of Context:
109
109
            call_api('http://localhost:9001/3.0/addresses/'
110
110
                     'anne@example.com/unverify/foo', {})
111
111
        self.assertEqual(cm.exception.code, 400)
 
112
 
 
113
    def test_address_added_to_user(self):
 
114
        # Address is added to a user record.
 
115
        user_manager = getUtility(IUserManager)
 
116
        with transaction():
 
117
            anne = user_manager.create_user('anne@example.com')
 
118
        response, content = call_api(
 
119
            'http://localhost:9001/3.0/users/anne@example.com/addresses', {
 
120
                'email': 'anne.person@example.org',
 
121
                })
 
122
        self.assertIn('anne.person@example.org',
 
123
                      [addr.email for addr in anne.addresses])
 
124
        self.assertEqual(content['status'], '201')
 
125
        self.assertEqual(
 
126
            content['location'],
 
127
            'http://localhost:9001/3.0/addresses/anne.person@example.org')
 
128
        # The address has no display name.
 
129
        anne_person = user_manager.get_address('anne.person@example.org')
 
130
        self.assertEqual(anne_person.display_name, '')
 
131
 
 
132
    def test_address_and_display_name_added_to_user(self):
 
133
        # Address with a display name is added to the user record.
 
134
        user_manager = getUtility(IUserManager)
 
135
        with transaction():
 
136
            anne = user_manager.create_user('anne@example.com')
 
137
        response, content = call_api(
 
138
            'http://localhost:9001/3.0/users/anne@example.com/addresses', {
 
139
                'email': 'anne.person@example.org',
 
140
                'display_name': 'Ann E Person',
 
141
                })
 
142
        self.assertIn('anne.person@example.org',
 
143
                      [addr.email for addr in anne.addresses])
 
144
        self.assertEqual(content['status'], '201')
 
145
        self.assertEqual(
 
146
            content['location'],
 
147
            'http://localhost:9001/3.0/addresses/anne.person@example.org')
 
148
        # The address has no display name.
 
149
        anne_person = user_manager.get_address('anne.person@example.org')
 
150
        self.assertEqual(anne_person.display_name, 'Ann E Person')
 
151
 
 
152
    def test_existing_address_bad_request(self):
 
153
        # Trying to add an existing address returns 400.
 
154
        with transaction():
 
155
            getUtility(IUserManager).create_user('anne@example.com')
 
156
        with self.assertRaises(HTTPError) as cm:
 
157
            call_api(
 
158
                'http://localhost:9001/3.0/users/anne@example.com/addresses', {
 
159
                     'email': 'anne@example.com',
 
160
                     })
 
161
        self.assertEqual(cm.exception.code, 400)
 
162
        self.assertEqual(cm.exception.reason, 'Address already exists')
 
163
 
 
164
    def test_invalid_address_bad_request(self):
 
165
        # Trying to add an invalid address string returns 400.
 
166
        with transaction():
 
167
            getUtility(IUserManager).create_user('anne@example.com')
 
168
        with self.assertRaises(HTTPError) as cm:
 
169
            call_api(
 
170
                'http://localhost:9001/3.0/users/anne@example.com/addresses', {
 
171
                     'email': 'invalid_address_string'
 
172
                     })
 
173
        self.assertEqual(cm.exception.code, 400)
 
174
        self.assertEqual(cm.exception.reason, 'Invalid email address')
 
175
 
 
176
    def test_empty_address_bad_request(self):
 
177
        # The address is required.
 
178
        with transaction():
 
179
            getUtility(IUserManager).create_user('anne@example.com')
 
180
        with self.assertRaises(HTTPError) as cm:
 
181
            call_api(
 
182
                'http://localhost:9001/3.0/users/anne@example.com/addresses',
 
183
                {})
 
184
        self.assertEqual(cm.exception.code, 400)
 
185
        self.assertEqual(cm.exception.reason, 'Missing parameters: email')
 
186
 
 
187
    def test_add_address_to_missing_user(self):
 
188
        # The user that the address is being added to must exist.
 
189
        with self.assertRaises(HTTPError) as cm:
 
190
            call_api(
 
191
                'http://localhost:9001/3.0/users/anne@example.com/addresses', {
 
192
                    'email': 'anne.person@example.org',
 
193
                    })
 
194
        self.assertEqual(cm.exception.code, 404)