[GSoC 2026] M2.20 - Fix part of #24717: Handle certificate assessment time expiry, learner exit navigation, and network loss - #6
Open
mosin74 wants to merge 21 commits into
Conversation
Add Hinglish translation tips
…TML templates removing inconsistency of next 20 files (part-10) (oppia#27119) * Fix part of oppia#25941: Clean up legacy embedded <style> tags from HTML templates (part-10) * Fixed import and styleUrls in ts file * Fixed import path * Fixed failing acceptance tests * Fixed feedback-updates-page css
Pause the countdown timer while the learner is offline and show the interrupt card on reconnect with resume and retry actions. Render the interrupt card as a centered modal overlay.
…ent start and submission flow (oppia#27121) * Created stub intent handler and frontend/backend API services with initial GET logic * Add unit tests for handler and async API service call * Create initial service, decorator, and handler * Lint checks * Add docstrings, improve test coverage, and fix failing lint and backend tests * Update docstrings, add test coverage, and fix failing tests * Updated submission flow fixed mypy checks * Updated test and logic * Fixed query * Reverted some changes and fix failing test * Remove CertificateAssessmentAnswer and validate responses before write * Add indexed certificate_id field and use bounded query for next attempt index * Updated docstring * Address review comments in certificate assessment submission flow * Fixed lint checks * Fix submit certificate assessment handler unit tests to mock attempt retrieval service * Fix lint and mypy errors in certificate assessment code * Use attempt_id in certificate question access decorator * [GSoC 2026] M2.16 - Fix part of oppia#24717: Restrict certificate assessment player to logged-in learners and show 404 for unavailable certificates * Lint check * Fixed typescript error * [GSoC 2026] Fix part of oppia#24717: Improve certificate assessment player page and fix bugs * Fix strict typescript check errors in conversation skin spec * fix: Harden certificate assessment player page (auth guard, root component, player component) * Fix lint errors in certificate assessment player page spec * Address brianrodri review: rename bannerClick, reorder interfaces, JSDoc, constants * Add CertificateAssessmentQuestionData domain model to avoid snake_case bleed * Replace manual answer comparison with AnswerClassificationService Instead of extracting correct answers from rule inputs and comparing them manually (extractCorrectAnswerText, extractCorrectAnswerIndex, extractCorrectAnswerOptionIds, isResponseCorrect), delegate correctness checking to the shared AnswerClassificationService. This reuses the existing interaction-specific rule functions (Equals, FuzzyEquals, etc.) and avoids introducing a bifurcated helper that could diverge from the shared implementation. - Remove correctAnswerText, correctAnswerIndex, correctAnswerOptionIds from AssessmentQuestion; add stateData field instead. - Inject AnswerClassificationService and 4 rules services (MultipleChoiceInput, ItemSelectionInput, TextInput, NumericInput). - Add convertAnswerForClassification to convert raw string answers to the typed format expected by each interaction's rules service. - Fix test data: default_outcome now has labelled_as_correct: false so that incorrect answers are properly classified as incorrect. * Support all 8 question interactions in certificate assessment player Add support for FractionInput, NumberWithUnits, DragAndDropSortInput, and ImageClickInput interactions alongside the existing MultipleChoice, ItemSelection, TextInput, and NumericInput. - Import rules services for all 8 interactions. - Update AssessmentQuestionType union with fraction_input, number_with_units, drag_and_drop_sort, and image_click. - Update getQuestionType, getRulesService, and convertAnswerForClassification for each new interaction. - Add conversation skin templates for drag-and-drop sort (checkboxes) and image click (text fallback) interactions. - Remove dead NumberWithUnits constant that was incorrectly mapped to numeric_input. * Refactor certificate assessment player to use native interaction components Replace custom question rendering with oppia-interaction-display driven by ExplorationHtmlFormatterService, and route answers through CurrentInteractionService with typed InteractionAnswer values. Extend interaction components with a lastAnswer input to restore previous selections when navigating between questions. * Fix certificate assessment review findings and CI failures * Add lifecycle cleanup and strict typing fixes for certificate assessment * Remove dead code and redundant comments from certificate assessment player * Fix type errors in DragAndDropSortInput spec * Fix coverage --------- Co-authored-by: mosin74 <mosin74@gmail.com>
…piry and wire time-expired modal actions (oppia#27161) * Created stub intent handler and frontend/backend API services with initial GET logic * Add unit tests for handler and async API service call * Create initial service, decorator, and handler * Lint checks * Add docstrings, improve test coverage, and fix failing lint and backend tests * Update docstrings, add test coverage, and fix failing tests * Updated submission flow fixed mypy checks * Updated test and logic * Fixed query * Reverted some changes and fix failing test * Remove CertificateAssessmentAnswer and validate responses before write * Add indexed certificate_id field and use bounded query for next attempt index * Updated docstring * Address review comments in certificate assessment submission flow * Fixed lint checks * Fix submit certificate assessment handler unit tests to mock attempt retrieval service * Fix lint and mypy errors in certificate assessment code * Use attempt_id in certificate question access decorator * [GSoC 2026] M2.16 - Fix part of oppia#24717: Restrict certificate assessment player to logged-in learners and show 404 for unavailable certificates * Lint check * Fixed typescript error * [GSoC 2026] Fix part of oppia#24717: Improve certificate assessment player page and fix bugs * Fix strict typescript check errors in conversation skin spec * fix: Harden certificate assessment player page (auth guard, root component, player component) * Fix lint errors in certificate assessment player page spec * Address brianrodri review: rename bannerClick, reorder interfaces, JSDoc, constants * Add CertificateAssessmentQuestionData domain model to avoid snake_case bleed * Replace manual answer comparison with AnswerClassificationService Instead of extracting correct answers from rule inputs and comparing them manually (extractCorrectAnswerText, extractCorrectAnswerIndex, extractCorrectAnswerOptionIds, isResponseCorrect), delegate correctness checking to the shared AnswerClassificationService. This reuses the existing interaction-specific rule functions (Equals, FuzzyEquals, etc.) and avoids introducing a bifurcated helper that could diverge from the shared implementation. - Remove correctAnswerText, correctAnswerIndex, correctAnswerOptionIds from AssessmentQuestion; add stateData field instead. - Inject AnswerClassificationService and 4 rules services (MultipleChoiceInput, ItemSelectionInput, TextInput, NumericInput). - Add convertAnswerForClassification to convert raw string answers to the typed format expected by each interaction's rules service. - Fix test data: default_outcome now has labelled_as_correct: false so that incorrect answers are properly classified as incorrect. * Support all 8 question interactions in certificate assessment player Add support for FractionInput, NumberWithUnits, DragAndDropSortInput, and ImageClickInput interactions alongside the existing MultipleChoice, ItemSelection, TextInput, and NumericInput. - Import rules services for all 8 interactions. - Update AssessmentQuestionType union with fraction_input, number_with_units, drag_and_drop_sort, and image_click. - Update getQuestionType, getRulesService, and convertAnswerForClassification for each new interaction. - Add conversation skin templates for drag-and-drop sort (checkboxes) and image click (text fallback) interactions. - Remove dead NumberWithUnits constant that was incorrectly mapped to numeric_input. * Refactor certificate assessment player to use native interaction components Replace custom question rendering with oppia-interaction-display driven by ExplorationHtmlFormatterService, and route answers through CurrentInteractionService with typed InteractionAnswer values. Extend interaction components with a lastAnswer input to restore previous selections when navigating between questions. * Fix certificate assessment review findings and CI failures * Add lifecycle cleanup and strict typing fixes for certificate assessment * Remove dead code and redundant comments from certificate assessment player * Fix type errors in DragAndDropSortInput spec * Handle certificate assessment time expiry and learner exit navigation * Fix coverage * Make assessment timer more realiable and tests cleaner * Centralize certificate assessment state in a service and address PR review * Centralize certificate assessment state in a service and address PR review --------- Co-authored-by: mosin74 <mosin74@gmail.com>
…ia#27045) * Updates voiceover feature flag from TEST to PROD * Fixes backend tests
…pt cards (oppia#27083) * Fix part of oppia#24933: Display translated concept cards * Translate the skill description on concept cards * Move the up-to-date translation lookup into translation_services The same private helper was being added separately in three PRs, so it now lives once as a public function in the module that owns translations, with tests covering the missing, stale and non-string cases. * Address review comments: Prioritize lesson study language for concept card translations and fix comment grammar * Clean PR diff: remove unrelated service and storage test files
…ag prefixes from CSS selectors. (oppia#26976) * remove prefixes and encapsulation.None * moved leftover prefixed components to their own css files * fixing lint errors * removed prefixes and ViewEncapsulation.None (current lesson player) * fixed collection player page, current lesson player's responsiveness and exploration summary tile * fixed story summary tile, visible on learner dashboard * Fixed margin in browse our lessons button * fixed audio bar * fixing CI failure * changing mat-slider-horizontal value to non-zero * reverting changes accidently pushed while resolving merge conflicts * adding fix for the frontend flake
…ppia#25995) * [skip ci]: Adds more context to voiceover admin status information * Added quotation for Exploration title * Fixes frontend tests * Fixes mypy checks * Fixes lint checks * Updates feature flag from TEST to PROD * Adds beam job * Fixes list issue in RTE * Adds language accents coloumn in voiceover regeneration records * Removes feature flag changes * Fixes backend tests * Fixes backend and lint checks * Fixes lint and backend tests * Adds backend test for coverage * Fixes lint and type checks * Adds frontend tests for coverage
…ration metadata (oppia#26961) * Fix part of oppia#24933: Add validation checks for metadata translations * Fix translation metadata suggestion creation and reviewer listing validation bugs * Fix language_code mismatch in metadata translation validation test * Add code owner review comment explaining generic metadata suggestion sorting behavior * Address review comments: Define and use constants for exploration metadata and title validation limits * Address review comments: Fix TS strict type checks and add 100% unit test coverage for metadata formatting logic * Document UX sorting decision for exploration metadata translation cards * Update translation cards sorting logic to prepend metadata cards per UX feedback * Address review: Use constants for metadata content types and IDs * Order generic metadata cards first in TranslatableTexts.createFromBackendDictV2 * Fix feature-flagged acceptance tests for V2 metadata cards order * Fix feature-flagged acceptance tests by skipping Category metadata card * Fix acceptance test failure by restoring 'Save and close' button click for the last state content card * Fix acceptance tests by removing obsolete closeTranslateTextModal calls after Save and close * Address review comment: Update spec comment for final card save and close button * Fix part of oppia#24933: Display translated exploration metadata * Fix pylint re-import warning in library_test and summary_services_test * Add unit test coverage for translated exploration category and tags in summary_services * Fix pylint and black formatting issue in test_utils.py * Format test_utils.py with black * Revert incidental formatting changes to files outside this PR's scope * Display translated exploration metadata in the learner's site language * Prefer contributor translations over hardcoded i18n bundles for exploration metadata * [GSoC 2026] M 2.7 - Fix Karma unit tests for translation-modal and search service * [GSoC 2026] M 2.7 - Fix parameter order in search.service.spec.ts expectOne URLs * [GSoC 2026] M 2.7 - Fix mockWindow type declaration in translation-modal.component.spec.ts * [GSoC 2026] M 2.7 - Fix mockWindow pathname in translation-modal.component.spec.ts * Move the hacky translation display decision into I18nLanguageCodeService The same three-part condition was written out in four components. It now lives once on the service that already owned the other two conditions, and the components delegate to it. * Clean PR diff: remove unrelated service and storage test files * Fix mypy * Fix part of oppia#24933: Prevent redundant language code emissions and fix infinite search spinner
…arner's language (oppia#27111) * [GSoC 2026] M 2.9 - Search lessons in the learner's language * fix unit tests and black * Fix backend lint and update search index test expectations * Point the duplicated translation helper comment at the PR that adds the shared one * Collapse nested swap context managers into a single with statement * Add a test for translated exploration metadata in the search index * Fix search filter blocking translated explorations by indexing all available languages * Handle list-valued language_code in the Elasticsearch test stub
…ble modal when an attempt cannot start (oppia#27164) * Created stub intent handler and frontend/backend API services with initial GET logic * Add unit tests for handler and async API service call * Create initial service, decorator, and handler * Lint checks * Add docstrings, improve test coverage, and fix failing lint and backend tests * Update docstrings, add test coverage, and fix failing tests * Updated submission flow fixed mypy checks * Updated test and logic * Fixed query * Reverted some changes and fix failing test * Remove CertificateAssessmentAnswer and validate responses before write * Add indexed certificate_id field and use bounded query for next attempt index * Updated docstring * Address review comments in certificate assessment submission flow * Fixed lint checks * Fix submit certificate assessment handler unit tests to mock attempt retrieval service * Fix lint and mypy errors in certificate assessment code * Use attempt_id in certificate question access decorator * [GSoC 2026] M2.16 - Fix part of oppia#24717: Restrict certificate assessment player to logged-in learners and show 404 for unavailable certificates * Lint check * Fixed typescript error * [GSoC 2026] Fix part of oppia#24717: Improve certificate assessment player page and fix bugs * Fix strict typescript check errors in conversation skin spec * fix: Harden certificate assessment player page (auth guard, root component, player component) * Fix lint errors in certificate assessment player page spec * Address brianrodri review: rename bannerClick, reorder interfaces, JSDoc, constants * Add CertificateAssessmentQuestionData domain model to avoid snake_case bleed * Replace manual answer comparison with AnswerClassificationService Instead of extracting correct answers from rule inputs and comparing them manually (extractCorrectAnswerText, extractCorrectAnswerIndex, extractCorrectAnswerOptionIds, isResponseCorrect), delegate correctness checking to the shared AnswerClassificationService. This reuses the existing interaction-specific rule functions (Equals, FuzzyEquals, etc.) and avoids introducing a bifurcated helper that could diverge from the shared implementation. - Remove correctAnswerText, correctAnswerIndex, correctAnswerOptionIds from AssessmentQuestion; add stateData field instead. - Inject AnswerClassificationService and 4 rules services (MultipleChoiceInput, ItemSelectionInput, TextInput, NumericInput). - Add convertAnswerForClassification to convert raw string answers to the typed format expected by each interaction's rules service. - Fix test data: default_outcome now has labelled_as_correct: false so that incorrect answers are properly classified as incorrect. * Support all 8 question interactions in certificate assessment player Add support for FractionInput, NumberWithUnits, DragAndDropSortInput, and ImageClickInput interactions alongside the existing MultipleChoice, ItemSelection, TextInput, and NumericInput. - Import rules services for all 8 interactions. - Update AssessmentQuestionType union with fraction_input, number_with_units, drag_and_drop_sort, and image_click. - Update getQuestionType, getRulesService, and convertAnswerForClassification for each new interaction. - Add conversation skin templates for drag-and-drop sort (checkboxes) and image click (text fallback) interactions. - Remove dead NumberWithUnits constant that was incorrectly mapped to numeric_input. * Refactor certificate assessment player to use native interaction components Replace custom question rendering with oppia-interaction-display driven by ExplorationHtmlFormatterService, and route answers through CurrentInteractionService with typed InteractionAnswer values. Extend interaction components with a lastAnswer input to restore previous selections when navigating between questions. * Fix certificate assessment review findings and CI failures * Add lifecycle cleanup and strict typing fixes for certificate assessment * Remove dead code and redundant comments from certificate assessment player * Fix type errors in DragAndDropSortInput spec * Fix coverage * Show assessment unavailable modal when attempt cannot start Add an overlay modal for unavailable assessments and show it when starting an attempt fails, with navigation to available certificates. * Enforce 10-minute cooldown between certificate assessment attempts * Added 10 minutes cold time * Fix review comments on certificate assessment flow * Make certificate assessment cooldown error I18N-friendly * MyPY check fix * Lint check * Undo auto generated comments * Fixed status code and docstrings --------- Co-authored-by: mosin74 <mosin74@gmail.com>
…flow in certificate assessment player (oppia#27162) * Created stub intent handler and frontend/backend API services with initial GET logic * Add unit tests for handler and async API service call * Create initial service, decorator, and handler * Lint checks * Add docstrings, improve test coverage, and fix failing lint and backend tests * Update docstrings, add test coverage, and fix failing tests * Updated submission flow fixed mypy checks * Updated test and logic * Fixed query * Reverted some changes and fix failing test * Remove CertificateAssessmentAnswer and validate responses before write * Add indexed certificate_id field and use bounded query for next attempt index * Updated docstring * Address review comments in certificate assessment submission flow * Fixed lint checks * Fix submit certificate assessment handler unit tests to mock attempt retrieval service * Fix lint and mypy errors in certificate assessment code * Use attempt_id in certificate question access decorator * [GSoC 2026] M2.16 - Fix part of oppia#24717: Restrict certificate assessment player to logged-in learners and show 404 for unavailable certificates * Lint check * Fixed typescript error * [GSoC 2026] Fix part of oppia#24717: Improve certificate assessment player page and fix bugs * Fix strict typescript check errors in conversation skin spec * fix: Harden certificate assessment player page (auth guard, root component, player component) * Fix lint errors in certificate assessment player page spec * Address brianrodri review: rename bannerClick, reorder interfaces, JSDoc, constants * Add CertificateAssessmentQuestionData domain model to avoid snake_case bleed * Replace manual answer comparison with AnswerClassificationService Instead of extracting correct answers from rule inputs and comparing them manually (extractCorrectAnswerText, extractCorrectAnswerIndex, extractCorrectAnswerOptionIds, isResponseCorrect), delegate correctness checking to the shared AnswerClassificationService. This reuses the existing interaction-specific rule functions (Equals, FuzzyEquals, etc.) and avoids introducing a bifurcated helper that could diverge from the shared implementation. - Remove correctAnswerText, correctAnswerIndex, correctAnswerOptionIds from AssessmentQuestion; add stateData field instead. - Inject AnswerClassificationService and 4 rules services (MultipleChoiceInput, ItemSelectionInput, TextInput, NumericInput). - Add convertAnswerForClassification to convert raw string answers to the typed format expected by each interaction's rules service. - Fix test data: default_outcome now has labelled_as_correct: false so that incorrect answers are properly classified as incorrect. * Support all 8 question interactions in certificate assessment player Add support for FractionInput, NumberWithUnits, DragAndDropSortInput, and ImageClickInput interactions alongside the existing MultipleChoice, ItemSelection, TextInput, and NumericInput. - Import rules services for all 8 interactions. - Update AssessmentQuestionType union with fraction_input, number_with_units, drag_and_drop_sort, and image_click. - Update getQuestionType, getRulesService, and convertAnswerForClassification for each new interaction. - Add conversation skin templates for drag-and-drop sort (checkboxes) and image click (text fallback) interactions. - Remove dead NumberWithUnits constant that was incorrectly mapped to numeric_input. * Refactor certificate assessment player to use native interaction components Replace custom question rendering with oppia-interaction-display driven by ExplorationHtmlFormatterService, and route answers through CurrentInteractionService with typed InteractionAnswer values. Extend interaction components with a lastAnswer input to restore previous selections when navigating between questions. * Fix certificate assessment review findings and CI failures * Add lifecycle cleanup and strict typing fixes for certificate assessment * Remove dead code and redundant comments from certificate assessment player * Fix type errors in DragAndDropSortInput spec * Fix unanswered question flow in certificate assessment player * Fix coverage * fixed typescript check * Created const * Auto-submit answers on time expiry instead of prompting about unanswered questions --------- Co-authored-by: mosin74 <mosin74@gmail.com>
…ns in the topic viewer page & consistency of the Topic-editor with the redesigned topic page (oppia#26990) * Learner side ui * added suggestiosn from deisgn tea, * fixed lint checks * Revert arc->adventure and flag->book icon changes from 685662e * Revert flagBg->bookBg rename from ba67628 * added suggestiosn from deisgn tea, * Revert "added suggestiosn from deisgn tea," This reverts commit 629dfbc. * fixed checkpoint bar * fixed arc-> adventure * Fixed css * fixed thumbnail * fixed ui * fixed arc end tests * Added i18n and updated the tests and css * reverted requirements.txt * fixed lint checks and backend checks * fixed frontend and backend tests * added tests for frontend coverage * fixed type checks * fixed forntend coverage * updated urls with latest merge pr * fixed frontend tests * integrated the serial chapter functionlity with the topic viewer page * fixed frontend tests * addressed code-rabbit's comment and self reviwed the PR * fixed lint check * fixed frontend tests * fixed html,css * fixed acceptance tests * removed unnecessary changes * removed unnecessary tests * fixed spec files with proper frontend tests * fixed tests * updated folder structure * removed files from root-files-config.json * addressed review comments * removed story-editor change * url fix * fixed changes * added code for lesson animations * fixed local storage * fixed url * Removed unnecessary code and uodated soecs * added tests * Implement consistency of the Topic-editor with the redesigned topic page * fixed ci failures * fixed lint * removed requirements.txt * made changes as per Amy's product decision * fixed scroll bar * fixed lint * fixed acceptance tests * finalised adevnture end modal * Made the navbar sticky * updated ui as per Amy's latest decision * Fixed navbar issue in topic-editor * added frontend tests * addressed coderabbit's comment * fixed fromtend tests * fixed frontend tests * added tests * fixed acceptance tests * Addressed reviewer's comment * updated the tests * updated the frontend tests * Updated spec file * final cleanup * updated the tests * fixed type check * addressed comments * Addressed review comments * Removed duplicate code and used the shared component * fixed lint & type checks * addressed comments * fixed css issues * updated tests * fixed lint and type checks * Removed changes and used ngstyle * Removed unnecessary dom related tests * Added tests for coverage * added more tests * fixed lint * fixed adventure completion progress * fixed frontend tests * added more tests * fixed type checks * addressed the review comments * fixed lint and frontend checks failure * fixed frontend tests * added frontend tests * added more tests for frontend coverage * addressed review comments * addressed review comments * fixed tests * fixed failing tests * fixed acceptance tests * fixing failing test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
Essential Checklist
Please follow the instructions for making a code change.
Proof that changes are correct
Screencast.from.2026-08-20.23-59-03.webm
PR Pointers