Commit 7fcf4e3d by Greg Price

fixup! Enforce MAX_COMMENT_DEPTH in discussion_api

Add more extensive testing
parent f47ab2bb
...@@ -303,7 +303,7 @@ class CommentSerializer(_ContentSerializer): ...@@ -303,7 +303,7 @@ class CommentSerializer(_ContentSerializer):
"parent_id does not identify a comment in the thread identified by thread_id." "parent_id does not identify a comment in the thread identified by thread_id."
) )
if is_comment_too_deep(parent): if is_comment_too_deep(parent):
raise ValidationError({"parent_id": ["Parent is too deep."]}) raise ValidationError({"parent_id": ["Comment level is too deep."]})
return attrs return attrs
def restore_object(self, attrs, instance=None): def restore_object(self, attrs, instance=None):
......
...@@ -644,18 +644,36 @@ class CommentSerializerDeserializationTest(CommentsServiceMockMixin, ModuleStore ...@@ -644,18 +644,36 @@ class CommentSerializerDeserializationTest(CommentsServiceMockMixin, ModuleStore
} }
) )
def test_create_parent_id_too_deep(self): @ddt.data(None, -1, 0, 2, 5)
def test_create_parent_id_too_deep(self, max_depth):
with mock.patch("django_comment_client.utils.MAX_COMMENT_DEPTH", max_depth):
data = self.minimal_data.copy()
context = get_context(self.course, self.request, make_minimal_cs_thread())
if max_depth is None or max_depth >= 0:
if max_depth != 0:
self.register_get_comment_response({ self.register_get_comment_response({
"id": "test_parent", "id": "not_too_deep",
"thread_id": "test_thread", "thread_id": "test_thread",
"depth": 2 "depth": max_depth - 1 if max_depth else 100
}) })
data = self.minimal_data.copy() data["parent_id"] = "not_too_deep"
data["parent_id"] = "test_parent" else:
context = get_context(self.course, self.request, make_minimal_cs_thread()) data["parent_id"] = None
serializer = CommentSerializer(data=data, context=context)
self.assertTrue(serializer.is_valid(), serializer.errors)
if max_depth is not None:
if max_depth >= 0:
self.register_get_comment_response({
"id": "too_deep",
"thread_id": "test_thread",
"depth": max_depth
})
data["parent_id"] = "too_deep"
else:
data["parent_id"] = None
serializer = CommentSerializer(data=data, context=context) serializer = CommentSerializer(data=data, context=context)
self.assertFalse(serializer.is_valid()) self.assertFalse(serializer.is_valid())
self.assertEqual(serializer.errors, {"parent_id": ["Parent is too deep."]}) self.assertEqual(serializer.errors, {"parent_id": ["Comment level is too deep."]})
def test_create_missing_field(self): def test_create_missing_field(self):
for field in self.minimal_data: for field in self.minimal_data:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment