Skip to content

Conversation

@tamaskozmer
Copy link
Contributor

No description provided.

kdeakinstructure and others added 30 commits September 23, 2025 11:51
Fix Report A Problem test in all the 3 apps.
Add new subcategory.

refs: MBL-19331
affects: Teacher, Student, Parent
release note:
refs: MBL-19109
affects: Student
release note: Fixed a bug where quizzes would not open in some cases.

test plan: See ticket
refs: MBL-19358
affects: Teacher
release note: Fixed a scrolling issue in SpeedGrader when grading New Quizzes assignments.
refs: CLX-2876
affects: Horizon
release note: none
… instead of the due date

refs: MBL-19322
affects: Student, Teacher
release note: Assignments on Assignment list are now sorted by due date.
…p on the quick SG icon, the app crashes

refs: MBL-19279
affects: Teacher
release note: Fixed a crash occurred when opening SpeedGrader with an unpublished quiz.
refs: MBL-19299
affects: Student, Parent
release note: Excused assignments now consistently show an 'Excused' status in both the assignment list and assignment details.
…3265)

* Fix Alert Settings error message to be shown in every case, regardless of type and the size of the given number.

refs: MBL-19298
affects: Parent
release note: Always show Alert Settings error message regardless of type and number size.

* Revert "Fix Alert Settings error message to be shown in every case, regardless of type and the size of the given number."

This reverts commit 7526414.

* Fix alert settings threshold to not accept numbers with more than 3 characters.

refs: MBL-19372
affects: Parent
release note: Limit Alert Settings threshold numbers for maximum 3 characters.
…he text

refs: MBL-19309
affects: Teacher
release note: Fixed a bug occurred while filtering by section on Submission list.
…me page navigation (#3271)

* Implement interaction test for Home page navigation in CourseBrowser.

refs: MBL-17359
affects: Student
release note:

* Add CourseFrontPageEndpoint and interaction test
for home page navigation.

refs: MBL-17359
affects: Student
release note:

* PR fix

refs: MBL-17359
affects: Student
release note:

* PR fix

refs: MBL-17359
affects: Student
release note:
…nAttempts E2E test (#3254)

* Remove Stub from testCommentsBelongToSubmissionAttempts E2E test.

refs: MBL-19331
affects: Student
release note:

* Remove sleep after sending a comment - attempt to fix on CI.

refs: MBL-19298
affects: Student
release note:

* Add utility function  to wait for the WorkManager job to be finished.

refs: MBL-19298
affects: Student
release note:

* Attempt to force workmanager to execute jobs immediately in tests.

refs: MBL-19298
affects: Student
release note:

* Force workmanager job to be finished automatically with TestDriver.
Synchronize gradle workmanager testing lib versions.
Remove unnecessary duplicated initialization in 'setupWorkerFactory' in StudentTest. (It's already happening in CanvasTest)

refs: MBL-19298
affects: Student
release note:

* Attempt to fix workmanager null exception.

refs: MBL-19298
affects: Student
release note:

* PR suggestion fixes.
Extract work manager handling to the global TestingUtils file, so it can be used everywhere.
Simplify/beautify code.

refs: MBL-19298
affects: Student
release note:

* Copilot PR suggestion.
Stabilize some interaction tests (use other retry logic).

refs: MBL-19298
affects: Student
release note:

* Delete unused TestAppManager class from student. (We are using the global TestAppManager).

refs: MBL-19298
affects: Student
release note:
…tly reverts to Incomplete

refs: MBL-19361
affects: Teacher
release note: Fixed a bug that occurred when grading complete/incomplete assignment in Speed Grader.
refs: MBL-19378
affects: Student, Teacher
release note: none
…a cannot see past attempts on assignment submissions

refs: MBL-19303
affects: Teacher
release note: Fixed an issue where teachers logged in under a root account in a Consortia could not view past attempts on assignment submissions.
… courses in closed terms

refs: MBL-19363
affects: Student, Parent, Teacher
release note: Users are no longer able to send Inbox messages from courses that have been concluded or are part of a past term.
#3247)

* Unifying automation packages.
Unifying naming conventions.
Remove some unnecessary files (some of them were merged into other files, some were unused).

refs: MBL-18862
affects: Teacher, Student, Parent
release note:

* Fix annotations package path in flank files.

refs: MBL-18862
affects: Teacher, Student, Parent
release note:

* Stub (back) report a problem E2E test. (It will be fixed in another ticket)

refs: MBL-18862
affects: Teacher, Student, Parent
release note:

* Rename 'renderTest' and 'renderPages' to 'rendertest' and 'renderpages'.
Also, rename 'mockCanvas' to 'mockcanvas'.
Resolve conflicts.

refs: MBL-18862
affects: Student, Teacher, Parent
release note:

* Attempt to fix testCommentsBelongToSubmissionAttempts (make testDriver null safe and wait for the workInfo).

refs: MBL-18862
affects: Student, Teacher, Parent
release note:

* Put back TestAppManager to student (attempt to fix breaking test on CI).

refs: MBL-18862
affects: Student, Teacher, Parent
release note:

* print workinfos.

refs: MBL-18862
affects: Student, Teacher, Parent
release note:

* Add logcat log about available workinfos.

refs: MBL-18749
affects: Student, Teacher
release note:

* Refactor handleWorkManagerTask to make sure first the testDriver won't be null before asking for workInfos.

refs: MBL-18862
affects: Student, Teacher
release note:

* Log available workinfos with assertion fails.
reset timeout when checking for workinfos.

refs: MBL-18862
affects: Student, Teacher
release note:

* Set local testDriver after re-initialize app.testDriver.

refs: MBL-18862
affects: Student, Teacher
release note:

* Put fix order and put workmanager related test as first in the AssignmentsE2ETest class.

refs: MBL-18862
affects: Student, Teacher, Parent
release note:

* Make sure workmanager related test will be the first to execute.

refs: MBL-18862
affects: Student, Teacher, Parent
release note:

* Fix breaking testComments_previewAttachment test. (Implementing HEAD mock).

refs: MBL-18862
affects: Student, Teacher, Parent
release note:
refs: CLX-2877
affects: Horizon
release note: none
…m 'Resources' page

refs: MBL-19176
affects: Student
release note: Fixed an issue that occurred when opening LTI Tools from the K5 Resources screen.
…ls to Open Correct Application (#3272)

refs: MBL-19024
affects: Teacher
release note: Fixed a bug where the Play Store/other app wouldn't open when clicking it's icon on the not a teacher screen.

* Open app or play store when clicked

* Vibe coded fixes

* Fixed crash
Add pendoAccessToken property (with dummy value) to open_source_data
for student, teacher, and parent apps to fix open source builds.

This property is required by the build.gradle files but was missing
from the open source configuration.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <[email protected]>
…3277)

Test plan: See ticket. Button is disabled while upload is in progress.

refs: MBL-18997
affects: Student, Teacher, Parent
release note: Fixed a bug where inbox messages were sent without attachment in some cases.
* Add GitHub Action for unit test coverage delta tracking

This workflow runs unit tests on PRs and calculates code coverage delta
compared to the master branch. It posts a sticky comment on the PR
showing coverage changes for student, teacher, and pandautils modules.

Key features:
- Runs unit tests only (not UI tests)
- Calculates instruction coverage percentage delta (not test count)
- Updates a single sticky comment on each run to avoid spam
- Supports optional threshold check to fail PR if coverage drops

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* Fix open source build and add parallelization

- Add missing pendoAccessToken property to open_source_data for student,
  teacher, and parent apps
- Add open_source.sh setup step to both PR and master test jobs
- Parallelize workflow: split into 3 jobs (test-pr, test-master,
  coverage-report) that run PR and master tests concurrently
- Add --parallel flag to Gradle test commands
- Use artifacts to pass coverage data between jobs

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* Add parent app and fix gradle paths

- Add parent app to coverage tracking (student, teacher, parent, pandautils)
- Fix gradle/gradlew path issues by using -p flag consistently
- Remove 'cd' commands that broke paths
- Rebase on master to include pendoAccessToken fix

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* Fix pandautils test execution path

Run pandautils tests from apps build instead of trying to use
non-existent libs build. Pandautils is a subproject of apps.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* Add parent app to JaCoCo coverage configuration

Include parent app in coverage tracking alongside student, teacher,
and pandautils. Parent uses the qaDebug variant like student/teacher.

Tested locally:
- Tests run successfully
- JaCoCo report generates correctly
- CSV file created at expected location

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* Temporarily remove parent from coverage workflow

Parent coverage will be added in a follow-up PR after jacoco config
is merged to master. This avoids N/A coverage on master branch.

---------

Co-authored-by: Claude <[email protected]>
…dit Syllabus page (#3286)

refs: MBL-19271
affects: Teacher
release note: Fixed an issue where embedded images in syllabus content would not display when editing the syllabus

test plan:
- Open Teacher app
- Navigate to a course with a syllabus containing embedded images
- Tap "Edit" on the syllabus page
- Verify that embedded images display correctly in the editor

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <[email protected]>
refs: MBL-19379
affects: Parent
release note: Fixed a bug where discussion attachments couldn't be downloaded.
* Migrate test report logs from Splunk to Observe.

refs: MBL-19357
affects: Student, Teacher, Parent
release note:

* Change Observe URL.

refs: MBL-19357
affects: Student, Teacher, Parent
release note:

* Change 'event' json attribute to 'data'.

refs: MBL-19357
affects: Student, Teacher, Parent
release note:

* Simplify JSON (cut sourceType from it as Observe only expects a data).
Define content-length to make sure it's a json type.

refs: MBL-19357
affects: Student, Teacher, Parent
release note:

* Refactor bash script to send data to Observe in correct form.

refs: MBL-19357
affects: Student, Teacher, Parent
release note:

* Migrate from Splunk to Observe in TimingsListener (measuring timing, size, etc.)

refs: MBL-19357
affects: Student, Teacher, Parent
release note:
…ly anymore

refs: MBL-19278
affects: Teacher
release note: Added automatic refresh to Assignment List when grading submissions in SpeedGrader.
refs: MBL-19199
affects: Parent
release note: Fixed downloading files in Submission details.
…gnment Details instead of Submission Details #3293

refs: MBL-19203
affects: Student
release note: Fixed an issue where submission comment push notifications wouldn't route to the submission.
adamNagy56 and others added 21 commits October 22, 2025 15:45
…ctly when composing messages via FAB buttons, ensuring user-specific signatures don't leak between accounts (validates bug: MBL-18929 fix). (#3335)

refs: MBL-18950
affects: All
release note:
- Update claude_args to use GitHub MCP tools for inline reviews
- Add permissions for pull-requests: write to enable review submissions
- Update prompt to instruct Claude to use GitHub review system
- Configure tools: create_pending_pull_request_review, add_comment_to_pending_review, submit_pending_pull_request_review, get_pull_request_diff

This allows Claude to add inline comments directly on specific lines of code rather than posting a single summary comment.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <[email protected]>
…er (#3338)

Fixed an issue where soft concluded courses (courses concluded by term dates) were showing up for observers when composing a message in the Parent Inbox.

## Problem
The Canvas API returns `enrollment_state: "active"` for soft concluded courses, so the existing enrollment state filtering was insufficient. Soft concluded courses are those that have ended based on term/course dates but were not manually concluded.

## Solution
1. Modified `CourseAPI.getCoursesByEnrollmentType()` to include `include[]=term` parameter to fetch term information
2. Added filtering in `ParentInboxCoursePickerViewModel` using `Course.isPastEnrolment()` to exclude:
   - Hard concluded courses (workflowState == COMPLETED)
   - Soft concluded courses with past term end dates
   - Soft concluded courses with past course end dates
3. Added comprehensive test coverage for all concluded course scenarios

## Test plan:
- ✅ Manually tested with test account (inboxobs on awarenski.instructure.com) that has multiple concluded enrollments
- ✅ Verified only active courses appear in the course picker when composing a message
- ✅ All unit tests pass (6/6 tests in ParentInboxCoursePickerViewModelTest)
- ✅ Tested new filtering logic with courses concluded by term dates
- ✅ Tested new filtering logic with courses concluded by course dates
- ✅ Tested new filtering logic with hard concluded courses

refs: MBL-19421
affects: Parent
release note: Fixed issue where concluded courses appeared when composing messages in Parent Inbox

## Checklist

- [x] Follow-up e2e test ticket created or not needed
- [x] Tested in dark mode
- [x] Tested in light mode
- [ ] A11y checked
- [ ] Approve from product

🤖 Generated with [Claude Code](https://claude.com/claude-code)
…nversations are excluded (#3339)

* Extend NotificationsE2ETest to verify inbox conversations are not listed in notifications page.

refs: MBL-19440
affects: Student
release note:

* PR fix

refs: MBL-19440
affects: Student
release note:

---------
…Assignment Details screen

refs: MBL-19441
affects: Student, Parent
release note: Displaying Discussion Checkpoint grades in the Assignment Details screen.
refs: CLX-3122
affects: Horizon
release note: none
…3345)

refs: CLX-3130
affects: Horizon
release note: none
## Summary

Fixes a bug where the Android Student app's To-Do list was displaying already-submitted quiz items. The iOS app correctly filtered these out, but Android was missing the quiz type check.

## Changes

- **TodoListRecyclerAdapter.kt**: Added `PlannableType.QUIZ` to the `isComplete()` method to filter out submitted quizzes
- **TodoListRecyclerAdapter.kt**: Changed `isComplete()` visibility from `private` to `internal` to enable unit testing
- **TodoListRecyclerAdapterTest.kt**: Added comprehensive unit tests covering all plannable types (13 tests, all passing)

## Root Cause

The `isComplete()` method only checked `submissionState.submitted` for ASSIGNMENT, DISCUSSION_TOPIC, and SUB_ASSIGNMENT types. Quizzes also have submission states but weren't included in the check, causing them to remain in the to-do list even after submission.

## Test Plan

### Manual Testing
1. Build and install the app on a device
2. Login with test credentials from the Jira ticket
3. Navigate to: To Do
4. **Expected**: Completed quizzes should NOT appear
5. **Expected**: Only incomplete/unsubmitted items should be displayed

### Unit Tests
```bash
./gradle/gradlew -p apps 🧑‍🎓testQaDebugUnitTest --tests TodoListRecyclerAdapterTest
```
All 13 tests pass, covering:
- Submitted/unsubmitted quizzes ✅
- Submitted/unsubmitted assignments ✅
- Submitted/unsubmitted discussions ✅
- Submitted/unsubmitted sub-assignments ✅
- Non-submittable types (calendar events, planner notes, etc.) ✅

refs: MBL-19430
affects: Student
release note: Fixed To-Do list incorrectly showing completed quiz submissions

## Checklist

- [x] Follow-up e2e test ticket created or not needed (not needed - unit tests cover the logic)
- [x] Tested in dark mode
- [x] Tested in light mode
- [x] A11y checked
- [x] Approve from product

🤖 Generated with [Claude Code](https://claude.com/claude-code)
…r, Todo, and Widget (#3349)

## Summary
Fixes anonymous discussion navigation from Calendar, Todo list, and Widget views. The Canvas API returns 404 when attempting to fetch anonymous discussion headers by ID, which caused navigation failures. This PR adds proper handling by routing directly to the web view when the API returns null for discussions with redesign enabled.

## Test plan
1. As an instructor, create an anonymous discussion in a course
2. As a student, navigate to Calendar view and click on the anonymous discussion entry
3. Verify the discussion opens successfully in web view
4. Repeat for Todo list and Widget views
5. Test with discussion redesign disabled - should show error toast (existing behavior)
6. Test group discussions - should skip to parent discussion if child header is unavailable

## Manual Testing
- Tested with anonymous discussions in Calendar view
- Tested with discussion redesign enabled/disabled
- Verified group discussion handling
- All unit tests passing (11 tests in DiscussionRouterViewModelTest)

refs: MBL-19438
affects: Student, Teacher
release note: Fixed an issue where anonymous discussions could not be opened from Calendar, Todo, and Widget views

## Checklist

- [ ] Follow-up e2e test ticket created or not needed
- [x] Tested in dark mode
- [x] Tested in light mode
- [ ] Test in landscape mode and/or tablet
- [x] A11y checked
- [ ] Approve from product
refs: MBL-19442
affects: Student
release note: Updated notifications list to display Discussion Checkpoint submission labels.
…in Syllabus (#3344)

* Seed Discussion (with checkpoints) via GraphQL. (It does not work yet because of backend beta bug.)
Update schema.json in dataseeding (by copying the canvasapi2 schema.json on it).
Add DateTime parser to ApolloClient.

refs: MBL-19335
affects: Student
release note:

* Add graphql mutations to create Discussion with Checkpoints (there's a "full one" and a "minimal one").

refs: MBL-19335
affects: Student
release note:

* Prepare Discussion Checkpoints Assignment related E2E test.

refs: MBL-19335
affects: Student
release note:

* Discussion checkpoint assignment list related E2E test flow.

refs: MBL-19335
affects: Student
release note:

* Add test flow for assignment details page for discussion checkpoints.
Add some testtags + wrap DueDateBlock into a Column to be able to identify it.

refs: MBL-19335
affects: Student
release note:

refs: MBL-19420
affects: Student
release note:

* Fix breaking submodule tests.

refs: MBL-19335
affects: Student
release note:

refs: MBL-19420
affects: Student
release note:

* Implement Discussion Checkpoint E2E Test for Syllabus assignment list page.

refs: MBL-19435
affects: Student
release note:

refs: MBL-19420
affects: Student
release note:

* Fix discussion checkpoint E2E test assertions.

Update discussion checkpoint test to use actual due dates instead of "No Due Date" and fix toolbar subtitle assertion to be more specific by adding ancestor matcher.

refs: MBL-19435
affects: Student
release note:

* Adjust timezone difference between local and FTL machine.

* Fix breaking UserGroupFilesE2ETest.kt to only wait for workmanager if it's not (immediately) succeeded.

* Remove unnecessary exception handling.

* Refactor Discussion Checkpoint in Syllabus test according to new master changes (on assignment details page there is a separate box for the checkpoints, so added some assertions to it).
Fix scrolling issue.

* Modify dates to match FTL device timezone.
refs: CLX-2927
affects: Horizon
release note: none

---------

Co-authored-by: andras.maczak <[email protected]>
…ame format (#3350)

Studio videos embedded via external_tools/retrieve URL format were not being detected and synced for offline viewing. Additionally, videos were not playing due to DASH mimeType incompatibility with HTML5 video player.

## Changes
- Added `studioIframeExternalToolsRegex` to detect Studio iframes in external_tools/retrieve format
- Refactored `parseAndReplaceStudioVideos()` to process multiple regex patterns in a single loop
- Override mimeType to `video/mp4` for local playback (Studio API returns `application/dash+xml` but we download MP4)
- Extended test coverage with 5 new test cases covering various scenarios

## Test plan:
1. Navigate to a page with Studio video embedded via external_tools/retrieve iframe
2. Enable offline mode for the course containing the page
3. Wait for sync to complete
4. Go offline and verify the video plays correctly with proper poster image

refs: MBL-19433
affects: Student
release note: Fixed Studio videos not working offline when embedded via external_tools

## Checklist

- [ ] Follow-up e2e test ticket created or not needed
- [x] Tested in dark mode
- [x] Tested in light mode
- [x] Test in landscape mode and/or tablet
- [ ] A11y checked
- [ ] Approve from product
refs: CLX-3120
affects: Horizon
release note: none
Added detection and button injection for studio/canvas media iframes to enable immersive view mode. The implementation includes:
- Detection of studio/canvas media URLs in HtmlContentFormatter
- Title extraction from iframe attributes
- Button injection for studio/canvas media with "View in full screen" text
- Route handling in Student RouteMatcher for media_attachments immersive view URLs
- URL conversion from media_attachments_iframe to media_attachments format
- Always adding embedded=true parameter to URLs
- Fallback to "Immersive view" string resource when no title is available

refs: MBL-19329
affects: Student
release note: none

test plan:
1. Navigate to a page with studio/canvas media iframe
2. Verify "View in full screen" button appears
3. Click button and verify immersive view opens with correct title
4. Test both iframe button (existing in web content) and injected button

🤖 Generated with [Claude Code](https://claude.com/claude-code)
* Fix empty course state

* Fix completed course handling

* Fix course sorting

* Fix time spent widget behaviour
refs: MBL-19449
affects: Teacher
release note: Fixed decimal grades being rounded in SpeedGrader.
refs: CLX-3184
affects: Horizon
release note: none
Test plan:
- Manually verify assignment_submit_selected event fires when tapping submit button on assignment details
- Manually verify audio_recorder media source is tracked when recording audio submission
- Unit tests pass (SubmissionDetailsEmptyContentEffectHandlerTest)

refs: MBL-19432
affects: Student
release note: none

## Checklist

- [x] Follow-up e2e test ticket created or not needed (not needed - analytics only)
- [x] Tested in dark mode (not applicable - no UI changes)
- [x] Tested in light mode (not applicable - no UI changes)
- [x] Test in landscape mode and/or tablet (not applicable - no UI changes)
- [x] A11y checked (not applicable - no UI changes)
- [ ] Approve from product
@inst-danger
Copy link
Contributor

Parent Install Page

# Conflicts:
#	apps/teacher/build.gradle
@inst-danger
Copy link
Contributor

Parent Install Page

@inst-danger
Copy link
Contributor

Student Install Page

@inst-danger
Copy link
Contributor

Parent Install Page

@inst-danger
Copy link
Contributor

Student Install Page

Copy link
Contributor

@kdeakinstructure kdeakinstructure left a comment

Choose a reason for hiding this comment

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

QA 👍

Copy link
Contributor

@adamNagy56 adamNagy56 left a comment

Choose a reason for hiding this comment

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

QA +1

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.

10 participants