elemes/services/tests
a2nr 67ed58a327 feat: scope sub-home lesson lists & make sub-home cache mtime-aware
Lengkapi rencana sub-home (fitur bab sudah ada sejak 2f689af) dengan
perilaku sidebar/navigasi yang akurat per sub-folder:

- get_lessons()/get_ordered_lessons_with_learning_objectives() menerima
  source_path opsional sehingga daftar materi dapat diambil dari
  sub-home.md alih-alih home.md root
- api_lesson: ordered_lessons + prev/next di-scope ke sub-home.md bila
  folder memilikinya, fallback ke daftar global home.md
- get_sub_home_data kini mtime-cached (bukan lru_cache) sehingga edit
  sub-home.md langsung terlihat tanpa restart; edit juga meng-invalidate
  find_lesson_file agar materi baru terdeteksi

Testing & docs:
- test_sub_home.py (unit): _read_md_cached mtime, find_sub_home_for_lesson,
  get_sub_home_data refresh, ordered_lessons via source_path
- test_sub_home_api.py (integration): GET /bab/<folder> + scoped
  ordered_lessons di /lesson/<slug>.json
- docs/13-content-sub-home.md (baru), README + docs/02-backend-flask.md
  diperbarui dengan catatan fallback
- elemes.sh: perintah `test` + verifikasi tes sub-home di runclearbuild
2026-08-13 20:08:50 +07:00
..
fixtures feat(teacher): manajemen akun guru canonical + first-run otomatis; cabut backend CSV (PG only) 2026-08-09 11:21:08 +07:00
__init__.py feat(embed): add raw HTML embed fence with bleach sanitization 2026-07-19 15:39:38 +07:00
conftest.py feat(quiz): strict focus-loss anti-cheat + audit attempt 2026-08-11 20:55:39 +07:00
test_auth_routes.py feat(teacher): manajemen akun guru canonical + first-run otomatis; cabut backend CSV (PG only) 2026-08-09 11:21:08 +07:00
test_compile_sessions.py feat(storage): migrasi penyimpanan CSV ke PostgreSQL (SQLAlchemy + Alembic) 2026-08-08 04:57:08 +00:00
test_lesson_registry.py feat(storage): migrasi penyimpanan CSV ke PostgreSQL (SQLAlchemy + Alembic) 2026-08-08 04:57:08 +00:00
test_lesson_service_embed.py feat(teacher): manajemen akun guru canonical + first-run otomatis; cabut backend CSV (PG only) 2026-08-09 11:21:08 +07:00
test_lesson_service_quiz.py feat(teacher): manajemen akun guru canonical + first-run otomatis; cabut backend CSV (PG only) 2026-08-09 11:21:08 +07:00
test_models.py feat(quiz): strict focus-loss anti-cheat + audit attempt 2026-08-11 20:55:39 +07:00
test_progress_routes.py feat(teacher): manajemen akun guru canonical + first-run otomatis; cabut backend CSV (PG only) 2026-08-09 11:21:08 +07:00
test_quiz_attempt_routes.py feat(quiz): strict focus-loss anti-cheat + audit attempt 2026-08-11 20:55:39 +07:00
test_repositories.py feat(student-management): kelola siswa round-trip CSV + bulk delete (PG) 2026-08-09 07:29:19 +07:00
test_student_management_routes.py feat(student-management): kelola siswa round-trip CSV + bulk delete (PG) 2026-08-09 07:29:19 +07:00
test_student_roundtrip.py feat(student-management): kelola siswa round-trip CSV + bulk delete (PG) 2026-08-09 07:29:19 +07:00
test_sub_home.py feat: scope sub-home lesson lists & make sub-home cache mtime-aware 2026-08-13 20:08:50 +07:00
test_sub_home_api.py feat: scope sub-home lesson lists & make sub-home cache mtime-aware 2026-08-13 20:08:50 +07:00
test_teacher_bootstrap.py feat(teacher): manajemen akun guru canonical + first-run otomatis; cabut backend CSV (PG only) 2026-08-09 11:21:08 +07:00
test_token_hashing.py feat(storage): migrasi penyimpanan CSV ke PostgreSQL (SQLAlchemy + Alembic) 2026-08-08 04:57:08 +00:00
test_token_service_contract.py feat(quiz): strict focus-loss anti-cheat + audit attempt 2026-08-11 20:55:39 +07:00