Commit 2cf3c4f4 by Stephen Sanchez

Updating my API changes per review comments

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