def test_comment_in_submit(self): comment = """TESTINGComment\ns diakritikou áäčďéíľňóŕšťúýž""" submit = Submit.objects.create( task=self.task, user=self.user, points=5, submit_type=submit_constants.SUBMIT_TYPE_DESCRIPTION, filepath=path.join(path.dirname(__file__), "test_data", "submits", "description.txt"), ) submit.time = self.task.round.start_time + timezone.timedelta(0, 5) submit.save() Submit.objects.create( task=self.task, user=self.user, points=5, reviewer_comment=comment, testing_status=submit_constants.SUBMIT_STATUS_REVIEWED, submit_type=submit_constants.SUBMIT_TYPE_DESCRIPTION, ) comm_file = "%s%s" % ( helpers.submit_directory(submit, 0), review_constants.REVIEW_COMMENT_FILENAME, ) self.client.force_login(self.staff) url = reverse(self.url_name, kwargs={"task_pk": self.task.id}) response = self.client.get(url) f = io.BytesIO(b"".join(response.streaming_content)) zipped_file = zipfile.ZipFile(f, "a") data = zipped_file.read(comm_file) self.assertEqual(data.decode("utf-8"), comment) zipped_file.close() f.close()
def test_points_in_submit(self): points = 47 submit = Submit.objects.create( task=self.task, user=self.user, points=0, submit_type=submit_constants.SUBMIT_TYPE_DESCRIPTION, filepath=path.join(path.dirname(__file__), "test_data", "submits", "description.txt"), ) submit.time = self.task.round.start_time + timezone.timedelta(0, 5) submit.save() Submit.objects.create( task=self.task, user=self.user, points=points, testing_status=submit_constants.SUBMIT_STATUS_REVIEWED, submit_type=submit_constants.SUBMIT_TYPE_DESCRIPTION, ) points_file = "%s%s" % ( helpers.submit_directory(submit, 0), review_constants.REVIEW_POINTS_FILENAME, ) self.client.force_login(self.staff) url = reverse(self.url_name, kwargs={"task_pk": self.task.id}) response = self.client.get(url) f = io.BytesIO(b"".join(response.streaming_content)) zipped_file = zipfile.ZipFile(f, "a") data = zipped_file.read(points_file) self.assertEqual(int(data), points) zipped_file.close() f.close()
def download_all_submits(request, task_pk, download_reviews=False): task = get_object_or_404(Task, pk=task_pk) submits = get_latest_submits_for_task(task).values() if (not request.user.is_superuser and task.round.semester.competition.organizers_group not in request.user.groups.all()): raise PermissionDenied path = os.path.join(settings.SUBMIT_PATH, "reviews") if not os.path.isdir(path): os.makedirs(path) os.chmod(path, 0o777) path = os.path.join( path, "Uloha-%s-%s-%s.zip" % (slugify(task.name), int(time()), slugify(request.user.username)), ) errors = [] with zipfile.ZipFile(path, "w") as zipper: for i, user in enumerate(submits): if "description" in user: submit = (user["review"] if download_reviews and "review" in user else user["description"]) description_submit_id = submit.pk if not os.path.isfile(submit.filepath): errors += [ _("Missing file of user %s") % submit.user.get_full_name() ] else: zipper.write(submit.filepath, submit_download_filename(submit, i)) last_review_points = str(int( user["review"].points)) if "review" in user else "" last_review_comment = user[ "review"].reviewer_comment if "review" in user else "" zipper.writestr( submit_directory(submit, i) + REVIEW_POINTS_FILENAME, last_review_points) zipper.writestr( submit_directory(submit, i) + REVIEW_COMMENT_FILENAME, last_review_comment.encode("utf-8"), ) if "sources" in user: for submit in user["sources"]: if os.path.isfile(submit.filepath): zipper.write( submit.filepath, submit_source_download_filename( submit, description_submit_id, i), ) else: errors += [ _("Missing source file of user %s") % submit.user.get_full_name() ] if submit.protocol: zipper.writestr( submit.protocol, submit_protocol_download_filename( submit, description_submit_id, i), ) else: errors += [ _("Missing protocol of user %s") % submit.user.get_full_name() ] if errors: zipper.writestr(REVIEW_ERRORS_FILENAME, "\n".join(errors).encode("utf8")) return sendfile(request, path, attachment=True)