Update Permissions to use latest edx-drf-extensions and rest_condition
This commit is contained in:
@@ -315,12 +315,13 @@ def _get_authorized_user(requesting_user, username=None, allow_staff=False):
|
||||
# Otherwise, treat this as a request against a separate user
|
||||
username = requesting_user.username
|
||||
|
||||
_check_authorized(requesting_user, username, allow_staff)
|
||||
|
||||
try:
|
||||
existing_user = User.objects.get(username=username)
|
||||
except ObjectDoesNotExist:
|
||||
raise UserNotFound()
|
||||
|
||||
_check_authorized(requesting_user, username, allow_staff)
|
||||
return existing_user
|
||||
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ class TestPreferenceAPI(CacheIsolationTestCase):
|
||||
"""
|
||||
Verifies that get_user_preference returns appropriate errors.
|
||||
"""
|
||||
with self.assertRaises(UserNotFound):
|
||||
with self.assertRaises(UserNotAuthorized):
|
||||
get_user_preference(self.user, self.test_preference_key, username="no_such_user")
|
||||
|
||||
with self.assertRaises(UserNotFound):
|
||||
@@ -100,7 +100,7 @@ class TestPreferenceAPI(CacheIsolationTestCase):
|
||||
"""
|
||||
Verifies that get_user_preferences returns appropriate errors.
|
||||
"""
|
||||
with self.assertRaises(UserNotFound):
|
||||
with self.assertRaises(UserNotAuthorized):
|
||||
get_user_preferences(self.user, username="no_such_user")
|
||||
|
||||
with self.assertRaises(UserNotFound):
|
||||
@@ -125,7 +125,7 @@ class TestPreferenceAPI(CacheIsolationTestCase):
|
||||
"""
|
||||
Verifies that set_user_preference returns appropriate errors.
|
||||
"""
|
||||
with self.assertRaises(UserNotFound):
|
||||
with self.assertRaises(UserNotAuthorized):
|
||||
set_user_preference(self.user, self.test_preference_key, "new_value", username="no_such_user")
|
||||
|
||||
with self.assertRaises(UserNotFound):
|
||||
@@ -227,7 +227,7 @@ class TestPreferenceAPI(CacheIsolationTestCase):
|
||||
update_data = {
|
||||
self.test_preference_key: "new_value"
|
||||
}
|
||||
with self.assertRaises(UserNotFound):
|
||||
with self.assertRaises(UserNotAuthorized):
|
||||
update_user_preferences(self.user, update_data, user="no_such_user")
|
||||
|
||||
with self.assertRaises(UserNotFound):
|
||||
@@ -303,7 +303,7 @@ class TestPreferenceAPI(CacheIsolationTestCase):
|
||||
"""
|
||||
Verifies that delete_user_preference returns appropriate errors.
|
||||
"""
|
||||
with self.assertRaises(UserNotFound):
|
||||
with self.assertRaises(UserNotAuthorized):
|
||||
delete_user_preference(self.user, self.test_preference_key, username="no_such_user")
|
||||
|
||||
with self.assertRaises(UserNotFound):
|
||||
|
||||
@@ -52,7 +52,7 @@ class TestPreferencesAPI(UserAPITestCase):
|
||||
Test that a client (logged in) cannot get the preferences information for a different client.
|
||||
"""
|
||||
self.different_client.login(username=self.different_user.username, password=TEST_PASSWORD)
|
||||
self.send_get(self.different_client, expected_status=404)
|
||||
self.send_get(self.different_client, expected_status=403)
|
||||
|
||||
@ddt.data(
|
||||
("client", "user"),
|
||||
@@ -61,11 +61,11 @@ class TestPreferencesAPI(UserAPITestCase):
|
||||
@ddt.unpack
|
||||
def test_get_unknown_user(self, api_client, username):
|
||||
"""
|
||||
Test that requesting a user who does not exist returns a 404.
|
||||
Test that requesting a user who does not exist returns a 404 for staff users, but 403 for others.
|
||||
"""
|
||||
client = self.login_client(api_client, username)
|
||||
response = client.get(reverse(self.url_endpoint_name, kwargs={'username': "does_not_exist"}))
|
||||
self.assertEqual(404, response.status_code)
|
||||
self.assertEqual(404 if username == "staff_user" else 403, response.status_code)
|
||||
|
||||
def test_get_preferences_default(self):
|
||||
"""
|
||||
@@ -83,8 +83,7 @@ class TestPreferencesAPI(UserAPITestCase):
|
||||
@ddt.unpack
|
||||
def test_get_preferences(self, api_client, user):
|
||||
"""
|
||||
Test that a client (logged in) can get her own preferences information. Also verifies that a "is_staff"
|
||||
user can get the preferences information for other users.
|
||||
Test that a client (logged in) can get her own preferences information.
|
||||
"""
|
||||
# Create some test preferences values.
|
||||
set_user_preference(self.user, "dict_pref", {"int_key": 10})
|
||||
@@ -104,14 +103,14 @@ class TestPreferencesAPI(UserAPITestCase):
|
||||
@ddt.unpack
|
||||
def test_patch_unknown_user(self, api_client, user):
|
||||
"""
|
||||
Test that trying to update preferences for a user who does not exist returns a 404.
|
||||
Test that trying to update preferences for a user who does not exist returns a 403.
|
||||
"""
|
||||
client = self.login_client(api_client, user)
|
||||
response = client.patch(
|
||||
reverse(self.url_endpoint_name, kwargs={'username': "does_not_exist"}),
|
||||
data=json.dumps({"string_pref": "value"}), content_type="application/merge-patch+json"
|
||||
)
|
||||
self.assertEqual(404, response.status_code)
|
||||
self.assertEqual(403, response.status_code)
|
||||
|
||||
def test_patch_bad_content_type(self):
|
||||
"""
|
||||
@@ -168,7 +167,7 @@ class TestPreferencesAPI(UserAPITestCase):
|
||||
"dict_pref": {"int_key": 10},
|
||||
"string_pref": "value",
|
||||
},
|
||||
expected_status=403 if user == "staff_user" else 404,
|
||||
expected_status=403,
|
||||
)
|
||||
|
||||
def test_update_preferences(self):
|
||||
@@ -311,7 +310,7 @@ class TestPreferencesAPI(UserAPITestCase):
|
||||
"new_pref": "new_value",
|
||||
"extra_pref": None,
|
||||
},
|
||||
expected_status=403 if user == "staff_user" else 404
|
||||
expected_status=403
|
||||
)
|
||||
|
||||
|
||||
@@ -405,9 +404,9 @@ class TestPreferencesDetailAPI(UserAPITestCase):
|
||||
Test that a client (logged in) cannot manipulate a preference for a different client.
|
||||
"""
|
||||
self.different_client.login(username=self.different_user.username, password=TEST_PASSWORD)
|
||||
self.send_get(self.different_client, expected_status=404)
|
||||
self.send_put(self.different_client, "new_value", expected_status=404)
|
||||
self.send_delete(self.different_client, expected_status=404)
|
||||
self.send_get(self.different_client, expected_status=403)
|
||||
self.send_put(self.different_client, "new_value", expected_status=403)
|
||||
self.send_delete(self.different_client, expected_status=403)
|
||||
|
||||
@ddt.data(
|
||||
("client", "user"),
|
||||
@@ -416,13 +415,13 @@ class TestPreferencesDetailAPI(UserAPITestCase):
|
||||
@ddt.unpack
|
||||
def test_get_unknown_user(self, api_client, username):
|
||||
"""
|
||||
Test that requesting a user who does not exist returns a 404.
|
||||
Test that requesting a user who does not exist returns a 404 for staff users, but 403 for others.
|
||||
"""
|
||||
client = self.login_client(api_client, username)
|
||||
response = client.get(
|
||||
reverse(self.url_endpoint_name, kwargs={'username': "does_not_exist", 'preference_key': self.test_pref_key})
|
||||
)
|
||||
self.assertEqual(404, response.status_code)
|
||||
self.assertEqual(404 if username == "staff_user" else 403, response.status_code)
|
||||
|
||||
def test_get_preference_does_not_exist(self):
|
||||
"""
|
||||
@@ -532,7 +531,7 @@ class TestPreferencesDetailAPI(UserAPITestCase):
|
||||
self._set_url("new_key")
|
||||
client = self.login_client(api_client, user)
|
||||
new_value = "new value"
|
||||
self.send_put(client, new_value, expected_status=403 if user == "staff_user" else 404)
|
||||
self.send_put(client, new_value, expected_status=403)
|
||||
|
||||
@ddt.data(
|
||||
(u"new value",),
|
||||
@@ -560,7 +559,7 @@ class TestPreferencesDetailAPI(UserAPITestCase):
|
||||
"""
|
||||
client = self.login_client(api_client, user)
|
||||
new_value = "new value"
|
||||
self.send_put(client, new_value, expected_status=403 if user == "staff_user" else 404)
|
||||
self.send_put(client, new_value, expected_status=403)
|
||||
|
||||
@ddt.data(
|
||||
(None,),
|
||||
@@ -607,4 +606,4 @@ class TestPreferencesDetailAPI(UserAPITestCase):
|
||||
Test that a client (logged in) cannot delete a preference for another user.
|
||||
"""
|
||||
client = self.login_client(api_client, user)
|
||||
self.send_delete(client, expected_status=403 if user == "staff_user" else 404)
|
||||
self.send_delete(client, expected_status=403)
|
||||
|
||||
Reference in New Issue
Block a user