Commit 2cf3c4f4 by Stephen Sanchez

Updating my API changes per review comments

parent c3f013e2
......@@ -8,35 +8,40 @@ from submissions.serializers import SubmissionSerializer
from submissions.models import Submission, StudentItem, SubmissionStruct
def create_submission(student_item, answer, submitted_at=None):
student_item = _get_student_item(student_item)
def create_submission(student_item, answer, submitted_at=None, attempt_number=None):
student_item_model, _ = StudentItem.objects.get_or_create(
student_id=student_item.student_id,
course_id=student_item.course_id,
item_id=student_item.item_id,
item_type=student_item.item_type,
)
submitted_at = submitted_at if submitted_at else datetime.now()
if student_item:
submissions = Submission.objects.filter(student_item=student_item).order_by("submitted_at")[:0]
attempt_number = submissions[0].attempt_number if submissions else 1
submissions = Submission.objects.filter(student_item=student_item_model).order_by("-submitted_at")[:0]
if attempt_number is None:
attempt_number = submissions[0].attempt_number + 1 if submissions else 1
submission = Submission.objects.create(
student_item=student_item,
submitted_at=submitted_at,
answer=answer,
attempt_number=attempt_number,
)
return SubmissionStruct(**SubmissionSerializer(submission).data)
submission = Submission.objects.create(
student_item=student_item_model,
submitted_at=submitted_at,
answer=answer,
attempt_number=attempt_number,
)
return SubmissionStruct(**SubmissionSerializer(submission).data)
def get_submissions(student_item, limit=None):
student_item = _get_student_item(student_item)
item_response = StudentItem.objects.get_or_create(
student_item_model, _ = StudentItem.objects.get_or_create(
student_id=student_item.student_id,
course_id=student_item.course_id,
item_id=student_item.item_id,
item_type=student_item.item_type,
)
submission_models = Submission.objects.filter(student_item=student_item_model)
if limit:
submission_models = Submission.objects.filter(student_item=item_response[0])[:limit]
else:
submission_models = Submission.objects.filter(student_item=item_response[0])
submission_models = submission_models[:limit]
return [SubmissionStruct(**SubmissionSerializer(submission).data) for submission in submission_models]
......@@ -51,12 +56,3 @@ def get_scores(course_id, student_id, types=None):
def set_score(student_item):
pass
def _get_student_item(student_item):
student_items = StudentItem.objects.filter(
item_id=student_item.item_id,
student_id=student_item.student_id,
course_id=student_item.course_id,
)
return student_items[0] if student_items else None
\ No newline at end of file
import datetime
from django.test import TestCase
from submissions.models import StudentItem, StudentItemStruct
from submissions.api import create_submission, get_submissions
......@@ -9,31 +10,40 @@ STUDENT_ITEM = StudentItemStruct(
item_type="Peer_Submission"
)
class TestApi(TestCase):
ANSWER_ONE = "this is my answer!"
ANSWER_TWO = "this is my other answer!"
def setUp(self):
StudentItem.objects.create(
student_id=STUDENT_ITEM.student_id,
course_id=STUDENT_ITEM.course_id,
item_id=STUDENT_ITEM.item_id,
item_type=STUDENT_ITEM.student_id
)
class TestApi(TestCase):
def test_create_submission(self):
submission = create_submission(STUDENT_ITEM, "this is my answer!")
self._assert_submission(submission, "this is my answer!", 1, 1)
submission = create_submission(STUDENT_ITEM, ANSWER_ONE)
self._assert_submission(submission, ANSWER_ONE, 1, 1)
def test_get_submission(self):
create_submission(STUDENT_ITEM, "this is my answer!")
create_submission(STUDENT_ITEM, "this is my other answer!")
def test_get_submissions(self):
create_submission(STUDENT_ITEM, ANSWER_ONE)
create_submission(STUDENT_ITEM, ANSWER_TWO)
submissions = get_submissions(STUDENT_ITEM)
self._assert_submission(submissions[0], "this is my answer!", 1, 1)
self._assert_submission(submissions[1], "this is my other answer!", 1, 1)
self._assert_submission(submissions[0],ANSWER_ONE, 1, 1)
self._assert_submission(submissions[1], ANSWER_TWO, 1, 1)
def test_get_latest_submission(self):
past_date = datetime.date(2007, 11, 23)
more_recent_date = datetime.date(2011, 10, 15)
create_submission(STUDENT_ITEM, ANSWER_ONE, more_recent_date)
create_submission(STUDENT_ITEM, ANSWER_TWO, past_date)
# Test a limit on the submissions
submissions = get_submissions(STUDENT_ITEM, 1)
self.assertEqual(1, len(submissions))
self.assertEqual(ANSWER_ONE, submissions[0].answer)
self.assertEqual(more_recent_date.year, submissions[0].submitted_at.year)
def test_set_attempt_number(self):
create_submission(STUDENT_ITEM, ANSWER_ONE, None, 2)
submission = get_submissions(STUDENT_ITEM)
self._assert_submission(submission, ANSWER_ONE, 1, 2)
def _assert_submission(self, submission, expected_answer, expected_item, expected_attempt):
self.assertIsNotNone(submission)
......
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