Skip to content

Commit

Permalink
fix: get_teammates_with_submissions_from_other_teams returns cancelle…
Browse files Browse the repository at this point in the history
…d submissions (#150)

* fix: get_teammates_with_submissions_from_other_teams returns cancelled submissions

change lookup model to Submission to avoid subquery filtering

* chore: version
  • Loading branch information
jansenk authored Dec 20, 2021
1 parent be43185 commit 224e339
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 23 deletions.
2 changes: 1 addition & 1 deletion submissions/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
""" API for creating submissions and scores. """
__version__ = '3.4.3'
__version__ = '3.4.4'
25 changes: 13 additions & 12 deletions submissions/team_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
TeamSubmissionNotFoundError,
TeamSubmissionRequestError
)
from submissions.models import DELETED, StudentItem, TeamSubmission
from submissions.models import DELETED, Submission, TeamSubmission
from submissions.serializers import TeamSubmissionSerializer

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -234,19 +234,20 @@ def get_teammates_with_submissions_from_other_teams(
Returns:
list(dict): [{ 'student_id', 'team_id' }]
"""
items = StudentItem.objects.filter(
submission__team_submission__isnull=False
submissions = Submission.objects.filter(
student_item__student_id__in=team_member_ids,
student_item__course_id=course_id,
student_item__item_id=item_id,
).exclude(
submission__team_submission__team_id=team_id
).filter(
student_id__in=team_member_ids,
course_id=course_id,
item_id=item_id
).values("student_id", "submission__team_submission__team_id")
team_submission__isnull=True,
).exclude(
team_submission__team_id=team_id,
).values("student_item__student_id", "team_submission__team_id")

return [{
'student_id': item['student_id'],
'team_id': item['submission__team_submission__team_id']
} for item in items]
'student_id': submission['student_item__student_id'],
'team_id': submission['team_submission__team_id']
} for submission in submissions]


def get_team_submission(team_submission_uuid):
Expand Down
46 changes: 36 additions & 10 deletions submissions/tests/test_team_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,19 +289,45 @@ def test_get_teammates_with_submissions_from_other_teams(self):

# Should get 1 entry for each of the default users
self.assertEqual(len(external_submissions), 4)

def check_submission(submission, user):
self.assertEqual(
submission,
for student_id in self.student_ids:
self.assertIn(
{
'student_id': self.anonymous_user_id_map[user],
'student_id': student_id,
'team_id': TEAM_1_ID
}
},
external_submissions
)
check_submission(external_submissions[0], self.user_1)
check_submission(external_submissions[1], self.user_2)
check_submission(external_submissions[2], self.user_3)
check_submission(external_submissions[3], self.user_4)

def test_get_teammates_with_submissions_from_other_teams__cancelled(self):
# Make a team submission with default users, under TEAM_1
team_submission = self._make_team_submission(
attempt_number=1,
course_id=COURSE_ID,
item_id=ITEM_1_ID,
team_id=TEAM_1_ID,
status=None,
create_submissions=True
)

# Simulate resetting student state for the team, which causes the submissions to be deleted
team_api.reset_scores(team_submission.uuid, clear_state=True)

team_submission.refresh_from_db()
self.assertEqual(team_submission.status, DELETED)
for individual_submission in team_submission.submissions.all():
self.assertEqual(individual_submission.status, DELETED)

# Now, everyone has moved to a new team, but their old submission was deleted, so no one should be listed
with self.assertNumQueries(1):
external_submissions = team_api.get_teammates_with_submissions_from_other_teams(
COURSE_ID,
ITEM_1_ID,
TEAM_2_ID,
self.student_ids
)

# Returns no one, since the submission was cancelled
self.assertEqual(external_submissions, [])

def test_get_team_submission(self):
"""
Expand Down

0 comments on commit 224e339

Please sign in to comment.