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)
self.register_get_comment_response({ def test_create_parent_id_too_deep(self, max_depth):
"id": "test_parent", with mock.patch("django_comment_client.utils.MAX_COMMENT_DEPTH", max_depth):
"thread_id": "test_thread", data = self.minimal_data.copy()
"depth": 2 context = get_context(self.course, self.request, make_minimal_cs_thread())
}) if max_depth is None or max_depth >= 0:
data = self.minimal_data.copy() if max_depth != 0:
data["parent_id"] = "test_parent" self.register_get_comment_response({
context = get_context(self.course, self.request, make_minimal_cs_thread()) "id": "not_too_deep",
serializer = CommentSerializer(data=data, context=context) "thread_id": "test_thread",
self.assertFalse(serializer.is_valid()) "depth": max_depth - 1 if max_depth else 100
self.assertEqual(serializer.errors, {"parent_id": ["Parent is too deep."]}) })
data["parent_id"] = "not_too_deep"
else:
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)
self.assertFalse(serializer.is_valid())
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