def test_create_success(self, parent_id): data = self.minimal_data.copy() if parent_id: data["parent_id"] = parent_id self.register_get_comment_response({ "thread_id": "test_thread", "id": parent_id }) self.register_post_comment_response( { "id": "test_comment", "username": self.user.username }, thread_id="test_thread", parent_id=parent_id) saved = self.save_and_reserialize(data) expected_url = (f"/api/v1/comments/{parent_id}" if parent_id else "/api/v1/threads/test_thread/comments") assert urlparse(httpretty.last_request().path).path == expected_url # lint-amnesty, pylint: disable=no-member assert parsed_body(httpretty.last_request()) == { 'course_id': [str(self.course.id)], 'body': ['Test body'], 'user_id': [str(self.user.id)], 'anonymous': ['False'], 'anonymous_to_peers': ['False'], } assert saved['id'] == 'test_comment' assert saved['parent_id'] == parent_id
def test_update_all(self, read): self.register_put_thread_response(self.existing_thread.attributes) data = { "topic_id": "edited_topic", "type": "question", "title": "Edited Title", "raw_body": "Edited body", "read": read, } saved = self.save_and_reserialize(data, self.existing_thread) assert parsed_body(httpretty.last_request()) == { 'course_id': [str(self.course.id)], 'commentable_id': ['edited_topic'], 'thread_type': ['question'], 'title': ['Edited Title'], 'body': ['Edited body'], 'anonymous': ['False'], 'anonymous_to_peers': ['False'], 'closed': ['False'], 'pinned': ['False'], 'user_id': [str(self.user.id)], 'read': [str(read)] } for key in data: assert saved[key] == data[key]
def test_update_anonymous(self): """ Test that serializer correctly deserializes the anonymous field when updating an existing comment. """ self.register_put_comment_response(self.existing_comment.attributes) data = { "anonymous": True, } self.save_and_reserialize(data, self.existing_comment) assert parsed_body(httpretty.last_request())["anonymous"] == ['True']
def test_update_empty(self): self.register_put_comment_response(self.existing_comment.attributes) self.save_and_reserialize({}, instance=self.existing_comment) assert parsed_body(httpretty.last_request()) == { 'body': ['Original body'], 'course_id': [str(self.course.id)], 'user_id': [str(self.user.id)], 'anonymous': ['False'], 'anonymous_to_peers': ['False'], 'endorsed': ['False'] }
def test_create_anonymous(self): """ Test that serializer correctly deserializes the anonymous field when creating a new comment. """ self.register_post_comment_response({"username": self.user.username}, thread_id="test_thread") data = self.minimal_data.copy() data["anonymous"] = True self.save_and_reserialize(data) assert parsed_body(httpretty.last_request())["anonymous"] == ['True']
def test_update_empty(self): self.register_put_thread_response(self.existing_thread.attributes) self.save_and_reserialize({}, self.existing_thread) assert parsed_body(httpretty.last_request()) == { 'course_id': [str(self.course.id)], 'commentable_id': ['original_topic'], 'thread_type': ['discussion'], 'title': ['Original Title'], 'body': ['Original body'], 'anonymous': ['False'], 'anonymous_to_peers': ['False'], 'closed': ['False'], 'pinned': ['False'], 'user_id': [str(self.user.id)], 'read': ['False'] }
def test_create_all_fields(self): self.register_post_thread_response({ "id": "test_id", "username": self.user.username }) data = self.minimal_data.copy() data["group_id"] = 42 self.save_and_reserialize(data) assert parsed_body(httpretty.last_request()) == { 'course_id': [str(self.course.id)], 'commentable_id': ['test_topic'], 'thread_type': ['discussion'], 'title': ['Test Title'], 'body': ['Test body'], 'user_id': [str(self.user.id)], 'group_id': ['42'], 'anonymous': ['False'], 'anonymous_to_peers': ['False'], }
def test_create_minimal(self): self.register_post_thread_response({ "id": "test_id", "username": self.user.username }) saved = self.save_and_reserialize(self.minimal_data) assert urlparse(httpretty.last_request().path).path ==\ '/api/v1/test_topic/threads' # lint-amnesty, pylint: disable=no-member assert parsed_body(httpretty.last_request()) == { 'course_id': [str(self.course.id)], 'commentable_id': ['test_topic'], 'thread_type': ['discussion'], 'title': ['Test Title'], 'body': ['Test body'], 'user_id': [str(self.user.id)], 'anonymous': ['False'], 'anonymous_to_peers': ['False'], } assert saved['id'] == 'test_id'
def test_create_endorsed(self): # TODO: The comments service doesn't populate the endorsement field on # comment creation, so this is sadly realistic self.register_post_comment_response({"username": self.user.username}, thread_id="test_thread") data = self.minimal_data.copy() data["endorsed"] = True saved = self.save_and_reserialize(data) assert parsed_body(httpretty.last_request()) == { 'course_id': [str(self.course.id)], 'body': ['Test body'], 'user_id': [str(self.user.id)], 'endorsed': ['True'], 'anonymous': ['False'], 'anonymous_to_peers': ['False'], } assert saved['endorsed'] assert saved['endorsed_by'] is None assert saved['endorsed_by_label'] is None assert saved['endorsed_at'] is None
def test_update_all(self): cs_response_data = self.existing_comment.attributes.copy() cs_response_data["endorsement"] = { "user_id": str(self.user.id), "time": "2015-06-05T00:00:00Z", } self.register_put_comment_response(cs_response_data) data = {"raw_body": "Edited body", "endorsed": True} saved = self.save_and_reserialize(data, instance=self.existing_comment) assert parsed_body(httpretty.last_request()) == { 'body': ['Edited body'], 'course_id': [str(self.course.id)], 'user_id': [str(self.user.id)], 'anonymous': ['False'], 'anonymous_to_peers': ['False'], 'endorsed': ['True'], 'endorsement_user_id': [str(self.user.id)] } for key in data: assert saved[key] == data[key] assert saved['endorsed_by'] == self.user.username assert saved['endorsed_at'] == '2015-06-05T00:00:00Z'
def test_create_all_fields(self): data = self.minimal_data.copy() data["parent_id"] = "test_parent" data["endorsed"] = True self.register_get_comment_response({ "thread_id": "test_thread", "id": "test_parent" }) self.register_post_comment_response( { "id": "test_comment", "username": self.user.username }, thread_id="test_thread", parent_id="test_parent") self.save_and_reserialize(data) assert parsed_body(httpretty.last_request()) == { 'course_id': [str(self.course.id)], 'body': ['Test body'], 'user_id': [str(self.user.id)], 'endorsed': ['True'], 'anonymous': ['False'], 'anonymous_to_peers': ['False'], }