diff options
author | Stephen Finucane <stephen@that.guru> | 2019-11-30 18:48:36 +0000 |
---|---|---|
committer | Stephen Finucane <stephen@that.guru> | 2019-12-24 11:15:21 +0000 |
commit | cd3a2ce81ae4595fceb82edd43488f6f2422371e (patch) | |
tree | 372bcdb29cf5f70dcfd9a096ac57abac450fca61 /patchwork/tests | |
parent | cedfaa9e0b449a939a107794cdb2e61d323cc925 (diff) | |
download | patchwork-cd3a2ce81ae4595fceb82edd43488f6f2422371e.tar patchwork-cd3a2ce81ae4595fceb82edd43488f6f2422371e.tar.gz |
REST: Allow configuration of user settings via API
Expose the embedded UserProfile field via the REST API.
Signed-off-by: Stephen Finucane <stephen@that.guru>
Diffstat (limited to 'patchwork/tests')
-rw-r--r-- | patchwork/tests/api/test_user.py | 80 |
1 files changed, 61 insertions, 19 deletions
diff --git a/patchwork/tests/api/test_user.py b/patchwork/tests/api/test_user.py index dfc4ddf..af340df 100644 --- a/patchwork/tests/api/test_user.py +++ b/patchwork/tests/api/test_user.py @@ -20,17 +20,36 @@ if settings.ENABLE_REST_API: class TestUserAPI(utils.APITestCase): @staticmethod - def api_url(item=None): + def api_url(item=None, version=None): + kwargs = {} + if version: + kwargs['version'] = version + if item is None: - return reverse('api-user-list') - return reverse('api-user-detail', args=[item]) + return reverse('api-user-list', kwargs=kwargs) + kwargs['pk'] = item + return reverse('api-user-detail', kwargs=kwargs) + + def assertSerialized(self, user_obj, user_json, has_settings=False): + user_obj.refresh_from_db() + user_obj.profile.refresh_from_db() - def assertSerialized(self, user_obj, user_json): self.assertEqual(user_obj.id, user_json['id']) self.assertEqual(user_obj.username, user_json['username']) self.assertNotIn('password', user_json) self.assertNotIn('is_superuser', user_json) + if has_settings: + self.assertIn('settings', user_json) + self.assertEqual(user_json['settings']['send_email'], + user_obj.profile.send_email) + self.assertEqual(user_json['settings']['items_per_page'], + user_obj.profile.items_per_page) + self.assertEqual(user_json['settings']['show_ids'], + user_obj.profile.show_ids) + else: + self.assertNotIn('settings', user_json) + @utils.store_samples('users-list-error-forbidden') def test_list_anonymous(self): """List users as anonymous user.""" @@ -60,13 +79,24 @@ class TestUserAPI(utils.APITestCase): @utils.store_samples('users-detail') def test_detail_authenticated(self): - """Show user as authenticated user.""" + """Show user as a user other than self.""" + user_a = create_user() + user_b = create_user() + + self.client.force_authenticate(user=user_a) + resp = self.client.get(self.api_url(user_b.id)) + self.assertEqual(status.HTTP_200_OK, resp.status_code) + self.assertSerialized(user_b, resp.data, has_settings=False) + + @utils.store_samples('users-detail-self') + def test_detail_self(self): + """Show user as self.""" user = create_user() self.client.force_authenticate(user=user) resp = self.client.get(self.api_url(user.id)) self.assertEqual(status.HTTP_200_OK, resp.status_code) - self.assertSerialized(user, resp.data) + self.assertSerialized(user, resp.data, has_settings=True) @utils.store_samples('users-update-error-forbidden') def test_update_anonymous(self): @@ -76,8 +106,9 @@ class TestUserAPI(utils.APITestCase): resp = self.client.patch(self.api_url(user.id), {'first_name': 'Tan'}) self.assertEqual(status.HTTP_403_FORBIDDEN, resp.status_code) + @utils.store_samples('users-update') def test_update_other_user(self): - """Update user as another, non-maintainer user.""" + """Update user as a user other than self.""" user_a = create_user() user_b = create_user() @@ -86,26 +117,37 @@ class TestUserAPI(utils.APITestCase): {'first_name': 'Tan'}) self.assertEqual(status.HTTP_403_FORBIDDEN, resp.status_code) - def test_update_maintainer(self): - """Update user as maintainer.""" - user = create_maintainer() - user.is_superuser = True - user.save() + @utils.store_samples('users-update-self') + def test_update_self(self): + """Update user as self.""" + user = create_user() + self.assertFalse(user.profile.send_email) self.client.force_authenticate(user=user) - resp = self.client.patch(self.api_url(user.id), {'first_name': 'Tan'}) + resp = self.client.patch(self.api_url(user.id), { + 'first_name': 'Tan', 'settings': {'send_email': True}}) self.assertEqual(status.HTTP_200_OK, resp.status_code) - self.assertSerialized(user, resp.data) + self.assertSerialized(user, resp.data, has_settings=True) + self.assertEqual('Tan', user.first_name) + self.assertTrue(user.profile.send_email) - @utils.store_samples('users-update') - def test_update_self(self): - """Update user as self.""" + def test_update_self_version_1_1(self): + """Update user as self using the old API. + + Ensure the profile changes are ignored. + """ user = create_user() + self.assertFalse(user.profile.send_email) self.client.force_authenticate(user=user) - resp = self.client.patch(self.api_url(user.id), {'first_name': 'Tan'}) + resp = self.client.patch( + self.api_url(user.id, version='1.1'), + {'first_name': 'Tan', 'settings': {'send_email': True}}, + validate_request=False) self.assertEqual(status.HTTP_200_OK, resp.status_code) - self.assertSerialized(user, resp.data) + self.assertSerialized(user, resp.data, has_settings=False) + self.assertEqual('Tan', user.first_name) + self.assertFalse(user.profile.send_email) def test_create_delete(self): """Ensure creations and deletions and not allowed.""" |