Skip to content

Commit 83bb65c

Browse files
committed
- Added a test
- Splitted a function - Changed some logics of the assessment
1 parent b87584a commit 83bb65c

File tree

3 files changed

+37
-14
lines changed

3 files changed

+37
-14
lines changed

lms/lmsdb/models.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -375,10 +375,9 @@ def open_for_new_solutions(self) -> bool:
375375
def get_highest_number(cls, course: Course):
376376
return (
377377
cls
378-
.select(cls.number)
378+
.select(fn.MAX(cls.number))
379379
.where(cls.course == course)
380-
.order_by(cls.number.desc())
381-
.limit(1)
380+
.group_by(cls.course)
382381
.scalar()
383382
)
384383

@@ -437,7 +436,6 @@ def __str__(self):
437436
@pre_save(sender=Exercise)
438437
def exercise_number_save_handler(model_class, instance, created):
439438
"""Change the exercise number to the highest consecutive number."""
440-
441439
if model_class.is_number_exists(instance.course, instance.number):
442440
instance.number = model_class.get_highest_number(instance.course) + 1
443441

@@ -746,11 +744,12 @@ def mark_as_checked(
746744
assessment_id: Optional[int] = None,
747745
by: Optional[Union[User, int]] = None,
748746
) -> bool:
747+
assessment = SolutionAssessment.get_or_none(
748+
SolutionAssessment.id == assessment_id,
749+
)
749750
return self.set_state(
750751
Solution.STATES.DONE,
751-
SolutionAssessment.get_or_none(
752-
SolutionAssessment.id == assessment_id,
753-
),
752+
assessment=assessment,
754753
checker=by,
755754
)
756755

lms/static/checker.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,22 @@ function trackFinished(exerciseId, solutionId, element) {
2626
});
2727
}
2828

29+
function changeAssessmentsAttributes(assessmentGroup, item) {
30+
if (item.value == assessmentGroup.dataset.checkedid) {
31+
item.removeAttribute('checked');
32+
item.checked = false;
33+
assessmentGroup.dataset.checkedid = 'None';
34+
} else {
35+
assessmentGroup.dataset.checkedid = item.value;
36+
}
37+
}
38+
2939
function trackAssessmentButtons() {
3040
const assessmentGroup = document.getElementById('solution-assessment');
3141
const assessmentElements = document.querySelectorAll('input[name="assessment"]');
3242
Array.from(assessmentElements).forEach((item) => {
3343
item.addEventListener('click', () => {
34-
if (item.value == assessmentGroup.dataset.checkedid) {
35-
item.removeAttribute('checked');
36-
item.checked = false;
37-
assessmentGroup.dataset.checkedid = 'None';
38-
} else {
39-
assessmentGroup.dataset.checkedid = item.value;
40-
}
44+
changeAssessmentsAttributes(assessmentGroup, item);
4145
}, true);
4246
});
4347
}

tests/test_solutions.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ def test_mark_as_checked(
128128
student_user: User,
129129
staff_user: User,
130130
solution: Solution,
131+
_assessments,
131132
):
132133
# Basic functionality
133134
assert solution.state == Solution.STATES.CREATED.name
@@ -155,6 +156,7 @@ def test_get_next_unchecked(
155156
student_user: User,
156157
exercise: Exercise,
157158
staff_user: User,
159+
_assessments,
158160
):
159161
student_user2 = conftest.create_student_user(index=1)
160162
exercise2 = conftest.create_exercise(course, 2, index=3)
@@ -627,3 +629,21 @@ def test_solution_assessment_on_save(course: Course, _assessments):
627629
assert (
628630
assessment.active_color == DEFAULT_ASSESSMENT_BUTTON_ACTIVE_COLOR,
629631
)
632+
633+
@staticmethod
634+
def test_solutions_of_user(
635+
staff_user: User, student_user: User, course: Course,
636+
solution: Solution, _assessments,
637+
):
638+
conftest.create_usercourse(student_user, course)
639+
solutions.mark_as_checked(solution.id, staff_user.id, 2)
640+
solution = Solution.get_by_id(solution.id)
641+
642+
exercise2 = conftest.create_exercise(course, 2)
643+
solution2 = conftest.create_solution(exercise2, student_user)
644+
solutions.mark_as_checked(solution2.id, staff_user.id)
645+
solution2 = Solution.get_by_id(solution2.id)
646+
647+
exercises = solution.of_user(student_user.id, from_all_courses=True)
648+
assert exercises[0].get('assessment') == 'Nice'
649+
assert exercises[1].get('assessment') is None

0 commit comments

Comments
 (0)