def _decorated(request, *args, **kwargs): try: body = json.loads(request.body) except json.decoder.JSONDecodeError: body = {} result = func(request, *args, **kwargs, **body) if issubclass(type(result), HttpResponse): return result else: # Add decode function to this shit json_response = JsonResponse(result, safe=False) json_response.decode = types.MethodType(decode, json_response) return json_response
def test_add_comment(self): # test add parent comment pk = Comment.objects.all().count() + 1 url = reverse("add_comment", kwargs={"video_slug": self.video.slug}) self.client.logout() self.client.force_login(self.simple_user) response = self.client.post(url, {"content": "Third parent comment"}) data = { "author_name": "{0} {1}".format(self.simple_user.first_name, self.simple_user.last_name), "id": pk, } expected_content = JsonResponse(data, safe=False).content self.assertEqual(response.status_code, 200) self.assertEqual(response.resolver_match.func, add_comment) resp_content = response.content.decode("UTF-8") resp_content = ast.literal_eval(resp_content) exp_content = expected_content.decode("UTF-8") exp_content = ast.literal_eval(exp_content) self.assertEqual(resp_content, exp_content) p_comment = Comment.objects.get(id=pk) self.assertIsNone(p_comment.parent) # test add child comment pk = Comment.objects.all().count() + 1 url = reverse( "add_child_comment", kwargs={ "video_slug": self.video.slug, "comment_id": p_comment.id }, ) self.client.logout() self.client.force_login(self.owner_user) response = self.client.post(url, {"content": "Response to third comment"}) data["author_name"] = "{0} {1}".format(self.owner_user.first_name, self.owner_user.last_name) data["id"] = pk expected_content = JsonResponse(data, safe=False).content resp_content = response.content.decode("UTF-8") resp_content = ast.literal_eval(resp_content) exp_content = expected_content.decode("UTF-8") exp_content = ast.literal_eval(exp_content) self.assertEqual(response.status_code, 200) self.assertEqual(response.resolver_match.func, add_comment) self.assertEqual(resp_content, exp_content) comment = Comment.objects.get(id=pk) self.assertEqual(comment.parent, p_comment) # test bad request self.client.logout() self.client.force_login(self.owner_user) response = self.client.post(url, HTTP_ACCEPT_LANGUAGE="en") self.assertContains(response, b"<h1>Bad Request</h1>", status_code=400) # test method not allowed response = self.client.get(url, HTTP_ACCEPT_LANGUAGE="en") self.assertContains(response, b"<h1>Method Not Allowed</h1>", status_code=405)
def test_heartbeat(self): self.client = Client() self.user = User.objects.create( username='******', first_name="Jean", last_name="Viewer") response = self.client.get( '/live/ajax_calls/heartbeat/?key=testkey&liveid=1', { }, False, False, **{ 'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'}) self.assertEqual(response.status_code, 200) data = { "viewers": 0, "viewers_list": [] } expected_content = JsonResponse(data, safe=False).content exp_content = expected_content.decode("UTF-8") exp_content = ast.literal_eval(exp_content) resp_content = response.content.decode("UTF-8") resp_content = ast.literal_eval(resp_content) self.assertEqual(resp_content, exp_content) call_command("live_viewcounter") response = self.client.get( '/live/ajax_calls/heartbeat/?key=testkey&liveid=1', { }, False, False, **{ 'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'}) self.assertEqual(response.status_code, 200) data = { "viewers": 1, "viewers_list": [] } expected_content = JsonResponse(data, safe=False).content exp_content = expected_content.decode("UTF-8") exp_content = ast.literal_eval(exp_content) resp_content = response.content.decode("UTF-8") resp_content = ast.literal_eval(resp_content) self.assertEqual(resp_content, exp_content) self.client.force_login(self.user) response = self.client.get( '/live/ajax_calls/heartbeat/?key=testkeypod&liveid=1', { }, False, False, **{ 'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'}) self.assertEqual(response.status_code, 200) call_command("live_viewcounter") response = self.client.get( '/live/ajax_calls/heartbeat/?key=testkeypod&liveid=1', { }, False, False, **{ 'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'}) self.assertEqual(response.status_code, 200) data = { "viewers": 2, "viewers_list": [{'first_name': 'Jean', 'is_superuser': False, 'last_name': 'Viewer'}] } expected_content = JsonResponse(data, safe=False).content exp_content = expected_content.decode("UTF-8") exp_content = exp_content.replace("false", "False") exp_content = ast.literal_eval(exp_content) resp_content = response.content.decode("UTF-8") resp_content = resp_content.replace("false", "False") resp_content = ast.literal_eval(resp_content) self.assertEqual(resp_content, exp_content) hb1 = HeartBeat.objects.get(viewkey="testkey") hb2 = HeartBeat.objects.get(viewkey="testkeypod") paris_tz = pytz.timezone("Europe/Paris") # make heartbeat expire now hb1.last_heartbeat = paris_tz.localize( datetime.datetime(2012, 3, 3, 1, 30)) hb1.save() hb2.last_heartbeat = paris_tz.localize( datetime.datetime(2012, 3, 3, 1, 30)) hb2.save() call_command("live_viewcounter") broad = Broadcaster.objects.get(name="broadcaster1") self.assertEqual(broad.viewcount, 0) print( " ---> test_heartbeat of liveViewsTestCase : OK !")