diff --git a/src/study/digest.py b/src/study/digest.py index 88ff1a9..0c3446b 100644 --- a/src/study/digest.py +++ b/src/study/digest.py @@ -151,6 +151,9 @@ def status(self, item): sub = (st.get("lastattempt") or {}).get("submission") or {} item["submission"] = sub.get("status") or "new" item["grade"] = ((st.get("feedback") or {}).get("grade") or {}).get("grade") + # Очная защита может быть оценена без загрузки файла: Moodle оставляет status="new". + if item["grade"] is not None and item["submission"] == "new": + item["submission"] = "submitted" item["feedback"] = feedback_text(st) item["feedback_new"] = bool(item["feedback"]) and self.fb is not None \ and self.fb.get(str(item["assign_id"])) != item["feedback"] diff --git a/tests/test_digest.py b/tests/test_digest.py index a622321..a8d438c 100644 --- a/tests/test_digest.py +++ b/tests/test_digest.py @@ -153,6 +153,18 @@ def test_retakes(self): {"wstoken": "test-token", "wsfunction": "mod_assign_get_submission_status", "moodlewsrestformat": "json", "assignid": "19"}), 1) + def test_graded_without_file_is_submitted(self): + queue(self.net) + self.net.drop("mod_assign_get_submission_status", "assignid=13") + status = fixture("submission_status_new") + status["feedback"] = {"grade": {"grade": "15.00000"}} + self.net.reply("POST", ("mod_assign_get_submission_status", "assignid=13"), status) + d = digest.Collector(self.cfg, Moodle(self.cfg), 21, STATE).run() + graded = next(a for a in d["submitted"] if a["short"] == "ДЗ 1 — Кодирование") + self.assertEqual((graded["submission"], graded["grade"]), ("submitted", "15.00000")) + self.assertNotIn("ДЗ 1 — Кодирование", names(d["overdue"])) + self.assertNotIn("ДЗ 1 — Кодирование", names(d["not_started"])) + def test_quizzes_updates_notifications(self): _, d = self.collect() q = {x["name"]: x for x in d["quizzes"]}