closes OUT-5168
flag=improved_lmgb
Test Plan:
- Disable Account and Course Level Outcome Mastery Scales FF
- Enable Learning Mastery Gradebook Redesign FF
- Enable Learning Mastery Gradebook
- Create 5 Outcomes ->
- 2 ratings (mastery at 1 point)
- 3 ratings (mastery at 2 points)
- 4 ratings (mastery at 3 points)
- 5 ratings (mastery at 3 points)
- 6 ratings (mastery at 4 points)
- Create a course and have these 4 outcomes within that course
- Using CURL or similar tool, invoke the outcome_rollups API using this
URL
- https://canvas.docker/api/v1/courses/{course_id}/outcome_rollups
- params:
- rating_percents: true
- per_page: 20
- include: ['outcomes']
- sort_by: student
- page: 1
- add_defaults: true
- Note: you will need a Bearer Token created in canvas in order to
invoke the API
- Go to "linked" -> "outcomes" in the response body
- Verify the following:
- The outcome with 2 ratings:
- ratings[0].mastery == true && color == "0B874B"
- ratings[1].mastery == false && color == "555555"
- The outcome with 3 ratings:
- ratings[0].mastery == true && color == "0B874B"
- ratings[1].mastery == false && color == "FAB901"
- ratings[2].mastery == false && color == "555555"
- The outcome with 4 ratings:
- ratings[0].mastery == true && color == "0B874B"
- ratings[1].mastery == false && color == "FAB901"
- ratings[2].mastery == false && color == "E0061F"
- ratings[3].mastery == false && color == "555555"
- The outcome with 5 ratings:
- ratings[0].mastery == false && color == "0374B5"
- ratings[1].mastery == true && color == "0B874B"
- ratings[2].mastery == false && color == "FAB901"
- ratings[3].mastery == false && color == "E0061F"
- ratings[4].mastery == false && color == "555555"
- The outcome with 6 ratings:
- ratings[0].mastery == false && color == "0374B5"
- ratings[1].mastery == true && color == "0B874B"
- ratings[2].mastery == false && color == "FAB901"
- ratings[3].mastery == false && color == "D97900"
- ratings[4].mastery == false && color == "E0061F
- ratings[5].mastery == false && color == "555555"
- Change the mastery points on the outcome with 5 ratings to match the
"Below Mastery" level
- Verify that the outcome with 5 ratings no longer includes default
color information
- Navigate to the Grades tab in canvas for your created course
- Verify that the page loads without any console errors
Change-Id: I2de9d81116e7f41f64d8f8d5ab3ff7a0102b5322
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/296680
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Angela Gomba <angela.gomba@instructure.com>
QA-Review: Angela Gomba <angela.gomba@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
closes OUT-5173
flag=improved_outcomes_management
Hackweek Q3 2022
Test Plan:
- Navigate to the Outcome Management page
- Case 1: Import outcome group to root group using Find button
- Make sure the root group is expanded on the LHS
- Click the Find button in the upper right corner to open the
Find Outcomes Modal
- In the FOM, open an outcome group that you will import
- Click the "Add All Outcomes" button and select the "Done"
button at the bottom before the outcomes finish importing
- Wait for the flash alert to notify you that the import was
successful
- Observe that the LHS is refreshed with the outcome group
- Case 2: Import outcome group to an existing outcome group
- Create a new group on the IOM page
- Click on that group on the LHS to open the group on the RHS
- Make sure the group is expadned on the LHS
- Click the kebab menu for this group on the RHS
- Click "Add Outcomes" in the dropdown menu
- In the FOM, open an outcome group that you will import
- Click the "Add All Outcomes" button and select the "Done"
button at the bottom before the outcomes finish importing
- Wait for the flash alert to notify you that the import was
successful
- Observe that the LHS is refreshed with the outcome group
- Case 3: Import outcome group while browsing IOM
- Create a new group in the IOM page
- Click or create another group to import outcomes into
- Make sure this group is expanded on the LHS
- Use the kebab menu on the RHS to open the FOM
- Import an outcome group using the "Add All Outcomes" button
and click "Done" before the outcomes finish importing
- Navigate to the new group you created in step 1
- Wait for the flash alert to notify you that the import was
successful
- Observe the LHS is updated with the outcome group in the
group it was imported in
- Repeat the 3 cases above but with single outcomes instead of
outcome groups (Note: there will be no flash alert when the
outcome is imported, so wait about 5-10 seconds)
Change-Id: I7545d43d4d862cd37c3b45feed2efe7b743ad173
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/297952
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
QA-Review: Chrystal Langston <chrystal.langston@instructure.com>
Reviewed-by: Martin Yosifov <martin.yosifov@instructure.com>
If a user has a teacher and student enrollment only one to do list
was rendering. With this patchset both to do lists will render but
their titles will provide additional context (Student To Do, Teacher
To Do) to help distinguish which list is which.
fixes LS-3315
flag=render_both_to_do_lists
test plan:
- Create a course with a teacher and a student with an assignment that
requires grading
- As the teacher, verify on the dashboard the to do list is titled
"To Do" and has the assignment requiring grading listed
- Enroll the teacher as a student in another course
- Verify the dashboard now has two to do lists titled "Student To Do"
and "Teacher To Do".
- Remove the teacher enrollment so now the user only has a student
enrollment
- Verify the dashboard has a single to do list for the student titled
"To Do"
Change-Id: I26024e514bb79f0a6c9dc1efc2fd35c990ca8e72
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298566
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jackson Howe <jackson.howe@instructure.com>
QA-Review: Jackson Howe <jackson.howe@instructure.com>
Product-Review: Allison Howell <allison.howell@instructure.com>
fixes VICE-3050
flag=react_people_page
Test Plan:
- Tests pass
- With FF off, create a custom role
- Visit a course people page as user with teacher role
- Assign the custom role to a user in the course
- Turn 'People Page Upgrade' FF on and view course roster
- User's custom role should be visible in the roster table
Change-Id: I18651dae6666f71a870d20e3465e0df2f71f241f
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298769
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
also reduces the total runtime from 20s from 10s
Change-Id: I12f7d839751167f9f923d25ab7872dc13e59d297
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298838
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Aaron Ogata <aogata@instructure.com>
Product-Review: Aaron Ogata <aogata@instructure.com>
Reviewed-by: James Butters <jbutters@instructure.com>
Rover was originally added as a devDependency so that Apollo Studio
schema checks could be performed. However, Rover does not build under
linux/arm64, so developers with newer M1 Macs were unable to get Canvas
running. Instead, the schema checks will be run inside of a separate
rover specific container, removing the dependency.
[canvas-builds-refspec=1b94202e657e6899de6629afd85b628a1e27b66c]
[force-graphql-schema-check]
closes INTEROP-7174
flag=none
test-plan:
- the simulated post-merge build succeeds
- M1 users can run yarn install without issue
- devx is happy :P
Change-Id: I92f8862b580b4300b14ee98bc9e9826c8d649e96
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298396
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Aaron Ogata <aogata@instructure.com>
Build-Review: Aaron Ogata <aogata@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
Product-Review: Ryan Hawkins <ryan.hawkins@instructure.com>
closes LS-3355
flag = none
Test plan:
- Go to the feature options page
- Expect search to work
- Expect some flags to have the 'Feature Preview' pill - not "beta"
Change-Id: I15deed652a2f2899ad5fd5a54cac92b3ff660576
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298781
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Luis Oliveira <luis.oliveira@instructure.com>
QA-Review: Luis Oliveira <luis.oliveira@instructure.com>
Product-Review: Jackson Howe <jackson.howe@instructure.com>
closes LS-3341
flag = account_calendar_events
Test plan:
- Go to /accounts/self/calendar_settings
- Expect to see 'x Account Calendars selected' in the footer (after
the count loads)
- Toggle a few different accounts in the tree and expect the count
to update correctly
Change-Id: Ib63e249cbcdad965ce1c2dc53094c6acc08bbd72
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298591
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Eric Saupe <eric.saupe@instructure.com>
QA-Review: Eric Saupe <eric.saupe@instructure.com>
Product-Review: Allison Howell <allison.howell@instructure.com>
Allows administrators to filter by visible and hidden account
calendars. When a filter is being used, all matching descendant
accounts of the selected account are shown in a list. If a search
term is being used, the results are limited to 20 (since when
searching, nobody is going to sift through a list of 20+ accounts),
while if only a filter is being used, up to 100 results are shown.
Note: the "No account calendars selected" text is not yet functional
closes LS-3343
flag = account_calendar_events
Test plan:
- Go to /accounts/self/calendar_settings
- Use the filter dropdown to filter by visible or hidden calendars
- Expect to see only relevant calendars shown
- Use a filter and a search term simultaneously and expect to see
only relevant calendars
Change-Id: Ifa86033c9513fbc8ef1965d6cf9169019a304961
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298574
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Eric Saupe <eric.saupe@instructure.com>
QA-Review: Eric Saupe <eric.saupe@instructure.com>
Product-Review: Allison Howell <allison.howell@instructure.com>
Supports a debounced search. No tree functionality when displaying
search results. Also removes the bounce/fade animations from the
tree component.
Note: the filter dropdown and "No account calendars selected"
label are not functional yet
closes LS-3342
flag = account_calendar_events
Test plan:
- Go to /accounts/self/calendar_settings
- Type part of an account name into the search box
- Expect the search to be debounced
- Expect to see a loading spinner while loading
- Expect to see a list (not tree) of matching accounts
- Toggle a few checkboxes, delete the search term, and expect the
relevent accounts to still be checked/unchecked in the account
tree
- Type a nonsense query
- Expect a "no results" page
Change-Id: I1ce867252daf9d9ca65cafc8de5f04b925fb460c
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298262
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Robin Kuss <rkuss@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
Product-Review: Allison Howell <allison.howell@instructure.com>
fixes INTEROP-7567
flag=none
test plan:
* start creating a new assignment
* in the RCE add an LTI tool
* set Submission Type to 'External Tool'
* make sure that there is not a url set in the "Enter or Find an External Tool URL" input box
* click 'Find' and make sure that you can choose a tool from this dialog
* there should now be a url in the input field
Change-Id: I03573eed31522b6a5b85ed4cc953f90a79859fc3
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298221
Reviewed-by: Xander Moffatt <xmoffatt@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Alexis Nast <alexis.nast@instructure.com>
why:
When LTI tools create submissions for an assignment via AGS, if the
submission contained multiple files, it would create a separate
submission for each of them. This is because the code looped over each
file, submitting the assignment for each file upload.
This commit changes that behavior to configure the upload jobs
to not submit the assignment after the file is uploaded, and submit
the assignment right away (collecting the attachment ids and
feeding them to the submission immediately).
To facilitate this via InstFS, the attachment is created before kicking
off the file upload process, and sending that attachment's id in a
additional_captures param (`precreated_attachment_id`). In the InstFS
callback process, if a `precreated_attachment_id` is provided, that
attachment is used, instead of a new one being created.
Before, the behavior looked like this:
```
@startuml
"Main Thread" -> "Main Thread": Create Attachment #1
"Main Thread" -> Jobs: Create Job to fetch/submit Attachment #1
"Main Thread" -> "Main Thread": Create Attachment #2
"Main Thread" -> Jobs: Create Job to fetch/submit Attachment #2
Jobs -> Jobs: Attachment #1 is fetched & assignment is submitted
Jobs -> Jobs: Attachment #2 is fetched & assignment is submitted
@enduml
```
https://www.plantuml.com/plantuml/png/SoWkIImgAStDuLBoJSpCKmZ9A4fDJ55IqB
LJG16mKd06qYMf2eub9Od96RcfUIKAoeQOchpoaufXQa4SXP9yXRJKakGC_UBIfDpC4ZJzvD
XgHAQj2FrS8FLmVQXEKiWiXcXDJL5GKqWiBivCpmD9WSGXXfMafk0nm8Wu0nnIyrA0eGu0
Now, the attachment jobs are not configured to submit the assignment,
but the main thread that spawns those jobs submits the assignment. The
attachments aren't "finalized" at that point, but will be fetched and
finalized later, disregarding the assignment associated with the
attachment.
```
@startuml
"Main Thread" -> "Main Thread": Create Attachment #1
"Main Thread" -> Jobs: Create Job to fetch/update Attachment #1
"Main Thread" -> "Main Thread": Create Attachment #2
"Main Thread" -> Jobs: Create Job to fetch/update Attachment #2
"Main Thread" -> "Main Thread": Assignment is submitted
Jobs -> Jobs: Attachment #1 is fetched
Jobs -> Jobs: Attachment #2 is fetched
@enduml
```
https://www.plantuml.com/plantuml/png/SoWkIImgAStDuLBoJSpCKmZ9A4fDJ55IqBLJG
16mKd06qYMf2eub9Od96RcfUIKAoeQOchpoaufXQa4SXP9yXRJKakGC_TA254pzvDXgHA6jHeHj
TImkpapF0olFB5OeBatApImfIKtXuW9P1BSGrIz0bH0xKrFmA3D2LkQGcfS237e0
fixes INTEROP-7447
flag=ags_scores_file_error_improvements
test plan:
Create an external tool assignment, and create a submission with
at least two content items. When viewing the attempt in speedgrader, you
should see all content items displayed (previously, it would have shown
just the last file that was uploaded).
Change-Id: Ib1c05490c0d9975fc994712e0de57ddd22285608
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/296009
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Ryan Hawkins <ryan.hawkins@instructure.com>
Reviewed-by: Xander Moffatt <xmoffatt@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
Product-Review: Alexis Nast <alexis.nast@instructure.com>
closes INTEROP-7570
flag=none
test plan
* without this commit checked out
* with a LTI 1.3 dev key that has tools installed from it
* (it _can_ be a site admin key but doesn't have to be)
* disable one of the tools associated with the key (note that
the disabled workflow_state is different than deleted; it occurs
when a developer key account binding is turned off)
* update something about the developer key, like the tool name or
other tool settings
* the tool should have been un-deleted with a workflow_state that
matches the dev key's privacy level configuration
* check this commit out
* disable the tool again
* update the dev key again
* the tool should stay disabled
Change-Id: I821aea21ef6fd7e8dab088308438d220bb2f9ae3
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/297437
Product-Review: Alexis Nast <alexis.nast@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Ryan Hawkins <ryan.hawkins@instructure.com>
QA-Review: Ryan Hawkins <ryan.hawkins@instructure.com>
This commit allows StudentViewEnrollments to be filtered
from course roster tables via a GraphQL query filter.
fixes VICE-3043
flag=react_people_page
Test Plan:
- Tests pass
- With FF turned off, visit a course people page as a user
with the teacher role
- In a new tab, turn on 'People Page Upgrade' FF and visit
the same course people page as the same user
- The same number of users should be visible in
the legacy and upgraded roster tables
- With the FF turned on, click the Student View button
- Exit student view and ensure the same number of users
are visible in the upgraded course roster table as
before entering student view
Change-Id: I754442bb2310dcf2ce312835b1679ca589799a0b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298576
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Drake Harper <drake.harper@instructure.com>
flag=none
closes VICE-2967
test plan:
- Tests pass
- Go to /courses/[Course ID]/discussion_topics/[Discussion ID]/edit?embed=true
- Shouldn't have the navigation bar and other surrounding things
around the Discussion Edit/Create view.
- The published/not published thing should appear on top right and adjust
accordingly.
qa risk: low
Change-Id: I02ce835824c4035230946b88598956569c7c1977
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298467
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jason Gillett <jason.gillett@instructure.com>
Product-Review: Jason Gillett <jason.gillett@instructure.com>
QA-Review: Chawn Neal <chawn.neal@instructure.com>
fixes VICE-3053
flag=none
Test Plan
1. Open up storybook `yarn storybook`
2. Switch to attendees tab of Video Conference Modal
3. Make sure invite all members is unchecked
4. Use the Address Book that should now have appeared
5. Note the edit story for the modal also can pass in pre-selected users
Change-Id: Idbd6d2d4b6de34f2a0600d4f6bf182fc6dcbf1b3
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298433
Reviewed-by: Jason Gillett <jason.gillett@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Jason Gillett <jason.gillett@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Drake Harper <drake.harper@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
closes QUIZ-9919
flag=none
Test plan:
- PreReqs:
- New Quizzes configured
- A blueprint course with a new quiz
- An associated course
- Modify the blueprint course locked objects
- Observe default_blueprint_restrictions_updated event emitts with keys:
- canvas_course_id: set to the course id
- restrictions: a hash containing the selected restrictions
- Confirm no event is emitted without a new quiz
Change-Id: I8b19222b11e39ada751471701fffb51d7ab405d1
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298434
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jorge Arteaga <jorge.arteaga@instructure.com>
Reviewed-by: Stephen Kacsmark <skacsmark@instructure.com>
QA-Review: Jorge Arteaga <jorge.arteaga@instructure.com>
Product-Review: Stephen Kacsmark <skacsmark@instructure.com>