Skip to content

[#14097] Create Submission Reminders page#14370

Open
javieryeow wants to merge 14 commits into
TEAMMATES:masterfrom
javieryeow:feat/submission-reminders-page
Open

[#14097] Create Submission Reminders page#14370
javieryeow wants to merge 14 commits into
TEAMMATES:masterfrom
javieryeow:feat/submission-reminders-page

Conversation

@javieryeow

@javieryeow javieryeow commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Fixes #14097

Outline of Solution

  • sessions-table still emits the same reminder actions:
    • remind all non-submitters
    • remind selected non-submitters
  • instructor pages still listen to those events through sendRemindersToRespondentsEventHandler
  • shared handler now navigates to /web/instructor/sessions/:feedbackSessionId/send-reminders
  • it passes:
    • preselectNonSubmitters=true for “remind all non-submitters”
    • preselectNonSubmitters=false for “select non-submitters to remind”
    • returnUrl so the page can navigate back after submit/cancel

on the new send-reminders page:

  • preselect non-submitters when requested
  • same selection controls as before
  • submit reminders directly through remindFeedbackSessionSubmissionForRespondents
  • navigate back with the success message preserved

cleanup and test coverage:

  • removed the old send-reminders modal component and model
  • added unit tests for selection behavior on the new page
  • added a dedicated InstructorSessionSendRemindersPageE2ETest and required page object
  • updated existing e2e tests (InstructorHomePage, InstructorFeedbackSession, InstructorFeedbackReport) to use the new send reminders page instead
Screenshot 2026-06-28 at 5 15 05 PM Screenshot 2026-06-28 at 5 15 23 PM

Copilot AI review requested due to automatic review settings June 28, 2026 09:20

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Introduces a dedicated instructor “Send Reminders” page (replacing the previous modal) to better support large classes, while preserving existing reminder entry points from session-related instructor pages and updating test coverage accordingly.

Changes:

  • Added a new instructor route and standalone page for selecting respondents and sending submission reminders, with optional preselection of non-submitters and return navigation.
  • Refactored existing “send reminders” triggers to navigate to the new page instead of opening a modal / emitting modal results.
  • Removed the old send-reminders modal implementation and updated/added unit + E2E tests and page objects for the new flow.

Reviewed changes

Copilot reviewed 29 out of 29 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
src/web/app/pages-instructor/instructor.routes.ts Registers the new :feedbackSessionId/send-reminders route.
src/web/app/pages-instructor/instructor-session-send-reminders-page/instructor-session-send-reminders-page.component.ts Implements the new page: data loading, selection logic, reminder submission, safe return URL.
src/web/app/pages-instructor/instructor-session-send-reminders-page/instructor-session-send-reminders-page.component.html New page UI: session details, selection controls, respondent table, actions.
src/web/app/pages-instructor/instructor-session-send-reminders-page/instructor-session-send-reminders-page.component.scss Styles for the new page layout and controls.
src/web/app/pages-instructor/instructor-session-send-reminders-page/instructor-session-send-reminders-page.component.spec.ts Unit tests for selection behavior, toggles, navigation, and error handling.
src/web/app/pages-instructor/instructor-session-result-page/instructor-session-result-page.component.ts Removes now-obsolete reminder-sending logic previously tied to the modal response.
src/web/app/pages-instructor/instructor-session-result-page/instructor-session-result-page.component.html Removes event binding previously used to send reminders via the modal workflow.
src/web/app/pages-instructor/instructor-session-result-page/instructor-session-no-response-panel.component.ts Replaces modal opening with navigation to the new send-reminders page.
src/web/app/pages-instructor/instructor-session-result-page/instructor-session-no-response-panel.component.html Updates “Remind All” button to use the new navigation handler.
src/web/app/pages-instructor/instructor-session-result-page/instructor-session-no-response-panel.component.spec.ts Updates/extends tests to assert navigation to the send-reminders page.
src/web/app/pages-instructor/instructor-session-modal-page.component.ts Updates shared reminder handler to navigate to the new page (with preselect + returnUrl).
src/web/app/components/sessions-table/send-reminders-to-respondents-modal/send-reminders-to-respondents-model.ts Deletes old modal response model.
src/web/app/components/sessions-table/send-reminders-to-respondents-modal/send-reminders-to-respondents-modal.component.ts Deletes old modal component.
src/web/app/components/sessions-table/send-reminders-to-respondents-modal/send-reminders-to-respondents-modal.component.html Deletes old modal template.
src/web/app/components/sessions-table/send-reminders-to-respondents-modal/send-reminders-to-respondents-modal.component.scss Deletes old modal styles.
src/web/app/components/sessions-table/send-reminders-to-respondents-modal/send-reminders-to-respondents-modal.component.spec.ts Deletes old modal unit tests.
src/web/app/components/sessions-table/respondent-list-info-table/respondent-list-info-table.component.ts Adds optional table label inputs for reuse on the new page.
src/web/app/components/sessions-table/respondent-list-info-table/respondent-list-info-table.component.html Renders optional student/instructor labels above the tables.
src/main/java/teammates/common/util/Const.java Adds a frontend URI constant for the new send-reminders page.
src/e2e/resources/testng-e2e.xml Includes the new E2E test in the TestNG suite.
src/e2e/resources/data/InstructorSessionSendRemindersPageE2ETest.json Adds data bundle for the new send-reminders page E2E test.
src/e2e/java/teammates/e2e/pageobjects/InstructorSessionSendRemindersPage.java New page object encapsulating interactions/assertions for the send-reminders page.
src/e2e/java/teammates/e2e/pageobjects/InstructorHomePage.java Updates reminder flows to use the new send-reminders page object.
src/e2e/java/teammates/e2e/pageobjects/InstructorFeedbackSessionsPage.java Updates reminder flows to use the new send-reminders page object.
src/e2e/java/teammates/e2e/pageobjects/InstructorFeedbackResultsPage.java Updates reminder flow to use the new send-reminders page object.
src/e2e/java/teammates/e2e/cases/InstructorSessionSendRemindersPageE2ETest.java Adds dedicated E2E test for the new send-reminders page.
src/e2e/java/teammates/e2e/cases/InstructorHomePageE2ETest.java Updates existing E2E assertions to follow the new reminder navigation flow.
src/e2e/java/teammates/e2e/cases/InstructorFeedbackSessionsPageE2ETest.java Updates existing E2E assertions to follow the new reminder navigation flow.
src/e2e/java/teammates/e2e/cases/InstructorFeedbackReportPageE2ETest.java Updates existing E2E assertions to follow the new reminder navigation flow.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

class="btn btn-secondary btn-sm button"
type="button"
(click)="!isDisplayOnly && openSendReminderModal($event); $event.stopPropagation()"
(click)="!isDisplayOnly && openSendReminderPage($event); $event.stopPropagation()"
Comment on lines +177 to +183
sendReminders(): void {
this.isSubmittingReminders = true;
this.feedbackSessionsService
.remindFeedbackSessionSubmissionForRespondents(this.feedbackSessionId, {
usersToRemind: this.selectedRespondents.map((model) => model.id),
isSendingCopyToInstructor: this.isSendingCopyToInstructor,
})
Comment on lines +3 to +5
@if (studentTableLabel) {
<h1>{{ studentTableLabel }}</h1>
}
Comment on lines +154 to +156
@if (instructorTableLabel) {
<h1>{{ instructorTableLabel }}</h1>
}
Comment on lines +1 to +7
.align-row-right {
align-items: center;
display: flex;
flex-wrap: wrap;
gap: 12px;
justify-content: right;
}
Comment on lines +109 to +120
public void selectStudentByEmail(String studentEmail) {
WebElement studentList = waitForElementVisibility(By.id("student-list-table"));
List<WebElement> rows = studentList.findElements(By.cssSelector("tbody tr"));

for (WebElement row : rows) {
List<WebElement> cells = row.findElements(By.cssSelector("td"));
if (!cells.isEmpty() && cells.get(4).getText().equals(studentEmail)) {
click(cells.get(0).findElement(By.tagName("input")));
break;
}
}
}
@javieryeow

Copy link
Copy Markdown
Contributor Author

@samuelfangjw hi, was investigating the e2e test errors: InstructorHomePageE2ETest: "download results"

BaseE2ETestCase.verifyDownloadedFile is failing as the downloaded file could not be identified, and upon checking the downloads folder, the files are being saved as temporary download files that likely indicate the download is not being finalised (im using chrome so they appear as .com.google.Chrome.xxx). could i check if this is an existing issue or perhaps something to do with my test environment? im testing without my changes and the error seems to be happening as well.

@samuelfangjw

Copy link
Copy Markdown
Member

BaseE2ETestCase.verifyDownloadedFile is failing as the downloaded file could not be identified, and upon checking the downloads folder, the files are being saved as temporary download files that likely indicate the download is not being finalised (im using chrome so they appear as .com.google.Chrome.xxx). could i check if this is an existing issue or perhaps something to do with my test environment? im testing without my changes and the error seems to be happening as well.

Hi @javieryeow, it's a known issue for chrome. Firefox is the only stable one at the moment. As long as it passes on CI it's ok.

Please also help to remove the added InstructorSessionSendRemindersPageE2ETest, updating the existing tests will do.

@javieryeow javieryeow force-pushed the feat/submission-reminders-page branch from dc7f20e to b4df6bd Compare June 29, 2026 16:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Create Submission Reminders page

3 participants