closes LF-666
flag=none
test plan:
- in a rails console, find an assignment
- ensure that when the set_type is "Course", unassign_item
cannot be true
- run assignment.assignment_overrides.
create!(set: assignment.context, unassign_item: "true")
- the override should fail to create
- ensure that the "Course" set_type can otherwise be created
- assignment.assignment_overrides.create!(set: assignment.context)
Change-Id: Ica363c4ee387bc383d61ab882d6bd5ac7e26d4bf
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327131
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: Sarah Gerard <sarah.gerard@instructure.com>
fixes LF-720
flag=none
Test Plan:
- Create several recurring course calendar events
- Export the course and import it into another
- Check that the recurring events made it correctly
to the destination course
- Try the same with Blueprint Syncs and Course copies
- Ensure the recurring events are properly linked in
their destinations
Change-Id: I16297906bcabc7c23620f6cf4467baecb37f9615
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327058
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Robin Kuss <rkuss@instructure.com>
Reviewed-by: Mysti Lilla <mysti@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
Product-Review: Luis Oliveira <luis.oliveira@instructure.com>
closes OUT-5873
flag=outcome_alignment_summary_with_new_quizzes
Test plan:
- Start Canvas, Outcomes-Service, Quiz LTI and Quiz API
- Create course and enable "New Quizzes included on
Outcome Alignment Summary Tab FF"
- Add or Create at least 26 outcomes in the course
- Create new quiz and align all outcomes to the quiz
- Select Alignment Summary Tab and verify that that it
displays all aligned outcomes (scroll down until all
outcomes are loaded)
- Expand the outcome description of random set of aligned
outcomes and verify that it displays the new quiz alignment
- Filter outcomes "With Alignments", search for outcomes,
expand the descriptions of a random set of outcomes returned
from search and verify that it displays the new quiz alignment
Note: OS API returns up to 25 results per page; that's why
we need 26 outcomes to verify that AS supports pagination
Change-Id: I80d8bb5c173eae0be986b4aae1d82aa056775b04
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326973
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Wilmer Corrales <wilmer.corrales@instructure.com>
QA-Review: Angela Gomba <angela.gomba@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
refs VICE-3777
flag=student_grade_summary_upgrade
Test Plan:
- create a custom status
- assign a submission to the new status
- query the submission in gql with the customGradeStatus field
> should show name of custom status
Sample Query:
query MyQuery {
legacyNode(_id: "1019", type: Course) {
... on Course {
id
name
_id
assignmentsConnection {
nodes {
_id
name
submissionsConnection {
nodes {
_id
id
customGradeStatus
}
}
}
}
}
}
}
Change-Id: I4658a23aa666b57e376e8957ac65426034c15672
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327273
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jason Gillett <jason.gillett@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Drake Harper <drake.harper@instructure.com>
[skip-stages=Flakey]
[skip-crystalball]
and apply updated copys (RSpec/Eq and RSpec/MetadataStyle, and one
instance that the split RSpec/SpecFilePathSuffix caught)
Change-Id: I3872458f35b791f1ce3f8108a2aaf4fff2cfd612
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327204
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Isaac Moore <isaac.moore@instructure.com>
Build-Review: Isaac Moore <isaac.moore@instructure.com>
Build-Review: Cody Cutrer <cody@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
There are cases where an incoming reply to a canvas message
has html that is too long when the plain text content is not too long.
Submission and inbox messages do NOT use the HTML at all
Discussion entry replies can use it, but if it is nil, then it defaults to
use the plaintext over the html.
example in discussion entry reply_from
if opts[:html]
message = opts[:html].strip
else
message = opts[:text].strip
message = format_message(message).first
end
This should allow our users to send messages even if they have an
email signature that contains lots of html
refs VICE-3773
flag=none
Test Plan
1. Verify specs
2. Once deployed to an environment with email setup do:
2a. Send a message that contains html that is longer than 64kb
2b verify the message sent in canvas but only with plaintext contents
Change-Id: If1d90e8e63c9d333f005827839b5d2aaa0a1d4cb
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327236
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Chawn Neal <chawn.neal@instructure.com>
QA-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Sam Garza <sam.garza@instructure.com>
flag=none
fixes VICE-3690
Test Plan:
- Create a course.
- Create 1000 discussion topics for it.
- go to the discussion topics index.
-- look at the network request.
-- you should see 10.
in a request it will have 100.
Notes:
- increase discussion per page from 50 to 100.
- now per page propogates on BE and FE.
Change-Id: Ib018a9b0652839f2b7a7dc93a48b015852185b28
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327189
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
In the planner, we test if a user has access to an account context
by getting a list of the account IDs they're requesting and a list of
account calendar IDs they have access to. If an account ID appears
in the first but not the second, we run additional permission checks
(which most non-admin users won't pass). However, the IDs that the
user passes are transposed into local or global IDs relative to the
user's shard, while the account calendar IDs were previously relative
to the domain root account. Thus, if a user was requesting access
to a calendar on a different shard than the domain root account (but
also on the same shard as the user themself), we'd be comparing
local to global IDs and the check would fail. This commit transposes
the enabled account calendar IDs to be relative to the user's shard
to enable proper comparison of IDs.
flag = none
closes LF-570
Test plan:
(Requires trust setup)
- Enable the root account calendar on shard A
- Enroll a shard A user in a course on shard A and in a course on
shard B
- Visit the calendar as that user on shard B's domain
- Subscribe to shard's A root account calendar
- Expect no errors (specifically, the planner items request should
return a 2xx response)
Change-Id: I2fb572e342633805fa0d017041eb5f032f247eef
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327180
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: Jackson Howe <jackson.howe@instructure.com>
still very much a prototype
test plan:
- install pgvector extension
(i.e. `brew install pgvector` or your operating system's
package manager)
- run db migrations and verify the "vector" extension
gets enabled
- set up OpenAI API key via `bin/rails credentials:edit`
and add
smart_search:
openai_api_token: <...>
- enable the smart_search feature flag in an account
- in a course under that account, create some wiki pages
with nontrivial content
- as a user who can see those pages, using the magnifying
glass that appears in the global nav, search for things
(by ideas and concepts rather than just keywords)
- it should find results
limitations:
- lots, please refer to the ADV-22 epic for next steps
flag=smart_search
closes ADV-21
Change-Id: I4a6cf4bc98cb144707df156baf143c3f9b70acdf
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325880
Build-Review: Cody Cutrer <cody@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Zach Pendleton <zachp@instructure.com>
QA-Review: Zach Pendleton <zachp@instructure.com>
Product-Review: Zach Pendleton <zachp@instructure.com>
add pagination and search bar to peer review page in the teacher view
in order to fix page timeout when there are many peer reviews
closes EVAL-2762
flag=none
test plan:
- have a course with over 10 students and a peer review assignment
- as the teacher go to the assignment peer review page
- see that there are only 10 students on each page and the pagination
works
- use the search bar and enter search keywords
- see that page displays names relevant to the search keyword
Change-Id: Iaf6e2c81b8699fb4291b1ac6713b3004bc278f80
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326958
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
Reviewed-by: Jackson Huang <jackson.huang@instructure.com>
QA-Review: Christopher Soto <christopher.soto@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
not that we really need to change, but it serves as an example for future
migrations
Change-Id: Ie1a1975311c81b0c145c17af46e57e604a01eca5
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327026
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jackson Howe <jackson.howe@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Build-Review: Cody Cutrer <cody@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
refs AE-76
flag=none
test plan:
- secrets are read from Vault
- URL is read from Consul
Change-Id: Ie8fc4da260a36cab6446fcc15ab951a18df1c106
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326917
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Isaac Moore <isaac.moore@instructure.com>
Product-Review: Isaac Moore <isaac.moore@instructure.com>
flag=react_discussions_post
closes VICE-3706
Test Plan
1. Create a new discussion Entry
2. Verify that the discussion_entry_created event contains context info
2a. IF you don't want to set up liveEvents to QA:
2b. You can put a byebug on post_event in live_events.rb
2c. create a new discussion entry on react discussions
2d. Verify that the materialized_context contains the course context
Change-Id: I41c5170d3a75a1c93641e0dd027bdddba44b2d48
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327017
Reviewed-by: Drake Harper <drake.harper@instructure.com>
Product-Review: Drake Harper <drake.harper@instructure.com>
QA-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
This change adds the ability to filter the user search results by
temporary enrollment recipients and providers, or both. Later we will
identify the temporary enrollments in the search results by adding a
temporary enrollment icon to the user list rows. This will come in the
form of a provider or recipient specific icon.
closes FOO-3327
flag=temporary_enrollments
test plan:
• head on over to /accounts/self/users
• with the temporary enrollments FF enabled, you should see new
filter option checkboxes for temporary enrollments recipients and
providers
• in order for the temporary enrollments filters to work, you must
also have some temporary enrollment recipients and providers to
test with
• the filtering will work in conjunction with the existing search
filters, so you can filter by temporary enrollments and other
filters at the same time
• with the feature flag disabled, you shouldn't see the filter
checkboxes for temporary enrollment recipients and providers
Change-Id: I1da0cda2a8968982a3401efaf9f5bd4122463830
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327057
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Michael Hulse <michael.hulse@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: August Thornton <august@instructure.com>
fixes LF-731
flag=none
Test plan
- Specs pass
Change-Id: I5e0e5a2ddd0ae1703312d8ef9fb521717d7d6485
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327060
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Luis Oliveira <luis.oliveira@instructure.com>
Reviewed-by: Davis Hyer <dhyer@instructure.com>
QA-Review: Luis Oliveira <luis.oliveira@instructure.com>
QA-Review: Davis Hyer <dhyer@instructure.com>
Product-Review: Davis Hyer <dhyer@instructure.com>
fixes LF-656
flag=none
Test plan
- Set up a course with a page (or other rich content)
- Using the link insertion tray, insert a link to the
home page
- Copy the course
- Verify that the home page link you made points to
the new course after the course copy
- If you want, you can also export the course and
make sure that the link is a $CANVAS_COURSE_REFERENCE$
token and not a regular URL
Change-Id: Iffa27ea35b37e44bc33276baecb739d68b15b998
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326795
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob DeWar <jacob.dewar@instructure.com>
QA-Review: Jacob DeWar <jacob.dewar@instructure.com>
Product-Review: Mysti Lilla <mysti@instructure.com>
flag = none
closes LF-650
Test plan:
- Run the migration
- In a rails console, find a module and run:
`ao = context_module.assignment_overrides.create!
ao.assignment_override_students.create!(user: <a student>,
context_module: context_module)`
- Expect an AssignmentOverrideStudent to be created with a
reference to the module and the assignment override
- In psql, run `\d assignment_override_students` and observe that
the column is created along with the unique index and foreign key
Change-Id: I36d5d4250df09a67a2a27152bf6abc1c43d9f181
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326702
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Jackson Howe <jackson.howe@instructure.com>
Reviewed-by: Robin Kuss <rkuss@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
Also updates the check constraint to allow AssignmentOverride to
have an assignment, a quiz, or a module. Changes the original
migration which created this check constraint to a predeploy to
match this migration (so that the 2 migrations are run in
chronological order on fresh databases).
flag = none
closes LF-649
Test plan:
- Run the migration
- In a rails console, find a module and run:
`context_module.assignment_overrides.create!`
- Expect an AssignmentOverride to be created with a
context_module_id pointing to the module
- In psql, run `\d assignment_overrides` and observe that the
column was created, the index was created, the foreign key
exists, and the check constraint also checks for a
context_module_id
Change-Id: I93195e28d082411ac43ed715f8eab5b42bd0094c
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326620
Reviewed-by: Cody Cutrer <cody@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Jackson Howe <jackson.howe@instructure.com>
Product-Review: Jackson Howe <jackson.howe@instructure.com>
created LF-731 to fix
Change-Id: I6f756f5f631f08f9fbd9d2d856ae9301e6805634
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327042
Reviewed-by: Robin Kuss <rkuss@instructure.com>
Reviewed-by: Luis Oliveira <luis.oliveira@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
QA-Review: Luis Oliveira <luis.oliveira@instructure.com>
Product-Review: Jackson Howe <jackson.howe@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
fixes LF-661
flag=none
Test plan
- Go to the syllabus page in a course
- Check the edit button and ensure it's actually
a button (and is read as such in a screenreader)
- Verify it reads something ("collapsed" in Safari)
to let you know the edit portion is not visible
Change-Id: I13236217018652bf807e135e984285a3236c8eb9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326798
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob DeWar <jacob.dewar@instructure.com>
QA-Review: Jacob DeWar <jacob.dewar@instructure.com>
Product-Review: Daniel Sasaki <dsasaki@instructure.com>
closes LF-721
flag=calendar_series
test plan:
- click the + to create a new event
- set the date to a leap day (e.g. Feb 29, 2024
- open the frequency picker
> expect to see "Annually on Feb 29"
- click on custom and save
> expect to see "Annually on Feb 29, 5 times"
- submit
- when the api completes, click on one of the events
you just created
> expect the natural lang description to be correct
- click on one of the events and edit
- change the title and save
> expect the title to change on all events
(you can click on the month-year link at the top
of the calendar and type in a month-year
(eg. February 2028) to go there)
Change-Id: Ibd184e10597cf014ffa0ee877ae1911250330923
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327007
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: Ed Schiebel <eschiebel@instructure.com>
flag = none
closes LF-713
Test plan:
(This is just regression testing the feature)
- Set up some account calendar events in the next week
- Go to the planner and make sure the events appear
Change-Id: Ida4d01ad72d4e0c67a55e6a67cc0ba6384d01464
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326918
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: Jackson Howe <jackson.howe@instructure.com>
closes LF-714
flag = none
Test plan:
(This is just regression testing the auto subscription feature)
- Go to account calendar settings and make sure you can flip between
manual and auto subscription type
- Visit the calendar and expect to see events for auto subscribed
calendars, even if the user hasn't previously subscribed
Change-Id: I4a1d7188b15c6722457c77c1347668003aabb6c1
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326785
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: Jackson Howe <jackson.howe@instructure.com>
Fixes FOO-3768
flag=none
Test Plan:
* Have a cross-shard version of a existing user that still has the
old lti_context_id. (see ticket for context)
* The new user does not have an LTI context id, create one
* If the existing user was deleted, it's lti_context_id is nullified
* Otherwise, the new user gets a new randomize (not hashed global_id)
LTI context ID.
Change-Id: Ibf5a35828051ace4101fe7bfade96f9085e39ab5
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326878
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Jason Perry <jason.perry@instructure.com>
Product-Review: Jason Perry <jason.perry@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
created another ticket (LF-716) to clean this up
Change-Id: I0a739ce2e1c08b67dbc551d33a15d58a5852537a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326934
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: Jake Oeding <jake.oeding@instructure.com>
closes EVAL-3359
flag=enhanced_individual_gradebook
test plan:
- create a course with a student and a teacher
- create at least three assignments
- put them in one assignment group
- create rules to drop certain assignments(maybe try a couple
different combos)
- go to the traditional gradebook and grade some of those
submissions and ensure some of the cells are labeled as dropped and
note which assignments are dropped for that student
- go to the enhanced srgb and ensure that the when selecting the
same assignments and that student, that the grading results shows
a message reading: 'This grade is currently dropped for this
student.'
- ensure when switching between student and assignments that the
message is hidden and displayed appropriately
Change-Id: I686be76a1de96c45cdc1cbe46f646a4b2dc289d4
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325852
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Samuel Lee <samuel.lee@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
QA-Review: Christopher Soto <christopher.soto@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
flags = new_quizzes_third_party_imports
Test Plan:
- Flag no longer appears.
Change-Id: I978c6872cd5f91b4b35e6cbf30b9f1a2e00b6d08
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326456
Product-Review: Marissa Pio Roda <marissa.pioroda@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Ferenc Marcsó <ferenc.marcso@instructure.com>
QA-Review: Ferenc Marcsó <ferenc.marcso@instructure.com>
If the delay posting at is in the future, the button should say 'save'
if the delay posting at is unchecked or in the past, the button should say 'publish;
fixes VICE-3704
flag=none
Test Plan
1. Create a delayed announcement
2. Verify that when you delay the announcement it changes the submit button from
2a publish to save
3. Edit the announcement
4. verify that on edit, the submit button says "save" if it is delayed
5. uncheck the delayed_post_at checkbox
6. verify that the submit button says "publish"
Change-Id: I224178247669becd392df538caabad6e0d69ea36
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326455
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Drake Harper <drake.harper@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Sam Garza <sam.garza@instructure.com>
These started out as 3 separate commits, but the fixes
were intertwined and keeping them separate and stacked
on one another was proving to be too much of a hassle.
It should all work after this.
closes LF-629 LF-634 LF-632
flag=calendar_series
LF-629 "Update calendar correctly when editing recurring events"
Fixing this uncovered the same bug in the monthly view,
but it was just less noticable.
test plan:
- create a recurring event
- in an of the calendar views
- edit the title one of the events
- save any of the this, all, following options
> expect the events in the calendar to display the new title
- edit the start time of an event, save all and following
> expect the events in the calendar to show the start time
- try editing other stuff and expect it to work too
- edit an event in a series and shorten the series length
- save All Events
> expect the deleted events to be gone from the calendar
> expect them to be gone from the mini calendar
- change the title of 1 event and save "this event"
> expect just the 1 event to be updated
- change the title of the last event and save "this and following"
> expect just the 1 event to be updated
LF-634 "Stop FrequencyPicker changing when date on new event changes"
The root cause was not using the local state value for rrule, but
keying off the event.
test plan for 634
- in the calendar click on a date to create a new event
- in the modal, change the frequency
- then change the date
> expect the freq picker to change to reflect the new day
of the week
> unless it's a custom freq, in which case it remains the same
> this should work for weekly, monthly, and yearly frequencies
LF-632 "Update series events when changing calendars" test plan for
- have a teacher with a published course
- create an event series
- pick an event in the middle and change its calendar.
change just this event
- click on that event again, edit, submit, and choose all following
> expect all or all following events to reflect the new calendar
- click on each event
> expect the data in the popup to be correct
- switch to a different view
> expect the changes to the events to be reflected there too
Change-Id: Ie6ed678cf60922cd4660a3e75262b542d3e64a4d
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326203
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Juan Chavez <juan.chavez@instructure.com>
QA-Review: Juan Chavez <juan.chavez@instructure.com>
Product-Review: Ed Schiebel <eschiebel@instructure.com>
Some updates cause a series to be split in 2. The existing code
neglected to return the updated front half when that happened.
closes LF-702
flag=calendar_series
test plan:
- create a series of events
- change the start time of one in the middls and update
this and all following
> expect the edited event and those after to have the correct
description of the series
> expect the other events before the edited one to have an
updated description of the series
Change-Id: I374d43cd973704a6cedfbf47ac0a19a7b948b15a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326719
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: Ed Schiebel <eschiebel@instructure.com>
refactor the incomplete/complete select dropdown code into its own
component, which is associated with EVAL-3357
closes EVAL-3437
flag=individual_gradebook_enhancements
test plan:
1. the tests pass in GradingResults.test.tsx file
2. the grading functions work as intended
- incomplete/complete dropdown grading for the submission details
modal and main grade input
- the text input grading for the submission details modal and main
grade input
Change-Id: I35861e2d487c0c6b0bf08898773f75df0ad67d70
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326428
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
QA-Review: Jackson Huang <jackson.huang@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>
test plan:
- do a sis import using form data to provide AP parameters
but omit `attachment`
- you should get a 400 error with a "missing parameter" message
rather than an unsuccessful sis import that tried to
interpret the form itself as a sis batch
flag=none
closes FOO-3738
Change-Id: Ida7bc6e2bbde9e8db42965b94eda14cc00f900f2
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326466
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: August Thornton <august@instructure.com>
QA-Review: Jeremy Stanley <jeremy@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
closes LF-644
flag = none
Test plan:
- Create/find a course with a few sections
- GET /api/v1/courses/:course_id/sections
- Expect to see all the sections
- Add ?search_term=<term> param
- Expect to see only sections whose name matches the term
Change-Id: I9598666bab193f277ab3c82236f471f58b7449ae
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326601
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: Jackson Howe <jackson.howe@instructure.com>
This is a starting point for selective module release tests.
There are already a lot of module selectors available. I'm
creating new ones where it makes sense and using the old ones
if they are already available in the interest of re-use and time.
Closes LF-703
Test Plan: passes jenkins
Change-Id: I239382f5af6d5493a19c9f74b991a21c2a2a2ec9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326669
QA-Review: Robin Kuss <rkuss@instructure.com>
Product-Review: Robin Kuss <rkuss@instructure.com>
Reviewed-by: Jake Oeding <jake.oeding@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
fixes LF-614
flag=none
Test plan
- It's probably best to have a file previewer
set up in your Canvas to test this.
Not sure how to do it without. There's a dev
preview server you can use. Let me know.
- In a course, upload a pdf or docx documet
- In a user's files, upload a pdf or docx document
- Somewhere in rich content in the course link
both documents
- Verify that with the default preview style
(Preview in overlay) you can see the document
preview for both the user file and the course
file
- Verify that as the course file, the download
link does not give you the file verifier
- You might also want to verify that the other
style of preview (Preview inline) is working
similarly
Change-Id: I0bb667f554af314d0ecc2d33190cd8ec277e17c1
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326102
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Mysti Lilla <mysti@instructure.com>
Reviewed-by: Jacob DeWar <jacob.dewar@instructure.com>
QA-Review: Jacob DeWar <jacob.dewar@instructure.com>
this commit adds the ability to save override statuses to the
process_bulk_update method used by the gradebook import process.
closes EVAL-3442
flag=custom_gradebook_statuses
test plan:
- setup a course with final grade overrides, a couple custom grade
statuses, and assign a final grade override to a student
- using a tool like Postman, make a PUT request to endpoint:
http://canvas.docker/api/v1/courses/<id>/update_final_grade_overrides
- You need to include the "Cookie" and "X-Csrf-Token" headers to the
request. You can find these from existing canvas api request in the
browser's network tab.
- add the following payload substituting the custom grade status and
student id with valid ids
{
"override_scores": [
{
"override_status_id": <id as string>,
"student_id": <id as string>
}
]
}
- verify in the gradebook grid that the override status color is set in
the grid for the student's override grade cell
- add the following payload to test changing the override status and
override score
{
"override_scores": [
{
"override_score": 100,
"override_status_id": <different id as string>,
"student_id": <id as string>
}
]
}
- verify in the gradebook grid that the override status color is set in
the grid for the student's override grade cell and the override score
is set to 100
Change-Id: Ifa8413f4e7df689e2b8ffd6771d5dba53b22d7c0
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326554
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Rohan Chugh <rohan.chugh@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
allows the front end importer to recognize that there are
custom statuses for overrides that have changed from the current
import, showing which rows/columns changed. this is part 1/2, as
the next commit will add the last part which is saving those changes
closes EVAL-3441
flag=custom_gradebook_statuses
test plan:
- CANNOT BE QA'd UNTIL g/326378 IS MERGED
- go to a course with grading periods and for the gradebook filter,
select "All Grading Periods"
- add a custom status to a final grade override using the tray
- export the entire gradebook
- open a CSV editor and change the custom status you added to
something else and add another status for another student
- MAKE SURE THAT BOTH STUDENTS WHO WERE CHANGED ARE USERS WITH
LOGINS (otherwise they are not gradable students and the importer
does not recognize them)
- use the importer to import the CSV you just edited
- it should recognize the changes and show the columns and rows
that changed
- now do the same but for a single grading period, using the option
to export the current gradebook view instead of entire gradebook
- it should recognize the changes and show the columns and rows
that changed
- note: "applying" the changes or saving them will not work until
the next commit is merged
Change-Id: I081b05d63ac0a75d08ae23acb79388fcbf58ca4b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326452
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Christopher Soto <christopher.soto@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
added save functionality to the custom statuses on the import
gradebook. this formats the body to be sent to the bulk update api
for final grade overrides, which is being implemented in a separate
ticket.
closes EVAL-3447
flag=custom_gradebook_statuses
test plan:
- wait for other dependent commits to be merged or cherry pick them
into this commit to fully test feature
- export a gradebook with a custom status on a final grade override
- change that custom status in the csv file to another valid
custom status
- import that gradebook csv
- the changes should be highlighted (from another commit) and
the custom status should be updated to the new value
- press save and view the network request that is sent to the update
final grades endpoint
- it should include the fields "override_status_id" and have the
matching id for the custom status that the override was changed to
- do the same for a course with grading periods and for a specific
grading period
- the request should have the grading period id in the body
- if the last commit of this feature has been merged, then it should
update the final grade override status in the traditional gradebook
Change-Id: I665bd75a25fb4b0c44c48db4a93fdf5354788d81
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326596
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Christopher Soto <christopher.soto@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
this commit adds the ability for the backend to recognize custom
statuses in the gradebook import and save them to the database for the
use of the front end.
closes EVAL-3432
flag=custom_gradebook_statuses
test plan:
- setup a course with custom statuses on a final grade override
- import the gradebook with a column called "Override Status"
- make a change to a grade as well
- View the network request for endpoint
http://canvas.docker/courses/<courseId>/gradebook_upload/data
- Verify that the request contains a key in the students array called
override_statuses
- The override statuses should contain the current (old) grade status,
the new grade status, the grading period id, and the student id
- Add another import with the same custom status name as the old one
- Verify that the override_statuses key does not exist.
- Add one more import with no "Override Status" column
- Verify that the override_statuses key does not exist.
Change-Id: I86c35f16aaff300e9b4d2e549c6d773d3238f8b0
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326378
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
Reviewed-by: Rohan Chugh <rohan.chugh@instructure.com>
QA-Review: Rohan Chugh <rohan.chugh@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
allow users to filter traditional gradebook by submissions that have
a custom status applied to them
closes EVAL-3434
flag=custom_gradebook_statuses
flag=enhanced_gradebook_filters
test plan:
- create custom statuses in the domain root account under the
"grading" tab after clicking site admin -> <domain root account
name>
- assign custom statuses to submissions in the gradebook
- verify all the custom statuses you created are listed in the filter
dropdown under the status section
- filter the gradebook by the custom statuses (apply filters ->
status -> <custom status name>)
- ensure that only the rows and columns that are necessary show up
in the gradebook (i.e. if an assignment has no submissions with
the custom status applied to them, the assignment column should not
show, and if a student has no submissions with the custom status
applied to them, the student row should not show)
- repeat for any other statuses you created
Change-Id: Ie6e5a1c7302f301fc217cb56d6568d85b5bc8348
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325877
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
our only use is for a hash that preserves insertion order, and Ruby's
Hash has done that for a _long_ time
Change-Id: Ia4e05b7022d75eea774be037f803d292b6ddacaa
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326470
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Build-Review: Cody Cutrer <cody@instructure.com>
refs VICE-3731
flag=student_grade_summary_upgrade
Test Plan:
- go to student grade summary page with
network inspector open
- inspect graphql request
- legacyNode > assignmentsConnection > nodes
- pick an assignment
> scoreStatistics field should show on assignment
Change-Id: If8156a8da2512325c2a3da6fb6a73003a90cccf7
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326241
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
QA-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
why:
* to avoid a weird situation where two LTI 1.3 developer keys
have the same domain/url and a tool for the wrong key is installed
in a closer context than the tool for the right key
closes INTEROP-8182
flag=lti_find_external_tool_prefer_original_client_id
test plan:
* follow instructions in the ticket:
* install two developer keys with the same domain
* install both tools from both keys in a course
* create some content using the first one, like an assignment
* then delete the first tool
* install a tool from the first key in the course's root account
* launch that content you created
* without this change it will launch using the second tool/client_id
* with this change and with the flag disabled it will do the same
* with this change and with the flag enabled it will correctly
launch using the first tool/client id
Change-Id: I31b8ad93b72eac7ba8847847cb76f15fc99ada07
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325870
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Tucker Mcknight <tmcknight@instructure.com>
QA-Review: Tucker Mcknight <tmcknight@instructure.com>
Product-Review: Xander Moffatt <xmoffatt@instructure.com>
refs AE-57
flag=none
test plan:
- local uploads work with Vault roles for S3
- local uploads work with static creds for S3
Change-Id: I0c367f21f214b2f7614385798524af7b202acce0
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326460
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Aaron Ogata <aogata@instructure.com>
QA-Review: Isaac Moore <isaac.moore@instructure.com>
Product-Review: Isaac Moore <isaac.moore@instructure.com>
anonymous grading cannot be disabled when editing an existing
anonymous assignment
closes EVAL-3449
flag=anonymous_marking
test plan:
- create an anonymous assignment
- edit the anonymous assignment and verify that the anonymous grading
checkbox can be toggled off
Change-Id: Ie2028614a2e2f8e135e4cafc2be5c8a5e511ccb6
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326551
QA-Review: Cameron Ray <cameron.ray@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
why:
* a bug in the assignment importer assumed that all migrations were BP
syncs and caused a NoMethodError on nil, which skipped the rest of
the importer
* this meant that the default line item for each assignment never got
updated with the correct data from the source assignment's line item,
and subsequent line items were never created
refs LF-467
closes INTEROP-8168
flag=none
test plan:
* reproducing the bug now that it's been patched involves changing
some code in app/models/importers/assignment_importer.rb:
* replace line 510 with `if true`
* remove the safe access modifier `&.` from
`migration.master_course_subscription&.content_tag_for` on line 554
* in a course with the 1.3 test tool installed, create an assignment
for the 1.3 test tool
* pass back some values for the resourceId, tag, scoreMaximum, and
label (or modify the Lti::LineItem in a rails console after creation)
* modify the assignment in a rails console to have "been updated" during
the period in which this bug was present in prod (7/5 - 7/10)
* `assignment.update!(updated_at: Date.parse("2023-07-06"))`
* create a new course and import the first course to it
* the created Lti::LineItem for the new assignment in the new course
should not have the same values for resource_id, tag, score_maximum,
and label
* in a rails console, run the data fixup and reload the affected
Lti::LineItem:
```
DataFixup::RepairLineItemsFromBrokenContentMigrations.run(1)
```
* alternately, run migrations if you haven't already
* the affected Lti::LineItem should now have the same values as its
source line item
Change-Id: I6d64a3cccf768fb54bda62180bf5dc1c06fa5223
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/322632
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Mysti Lilla <mysti@instructure.com>
QA-Review: Mysti Lilla <mysti@instructure.com>
Migration-Review: Aaron Ogata <aogata@instructure.com>
Product-Review: Luis Oliveira <luis.oliveira@instructure.com>
add complete/incomplete dropdown for pass fail assignments in the
main grading results section of the enhanced screen reader gradebook as
well as in the submission details modal. Also fix string interpolation
error when assignment has not been graded yet and it is a pass fail
assignment.
closes EVAL-3357
flag=individual_gradebook_enhancements
test plan:
- skipped selenium test in srgb_grading_spec.rb for this ticket passes
- have a course with a student, teacher, and a pass-fail assignment
- as the student, submit the assignment
- as the teacher, go to the enhanced screen reader gradebook and select
the student and assignment
- see that there is a dropdown with the 'Ungraded' option selected and
the score has a dash because it is has not been graded yet
- from the dropdown, click on the 'Complete' option and see that the
grade changes to the maximum possible value for the assignment
- click on the 'Ungraded' option again and see that the grade resets to
ungraded
- click on the 'Incomplete' option and see that the grade changes to 0
- click on the 'Excused' option and see that the grade changes to
excused
- follow the same steps but in the submission details modal
Change-Id: I6481e81fee3e9c881ee924f701528cde8c0e423d
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324780
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
Reviewed-by: Ravi Koll <ravi.koll@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
closes VICE-2465
flag=discussion_create
Test plan:
1. Open discussion create page in local environment
2. See that your sections + group categories
appear in their respective dropdowns (Post To
and Group Discussion)
Change-Id: Ida191d8146fd1760bff0532456ac6afd98cdcbbf
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325524
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Drake Harper <drake.harper@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
flag=none
closes LF-563
test plan:
- Create/Edit event using More Options view.
- Clean title and date inputs.
- Click Submit button.
> Verify that error boxes appear in both fields.
> Verify that no redirection happened.
- Input a valid title and date.
> Verify that you are able to save the changes.
Change-Id: Id975f518be40aa943ff41cbbfb88c4dbab513715
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326384
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: Juan Chavez <juan.chavez@instructure.com>
There are a couple places where a submission comment
can be created where the last_comment_at does not update.
I'm not sure where those places are.
We should sort by the last submission comment not
the submission created_at date in those cases.
flag = react_inbox
closes VICE-3687
Test Plan
1. Create submission comments
2. verify that they are sorted with newest comments at the top
Change-Id: I5fd52c9030be79ba2da012b64f38718aa39185cc
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326358
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>
we will only ever look at Attachment#word_count in SpeedGrader
but we are currently running a delayed job to count words on
_every_ Attachment. that's a lot of unnecessary work,
especially since things like course imports sometimes come
through with content type "text/plain" so we end up running
our word count regex over a common cartrige package 🤦
test plan:
- make sure jobs are running
- upload a file to course files
- it shouldn't set word_count on it
- submit a file to an assignment as a student
- it should get a word_count
flag=none
closes EVAL-3396
Change-Id: I304635aecc9e3aad1a86cbf0b09dba7633a1b131
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326319
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Jeremy Stanley <jeremy@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
Note: This also contains text changes on the Alignment
Summary Page. See ticket for more details and discussion.
closes OUT-5754
flag=none
Test Plan:
- Rspec, jest, and selenium tests are sufficient
- Jenkins Passes
Change-Id: If12ec35e84232671e77020fef6b7ce48a026e909
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325744
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Martin Yosifov <martin.yosifov@instructure.com>
QA-Review: Martin Yosifov <martin.yosifov@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
Temp Enrollment API index
GET /api/v1/users/:user_id/enrollments
Temporary Enrollment Recipients:
temporary_enrollment_recipients boolean
Returns only recipient temporary enrollments with an
active_or_pending_by_date enrollment state
Temporary Enrollment Providers:
temporary_enrollment_providers boolean
Returns only provider temporary enrollments with an
active_or_pending_by_date enrollment state
Note: enrollments are joined on courses that have a workflow state of
available, claimed, or created
closes FOO-3330
flag=temporary_enrollments
Test plan:
• Enable the temporary enrollments feature flag
• Exercise the list enrollments API endpoint:
• GET /api/v1/users/:user_id/enrollments
• /doc/api/enrollments.html#method.enrollments_api.index
• See associated JIRA (FOO-3330) for more details regarding request
specifications and assumptions
Change-Id: I36c4dabd595f77767575b0431e3890ca83e65d5e
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326351
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: August Thornton <august@instructure.com>
This fixes an issue where access tokens are duplicated for users with
multiple accounts (e.g. in a consortium).
Fixes FOO-3716
flag=none
Test Plan:
1. Create a centrally managed consortium
2. Add a user to multiple accounts in the consortium
3. Create a token for the user
4. Verify that the token is not repeated on the page for each consortium
Change-Id: I5f39596b34b71969294913cd3e09df04074dea76
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326308
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Michael Hulse <michael.hulse@instructure.com>
Reviewed-by: Charley Kline <ckline@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: Charley Kline <ckline@instructure.com>
QA-Review: Jason Perry <jason.perry@instructure.com>
closes VICE-3198
flag=none
test plan:
- Specs pass.
- Run this query on a root entry:
query {
legacyNode(_id: "5", type: DiscussionEntry) {
... on DiscussionEntry {
_id
allRootEntries {
_id
parentId
message
}
}
}
}
It should return all the root entries if it is
a root entry.
- Run the query on not a root entry, allRootEntries
should return null.
qa risk: low
Change-Id: I7f3e3c11f1a3084c7cee8612e8e7c348a53b3c37
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326305
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>
this commit adds a new custom status column to the sis export csv file
for final grades when the feature flag is ON & the course has final
grade overrides enabled.
closes EVAL-3431
flag=custom_gradebook_statuses
test plan:
- Enable final grade overrides for a course
- Go to the gradebook grid and apply the "All Grading Periods" filter
- Change the final grade override score for a student
- Assign a custom status label to the final grade override via the
final grade override tray
- go to http://canvas.docker/plugins/grade_export
- enable the plugin
- check the option for "Include final grade overrides"
- In the "Endpoint to publish to:" field, you will need to set up a HTTP
server to receive the POST request. You can use a tool like
http://ptsv3.com/ to retrieve the POST request.
- Once, the changes are applied navigate to
/courses/<courseId>/settings#tab-grade-publishing
- Click on the "(Re)Sync grades to SIS" button
- After a few seconds the POST request should be received by the HTTP
server and you should see a column for custom_grade_status, with the
custom status name in the csv exported row for the students with the
statuses applied to their final grade override.
Change-Id: I95ce80d6057b5345ea834bc03b8ecdf8fe5813da
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325936
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
fixes LF-618
flag=none
Test plan:
- Access a page you have no access to
- Check that the unauthorized message
appears with the usual H1 (only one
in the page).
- Access a page which you do have acces
to, with a media you don't.
- Check that the unauthorized message
inside the iframe uses an H3 and not
an H1.
Change-Id: I0fc9bebf786eaef9f93b9d3dc73b18d8211c315c
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326323
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Juan Chavez <juan.chavez@instructure.com>
Reviewed-by: Mysti Lilla <mysti@instructure.com>
QA-Review: Mysti Lilla <mysti@instructure.com>
Product-Review: Luis Oliveira <luis.oliveira@instructure.com>
occasionally when we try to move a consortium user back to
a home account she previously moved out of, unsubmitted
submissions block moving real ones and blow everything up
with a constraint violation. this PS hard-deletes deleted
or unsubmitted submissions that would block the move
also:
- fix the check for existing submissions in move_submissions
to look on the submission's (enrollment's) shard instead
of the user's
- postpone the SubmissionLifeCycleManager until we're done
moving submissions around
test plan:
- mostly specs (I was not able to reproduce the problem
organically and I suspect it's a race condition possibly
exacerbated by our queueing SubmissionLifecycleManager
jobs prematurely)
flag=none
fixes FOO-3735
Change-Id: If7b472fcefbdc6ede90e126c1e2f12718aa9591a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326101
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: August Thornton <august@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
closes LF-600
flag=calendar_series
test plan:
- Click custom frequency.
> If we selected a course calendar, verify that the
course end date is showed in the custom recurrence modal.
> Test this in calendar view and create/edit event page.
Change-Id: Iba70529ba9407a1bc5cb83f4fe95e423bcbe04b3
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325761
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: Juan Chavez <juan.chavez@instructure.com>
- Add a ENV.forage_cache_key to be used as a global key for
encrypting content.
- Add EncryptedForage util in the RCE package to encrypt content
in localforage using crypto-es
closes LF-216
flag = none
Test plan:
- Create a Wiki page.
- Go to the RCE and add some content
- Open the console and go to:
Application tab -> Local Storage -> canvas.docker
- Expect to see the rceautosaved key
- Confirm the content is encrypted
- Refresh the page
- Expect the content to be decrypted and displayed correctly in the
RCE
Change-Id: Ibcfe7c1a56f125ba92a8fd3a2038c26dd7a4e39e
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/322913
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Jonathan Guardado <jonathan.guardado@instructure.com>
Reviewed-by: Jake Oeding <jake.oeding@instructure.com>
QA-Review: Jake Oeding <jake.oeding@instructure.com>
why:
* to avoid inconsistencies in the way that tools are found
for content tags and assignments
refs INTEROP-8182
flag=none
[pin-commit-instructure_misc_plugin=0e59ae0b57c3d10345560797d9ff838a734ecbdf]
ignoring FSC since it's trying to run both the line items and scores
controller specs, and those are pretty slow. it was still timing out
even after 60 min. +1ed by devx
[ignore-stage-results=Flakey Spec Catcher]
test plan:
* launching a tool from any/all of these places still works:
* an assignment
* a module item
* an assignment (with A2 on as a student)
* sessionless launch for a module item
* specs
Change-Id: I6eccdd56d3ed97a9089fe979a0ba72ffa5d0de55
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325732
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Tucker Mcknight <tmcknight@instructure.com>
QA-Review: Tucker Mcknight <tmcknight@instructure.com>
Product-Review: Xander Moffatt <xmoffatt@instructure.com>
closes LF-579
flag=granular_permissions_manage_course_content
Test Plan:
-Enable course content granular permissions flag
-Remove manage_course_content_add permission from TA
-Remove manage_course_content_delete permission from TA
-Have a course with a TA
-As TA, upload new media file
-Insert and save media in an RCE (ex: Pages)
-Delete the attachment associated with media object
*Do this in console, or possibly just through Files UI
-As TA, attempt to add and delete captions
*Verify this works as normal
Change-Id: I7ee0b02dfcb64060c416f8025783ddde696875e9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326063
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Mysti Lilla <mysti@instructure.com>
QA-Review: Mysti Lilla <mysti@instructure.com>
Product-Review: Jacob DeWar <jacob.dewar@instructure.com>
closes EVAL-3355
flag=enhanced_individual_gradebook
test plan:
- create a moderated assignment
- Go to the enhanced individual gradebook and select that assignment and
and student with the dropdowns
- verify that the grade input and excuse checkbox is disabled
- verify that default grade button and submission details grade input is
disabled
- verify that all grade inputs are enabled when the assignment is posted
Change-Id: I8cd0429c0be08f70bed0c5544ee79e9050b2d0ad
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325316
Reviewed-by: Samuel Lee <samuel.lee@instructure.com>
Reviewed-by: Cameron Ray <cameron.ray@instructure.com>
QA-Review: Samuel Lee <samuel.lee@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
fixes LF-597
flag=media_links_use_attachment_id
test plan:
- With the media_links_use_attachment_id flag insert a video in the RCE
and save the content
- Verify the URL for the video is /media_attachments_iframe/:attachment_id
and that the video loads correctly
- Turn off the flag and refresh the page
- Verify the URL for the video is /media_attachments_iframe/:attachment_id
- Verify there was a redirect to /media_objects_iframe/:media_object_id
- Verify the video still loads
- Alternatively, you can copy the iframe URL and paste it into a new tab and
see the redirect
Change-Id: Ia5c1f0d9854e71adaf95665831889c8f88e889d0
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325854
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Mysti Lilla <mysti@instructure.com>
QA-Review: Mysti Lilla <mysti@instructure.com>
Product-Review: Eric Saupe <eric.saupe@instructure.com>
If an SMS region is impaired, 2fa for that region will be sent to
the user's primary email in addition to their selected OTP
communication channel and a notification will be shown in the UI.
Change-Id: I9cfc25bb71f72b91790865e568916af65cfe4291
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326218
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Isaac Moore <isaac.moore@instructure.com>
QA-Review: Jacob Burroughs <jburroughs@instructure.com>
Product-Review: Jacob Burroughs <jburroughs@instructure.com>
remove unposted anonymous assignments from the select assignment
dropdown in the content selection of the enhanced screen reader
gradebook
closes EVAL-3354
flag=individual_gradebook_enhancements
flag=anonymous_marking
test plan:
- skipped selenium test in srgb_anonymous_moderated_spec.rb for this
ticket passes
- have a course with a student, teacher, and an anonymous assignment
- as the student, submit the assignment
- as the teacher, go to the enhanced screen reader gradebook
- do not select the student yet but click on the select an assignment
dropdown
- see that all the assignments are there regardless of anonymous status
- select the anonymous assignment and scroll to the Assignment
Information section.
- see that the Message students who button is not present
- now select the student and click on the select an assignment dropdown
- see that the anonymous assignment is not listed in the dropdown
- post the grade for the anonymous assignment
- go back to the enhanced screen reader gradebook and see that the
assignment is now listed in the dropdown
Change-Id: Ief61a3fe2682e11b36a4226a8246b25f1bad1799
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325317
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
fixes FOO-3766
refs FOO-3337
flag=temporary_enrollments
test plan:
• create a temporary enrollment via api (FF flag needs to be on)
• or use rails console to create a temporary enrollment
• verify that calling temporary_enrollment? on the enrollment
returns true, and one that does not have an associated
temporary_enrollment_source_user_id returns false
Change-Id: I358b5c5098b8cc34b8e193b38332da93e39b33f9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/326079
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Michael Hulse <michael.hulse@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: August Thornton <august@instructure.com>
flag=enhanced_individual_gradebook
closes EVAL-3363
Test Plan:
- have a course with a few assignments and students
- go to the enhanced individual gradebook
- using tab, navigate to the next/previous buttons
- verify that if you select either the previous or next until you
hit the beginning or end of the list, the focus switches to the
opposite button
- ensure this works for both assignment and student next/previous
buttons
Change-Id: I311ce6826a4ff6c68693c4d57584836207225a94
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325640
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Cameron Ray <cameron.ray@instructure.com>
QA-Review: Derek Williams <derek.williams@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
flag=react_discussions_post
fixes VICE-3623
fixes VICE-3703
test plan:
- in your course, turn redesign ON
- in you course, turn the setting
"Let students attach files to discussions" to ON
- as a student, capture the network request as you
reply with an attachment via the UI
- now as a teacher, turn the
"Let students attach files to discussions" setting to OFF
- as a student visit /graphiql
- for the mutation pane, use
```
mutation MyMutation {
__typename
createDiscussionEntry(input: {discussionTopicId: "5", message: "the setting has been turned off", fileId: "20"}) {
discussionEntry {
_id
attachment {
_id
}
}
errors {
attribute
message
}
}
}
```
- run it
- verify that you get
```
{
"data": {
"__typename": "Mutation",
"createDiscussionEntry": {
"discussionEntry": null,
"errors": [
{
"attribute": "message",
"message": "Insufficient attach permissions"
}
]
}
}
}
```
as a response
Change-Id: Ib390bba1be00a8d8d7f5fcc5f77f9f08351b4442
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325832
Reviewed-by: Drake Harper <drake.harper@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
QA-Review: Chawn Neal <chawn.neal@instructure.com>
Product-Review: Chawn Neal <chawn.neal@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Some updates for "this and all following" will creat a new series,
splitting the original into two. The 2 new series need to have
their rrules updated to reflect their new state.
Note: not all of this works in the agenda view. This will be
addressed in Lf-629
closes LF-601 LF-557
flag=calendar_series
test plan:
- create a series of events and a non-recurring event
- select an event in the middle and update its start time
- update this event and all following
> expect the selected event and all following to be updated
- click on each of the updated events
> expect the natural language description of the series schedule
should reflect the new series (in particular, the number
if events should reflect what what updated)
- click on each of the events that were not updated
> expect the description of the series schedule to reflect
the events that didn't get updated
- repeat but delete this and all following from the middle
of the series
> expect the events remaining to describe the schedule of the
remaining events
- edit and delete the non-recurring event
> expect it to work
Change-Id: I23cb74318c4f756d99d55b000e3ac9a681b340b9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325746
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: Ed Schiebel <eschiebel@instructure.com>
closes EVAL-3244
flag=custom_gradebook_statuses
Test Plan:
1. Enable "Custom Status Labels for Submissions and Final Grades".
2. In a course that has Final Grade Override enabled, go to Gradebook and
give a few final grade overrides, some with custom statuses applied,
and others without custom statuses.
3. Export the Gradebook. Verify there is a "Custom Status" column that
shows the correct status for each override (which should be blank for
students without final grade overrides, and blank for students with
final grade overrides but without custom statuses associated with
those overrides).
4. Make a grade change in the CSV and then import the CSV. Verify the
import works.
5. Disable "Custom Status Labels for Submissions and Final Grades".
6. Export the Gradebook. Verify there is no longer a "Custom Status"
column.
7. Make a grade change in the CSV and then import the CSV. Verify the
import works.
Change-Id: I7d65b561ecd9ea342d9ea283eb562c5ea3e4d2ed
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325632
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
QA-Review: Rohan Chugh <rohan.chugh@instructure.com>
Product-Review: Sam Garza <sam.garza@instructure.com>
closes LF-521
flag=none
test plan:
- create a bp course with page1 and page2
- in page2, add a link to page1
- create a second course with a page called page1
- associate and sync the two courses
- page2 in the associated course should correctly link
to the original page1 from the bp course
Change-Id: I985357abc67ea13f7a71d34245caadfcd15832a1
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324322
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Jacob DeWar <jacob.dewar@instructure.com>
Reviewed-by: Mysti Lilla <mysti@instructure.com>
Build-Review: James Butters <jbutters@instructure.com>
Product-Review: Sarah Gerard <sarah.gerard@instructure.com>
This will allow for querying various states of temporary enrollments
using the named scopes on the Enrollment model.
Temporary enrollments will be created by default in an "active"
state for users that are already registered, otherwise will be created
in an "invited" state for "pre-registered" users.
Allow for temporary_enrollment_source_user_id to be included in the
api enrollment json response if the flag is enabled.
closes FOO-3678
closes FOO-3679
flag=temporary_enrollments
Test plan:
• Enable the temporary enrollments feature flag
• Exercise the enrollments API endpoint:
• /doc/api/enrollments.html#method.enrollments_api.create
• See associated JIRA (FOO-3681) for more details regarding request
specifications and assumptions
• In Rails console query the data via the new named scopes
• These scopes will be helpful in various actions within the
new api controller for temporary enrollments
Change-Id: If96aa141b7b55cb8ccf6bb8ff48e66e6edd317bd
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325763
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: August Thornton <august@instructure.com>
While group assignment submission uploads were not counted towards
the quota, the quota was still being checked prior to upload. This
change skips the quota check for group assignment submission uploads.
fixes EVAL-3385
flag=none
test plan:
- create a group assignment
- as a student, attempt to submit a file to the assignment that is
larger than the quota
- verify that the file is uploaded successfully
Change-Id: Ie3e281c06cdd2ba33df75e0a82364557beccbeb3
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325715
QA-Review: Cameron Ray <cameron.ray@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
closes OUT-4891
flag=none
Test plan:
- Create outcome with description
and non-empty friendly description.
- Open dev tools and go to the networks tab
- Edit the friendly description so it
is now empty.
- Find the graphql event near the bottom where the
operation names equals "SetOutcomeFriendlyDescription".
- Verify the description field in both the payload column
and response column are both "".
Change-Id: Ifdd1ada8d4131e9d09bbb08abafd9d15140d1692
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325772
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>
When a user has 2FA enabled _and_ a checked "remember me" when logging
in, it's possible to skip the OTP check by failing the first attempt
which subsequently uses the "remember me" cookie to log in on a second
page load.
This commit fixes the issue by ensuring that the "remember me" cookie
(pseudonym_credentials) is cleared when a user fails the OTP check by
navigation to another page besides the OTP page.
Fixes FOO-3696
flag=none
Test Plan:
1. Enable 2FA for a user
2. Log in as that user, checking "remember me"
3. After being redirected to the OTP page, navigate to another page,
e.g., /courses
4. You should be redirected to the login page again.
5. Navigate to another page again. Before this change you would be
logged in without having to enter the OTP code. After this change
you should be redirected to the logging page again with a clean
session.
Change-Id: I7a0f10b5fe37734a35d4396af542ae52e625b6f1
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325716
QA-Review: Jason Perry <jason.perry@instructure.com>
Product-Review: Jason Perry <jason.perry@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: August Thornton <august@instructure.com>
Reviewed-by: Isaac Moore <isaac.moore@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
if a diffed csv import changes the column definitions, our
intended behavior is to skip diffing for that type. this was
broken in FOO-3574 but only because the variable name changed :(
for the warning text and there was no test coverage of that code path
test plan:
- column header changes should bypass diffing and run a full
import of the type(s) that were changed
- the entire import should not fail
flag=none
fixes FOO-3749
Change-Id: I6ed9a27cf63d6ff1176e549002f650b19d472386
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325798
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jason Perry <jason.perry@instructure.com>
QA-Review: Jeremy Stanley <jeremy@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
The UpdateCalendarEVentdialog was doing the fetch to update
the selected set of events from the series. This bypassed
Backbone's model.save, and was missing some event parameters.
Let's just delegate the update to the model and have the modal
simply responsible for getting the user's selecteion.
I also improved error handling in the calendar. I'd prefer
this change to have been in its own commit, but the two
updates were too intertwined for that to be practical.
Some jest tests were replaced getByRole with use getByTestId
to solve tests running afoul of the time limit.
closes LF-602 LF-603
flag=calendar_series
test plan:
- create an event series, include a start time but no end time
- click on the event in the calendar, then More Options in the modal
- change the description and click Update Event
- select All Events or All following
> expect the event time to remain the same, and it does not become
a multi-day event
- in the devtools console, set
ENV.environment='production'
this will stop the defaut $.ajaxJSON error alert from popping up
- update an event using more options, and do something bad
(or edit calendar_events_api_controller.rb#update to return
an error)
> expect an error message
- edit an event from the pop-up modal
> expect the Submit button to have a spinner and be
non-responsive while the update is in-flight
> expect the More Options button to be
non-responsive while the update is in-flight
> expect a tool tip telling you it's working
- next time, click the 'x' to close the modal
> expect all the events being updated to be dimmed
and non-responsive to clicks
Change-Id: I487caf17862ea56fe3f6d79b5ad059e235a7bfdd
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325401
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: Ed Schiebel <eschiebel@instructure.com>
google-api-client is deprecated and unmaintained; need to use
the service specific gem. this gets us on the latest APIs, and
importantly unblocks us on updating other common dependencies
(most notably a step towards updating faraday, but also retriable)
Change-Id: I646da7dc68b8c5f6068142608c19771dafbef127
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325392
QA-Review: Cody Cutrer <cody@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Build-Review: Cody Cutrer <cody@instructure.com>
it was disabled a year ago due to a broken API. the Google Drive LTI
is the way to do this now. this commit removes now unused related code
from the view, controllers, and the google_drive library
Change-Id: Ieccef46036c847f27e98dc8297da10d04b6721f9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325750
Tested-by: Cody Cutrer <cody@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
closes EVAL-3386
flag=gradebook_show_first_last_names
Test Plan:
- create a sub-account of the root account
- set the siteadmin gradebook_show_first_last_names flag to true
- enable the allow_gradebook_show_first_last_names account setting in
the root account
- ensure the sub account has the setting enabled as well
- disable the allow_gradebook_show_first_last_names account setting in
the root account
- ensure the sub account has the setting disabled as well
- ensure the sub account can enable the setting to differ from the root
account and that it is saved
- ensure the setting is now available in the a course gradebook within
the sub account
Change-Id: I9be1d9f4bcf0c1aacae541725328c076c98fdfd5
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325102
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
QA-Review: Samuel Lee <samuel.lee@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
flag=enhanced_individual_gradebook
flag=proxy_file_uploads
closes EVAL-3362
Test Plan:
- turn OFF the proxy_file_uploads FF
- create an assignment with a file upload submission type as an
option and one without
- go to the enhanced individual gradebook and select the file upload
assignment and a student
- ensure the 'submit for student' button is NOT displayed in the
grading section
- turn ON the proxy_file_uploads FF
- go to the enhanced individual gradebook and select the file upload
assignment and a student
- ensure the 'submit for student' button is displayed in the grading
section
- click that button and submit a file with the modal
- ensure the modal is closed after the submission is made
- ensure that the proxy submitter is identified in the grading
section and the submission time is updated
- select the assignment without file uploads as an option
- ensure the 'submit for student' button is NOT displayed in the
grading section
Change-Id: Idc245964bb73593ff654128a4886d20cd6d3b635
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325492
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Cameron Ray <cameron.ray@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
closes VICE-3722
flag=restrict_quantitative_data
Test Plan
1. Enter a grade for a student in RQD course
2. As student open the assignment
3. On the side of the assignment, there is submission info
4. Verify that the submission info is accurately restricted
Change-Id: Ifc9b1999790a6b2b1eb73b83a01ac5057472f230
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325821
QA-Review: Drake Harper <drake.harper@instructure.com>
Reviewed-by: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
currently, if a student had not submitted for an assignment and a
teacher/student leaves a comment, the comments will post under Attempt
0. Once a student submits, the next comments will post under Attempt 1,
2, 3, etc.
fixes EVAL-2997
flag=none
test plan:
- create a new assignment
- as a teacher (not siteadmin user) or as a student, leave some comments
- verify when opening the submission comments tray in the Student
Grades page that the comments are posted under Attempt 1.
- as the student, submit the assignment
- leave more comments. You should now see the pre-attempt comments and
the post-attempt comments under Attempt 1.
- as the student, submit the assignment again.
- leave another comment.
- verify that the comment is posted under Attempt 2.
Change-Id: Id4459f41a30e7638408cdca640034728ed5e8ddc
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325476
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
closes EVAL-3393
closes EVAL-3394
closes EVAL-3395
flag=none
[fsc-timeout=100]
test plan:
- all tests pass
- create an assignment with an ab_guid
- using the assignments api, verify that the ab_guid is returned in the
show response when `?include[]=ab_guid is passed`
- using the assignments api, verify that the ab_guid is returned in the
index response when `?include[]=ab_guid is passed`
- using the assignments api, verify that you are able to update the
ab_guid
Change-Id: Ic4e8d78a6b4dfb112168ec68bd7f6e117a8030f5
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324884
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
QA-Review: Cameron Ray <cameron.ray@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>
Migration-Review: Jacob Burroughs <jburroughs@instructure.com>
When updating gems we want to ensure a full
suite of specs is run.
flag = none
Change-Id: Ic2d12e2cc7f464021120837cac1ed78609417109
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325788
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: James Butters <jbutters@instructure.com>
it was never used
Change-Id: I8bc00ba58d3ff911c857c63a4d13d1595c157a4f
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325537
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Build-Review: Cody Cutrer <cody@instructure.com>
closes EVAL-3418
flag=none
Fixes two bugs dealing with grading periods and gradebook exports:
1. A bug where exports for the "Entire Gradebook" in a course with grading
periods would always exclude the totals columns (the totals columns
should be conditionally shown/hidden based on the "Display Totals for
All Grading Periods" option).
2. A bug where an error would be thrown (in development) when exporting
the "Entire Gradebook" in a course with grading periods that has the
final grade override enabled and has at least one hidden assignment.
Test Plan:
1. In a course that uses Grading Periods, has the Final Grade Override
enabled, has at least one manually posted assignment that has not
yet posted to students, and has the "Display Totals for All Grading
Periods" option deselected on the Grading Period Set, go to the
Gradebook.
2. Filter by a Grading Period.
3. Export the entire gradebook.
4. Notice you don't get an error. The CSV should not have columns for the
totals or final grade override.
5. Enable the "Display Totals for All Grading Periods" option on the
Grading Period Set.
6. Go back to Gradebook, filter by a Grading Period, and export the
entire gradebook. Notice you don't get an error. The CSV should have
columns for the totals and the final grade override.
Change-Id: I86f5856b89c03aeeaa52c07bb9ae0de274604096
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325239
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
QA-Review: Christopher Soto <christopher.soto@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
fixes QUIZ-11500
flag=none
test plan:
- when acting as a user WITHOUT the
"Assignments and Quizzes - edit" permission:
- from the modules page, links to NQ should navigate to
the launch itself (/assignments/:id) rather than the
assignment edit page (/assignments/:id/edit) (which
they cannot view)
- this should match the behavior of the links from the
Quizzes and Assignments pages
- when acting as a user WITH the
"Assignments and Quizzes - edit" permission:
- from the modules page, links to NQ should navigate to
the assignment edit page (/assignments/:id/edit)
- this should match the behavior of the links from the
Quizzes and Assignments pages
Change-Id: I4ec9f2cb6693ebade6f5dbb4fc4a0644700a576c
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325598
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Griffin Zody <griffin.zody@instructure.com>
Reviewed-by: Stephen Kacsmark <skacsmark@instructure.com>
QA-Review: Griffin Zody <griffin.zody@instructure.com>
Product-Review: Stephen Kacsmark <skacsmark@instructure.com>
fixes VICE-3634
flag=none
Test Plan:
1) spec passes.
- you can copy setup data in console for easy
testing also.
2) New AC is that we return correct context code.
- In particular it now filters deactivated admins.
Notes:
The ticket AC has changed.
Change-Id: I3e211f817f5e9d32f46ed0e6894d5f5e118bdfd2
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325244
Reviewed-by: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
flag=react_discussions_post
refs VICE-3623
this is fix # 2 of 3
fix # 1 is merged
fix # 3 will be a future commit
that will be applied to
graphql
test plan:
- turn on Announcements/Discussions Redesign
- in course settings click more options
and allow students to attach replies to
discussions
- save
- create and publish and announcement in the course
- as a student, reply to the announcement with an attachment
- as a teacher turn OFF allowing students to add attachments to
discussion replies
- as a student, verify that when you edit your reply,
all you can do is delete your attachment, but you cannot add
- reply to the topic and reply to any reply in any view
- verify you cannot attach
- verify teachers can still attach
Change-Id: Ie0d1c86d0111faff49db8a9d8bb9ef5dc3cf481c
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325624
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: Jason Gillett <jason.gillett@instructure.com>
flag=restrict_quantitative_data
closes VICE-3719
Test Plan
1. Speed grader should function normally even when RQD is on.
Change-Id: I25016852fdde4fe1b6a9b89a84a2f3b24f56bb25
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325535
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: Caleb Guanzon <cguanzon@instructure.com>
flag=split_screen_view
closes VICE-3624
Test Plan
1. Go to splitscreen discussion
2. Set to mobile view
3. Reply to an entry
4. Click on the RCE
5. the RCE should not close
Change-Id: If9fa2e3e608944837eda4ece7ae0a7b049f9f6a7
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325649
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>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
and default it on for account roles that enable :view_analytics
and :view_all_grades
test plan:
*before running the included datafix migration or
enabling the "Admin Analytics - view permission" feature flag*
- check out the analytics plugin to gems/plugins/analytics
(we just need it for the :view_analytics permission;
no need to get it working or anything)
- set up some custom roles that enable/disable various
permutations of :view_analytics and :view_all_grades
*run migrations*
- the "Admin Analytics - view and export" permission still
does not appear because the feature flag is off
*turn on the feature flag*
- the permission appears
- custom roles that granted :view_analytics and :view_all_grades
enable the permission
- custom roles that disabled one or both disable the permission
flag=admin_analytics_view_permission
closes FOO-3701
Change-Id: Ib006293eb3b8e5dea7aeb38a4a5f5307eec3537f
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325131
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: August Thornton <august@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
Migration-Review: Jacob Burroughs <jburroughs@instructure.com>
closes EVAL-3308
flag=none
Sets the unique-by-root-account sis_source_id to nil when creating a
duplicate assignment in order to prevent the unique index from throwing
an error and to allow the duplicate to be saved.
In addition, adds a model-level uniqueness validation for sis_source_id
so that these types of validation errors are caught at the application
level, not at the DB.
Test Plan:
1. Create an assignment.
2. Through API give a sis_assignment_id to the assignment. Using
https://canvas.instructure.com
/doc/api/assignments.html#method.assignments_api.update
assignment[sis_assignment_id]=value
3. Navigate back to the assignments index page and attempt to duplicate
the assignment. Verify the duplication completes and no errors are
shown. The duplicate assignment should have a null
sis_source_id/sis_assignment_id.
Change-Id: Ic3ede54b1d915c6df64c4e4ca40b72b59e53eebd
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325022
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Ethan Knapp <eknapp@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>
flag=none
refs VICE-3623
note:
- discussions redesign will be handled in a future commit
- this only handles creating replies via
the UI
test plan:
- TURN OFF Announcements/Discussions Redesign
- follow the steps performed in this video:
https://instructure.slack.com/archives/GPXHJGASH/p1692295177682399?thread_ts=1692293711.447409&cid=GPXHJGASH
Change-Id: Ib5a409c6bab21ded5506dc0f27583d76c9b45ece
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325391
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Drake Harper <drake.harper@instructure.com>
QA-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
why:
* LTI tools expect to be able to send window.postMessages to their
direct parent window, which isn't possible in the active RCE that wraps
the editor box in an iframe
* forward all messages sent to the RCE iframe to Canvas and back
* this means some message types won't work in this context since they
rely on finding the tool iframe
* there is also some strange behavior in Firefox (possibly a bug) where
when sending a postMessage from the RCE frame to Canvas, the event's
`source` is actually the Canvas window object, not the RCE frame,
so account for that by explicitly looking for the RCE frame
* not sure how else to handle this bug
* this does not yet allow for sending messages to the OIDC Auth endpoint
via a sibling forwarder iframe, but that's a separate issue
closes INTEROP-8194
flag=none
test plan:
* install the lti 1.3 test tool locally
* edit an assignment or a page to pull up an active RCE window
* add a content item from the test tool and include
`{"width":600,"height":600}` in the "iframe" box in the tool before
sending back the content item
* this should render an iframe inside the editor that launches the tool
* open the dev tools console
* scroll to the bottom of the tool's frame to the postMessage section
* deselect the "send to storage target" checkbox
* send this message: `{"subject":"toggleCourseNavigationMenu"}`
* the left course nav should collapse
* the console should log "message received" from the test tool
* this should work in all browsers (although rendering an LTI tool in
local canvas in Chrome doesn't work)
Change-Id: Ia219e8bd9d46ea3a061811458588af6dd8be8603
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325031
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Steve Mcgee <steve.mcgee@instructure.com>
Reviewed-by: Ed Schiebel <eschiebel@instructure.com>
QA-Review: Steve Mcgee <steve.mcgee@instructure.com>
Product-Review: Alexis Nast <alexis.nast@instructure.com>
closes EVAL-3004
flag=enhanced_gradebook_filters
Test Plan:
1. Create a course that has multiple sections, with no students enrolled in
one of the sections (Section A).
2. Go to the Gradebook. Notice all students are shown. Filter by Section A
and notice no students are shown.
3. Go to /courses/:id/settings#tab-sections and delete any section other
than Section A.
4. Go back to the Gradebook. Notice no students are shown and Section A is
still selected as the section filter.
5. Go to /courses/:id/settings#tab-sections and delete Section A.
6. Go back to the Gradebook. Notice all students are shown and Section A is
not an option in the gradebook filters.
Change-Id: Idf76b7d998d177f895acb7ae30b495dbbaf1a608
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324988
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Cameron Ray <cameron.ray@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
QA-Review: Rohan Chugh <rohan.chugh@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>
fixes LF-587
flag=none
Test plan
- In a course upload a media file
- Add captions to the media file
- Export the media file
- Open the export package and get
rid of the media file itself
from the export, then zip
it back up
- Import the file into a course
- Verify it doesn't crash the import
Change-Id: I3505dcf733b77cd960223b286cfdea00f59ade7f
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325422
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob DeWar <jacob.dewar@instructure.com>
QA-Review: Jacob DeWar <jacob.dewar@instructure.com>
Product-Review: Mysti Lilla <mysti@instructure.com>
closes LF-596
flag = none
Test Plan:
- Turn on permanent_page_links in your local siteadmin
- Turn on Asset Map version 2 in your local siteadmin
- Tail your canvas live events.
- Create a course with a wikipage
- Copy the course
- Observe that the content_migration_completed live event
is created and has a resource_map_url
- Download the resource map. It should contain data showing
the ids/urls for the source/destination wikipages.
Change-Id: I29dbac8943201f724544d565dacd04b2b7dc9fd2
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325285
Reviewed-by: Mysti Lilla <mysti@instructure.com>
QA-Review: Mysti Lilla <mysti@instructure.com>
Product-Review: James Logan <james.logan@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
closes EVAL-3330
flag=none
Allows teachers to view deactivated students for differentiated assignments
in SpeedGrader, so long as the "view inactive" option is selected
in Gradebook. Previously, if an assignment was differentiated, students
would only be shown in SpeedGrader if the students themselves had the
ability to view the assignment. This meant deactivated students wouldn't be
shown — even if teachers had the option selected in Gradebook to view
inactive students — because deactivated students can't view the assignment.
Test Plan:
1. Create an assignment and assign it to specific students
2. De-activate the enrollment of the students assigned.
3. Navigate to the Gradebook and enable the display of inactive
enrollments.
4. Observe that the inactive student can be graded there.
5. Navigate back to the assignment in question.
6. Open SpeedGrader to view the submissions.
7. Verify you can see the deactivated students in SpeedGrader, and you
don't get an error message like “Sorry, there are either no active
students in the course or none are able to be graded by you”.
Change-Id: I793da6daa652abf41162fa8a9b11f437be05127f
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324998
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
QA-Review: Samuel Lee <samuel.lee@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
add late penalty and final grade labels to the grading results section
of the enhanced screen reader gradebook
closes EVAL-3358
flag=individual_gradebook_enhancements
test plan:
- skipped selenium test in srgb_grading_spec.rb for this ticket passes
- have a course with a late assignment, with a certain late penalty,
such as 10 percent a day
- go to a student in the course and submit the assignment
- as a teacher, go to the enhanced screen reader gradebook and select
the student and the assignment
- see that there is a late penalty and final grade label as well as
0 for the late penalty and '-' for the final grade
- grade the student and see that there is a late penalty value based
on the late penalty set
- the final grade value should reflect the entered grade with the late
penalty deduction
- confirm that the grade in the grade input box is the user entered
grade
Change-Id: I8c108ee1c76ea5236651a2633efa5dcc41013b9b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324598
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
flag=none
closes EVAL-2546
refs INTEROP-8128
test plan
- create an external tools assignment with a2
enabled with multiple attempts
- as a student submit the assignment multiple times
- go to the lti assignment and you should be able to see the
tool
Change-Id: I4f9c1f0d138f372f88fbaae03d7cd55727c3fe00
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/320840
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Samuel Lee <samuel.lee@instructure.com>
QA-Review: Derek Williams <derek.williams@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
This buils on top of manageable_accounts and includes
student and teacher enrollments for cases where those
result in more accounts where on can create courses.
refs LF-33
closes LF-532
flag=none
test plan:
- Hit /api/v1/accounts_to_create_courses_in
- Check the results is properly paginated
- Check that the resultset has all accounts
you'd get from manageable_accounts
- Check that in addition to those you have
accounts where student/teacehrs can create
courses in (if you have enrollments there).
Change-Id: Id0924f56f6ea8ca0f987d63dac538c3e7386337b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/315698
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: Luis Oliveira <luis.oliveira@instructure.com>
closes LF-502
flag=course_paces
qa risk: low
test plan:
-smoke test the course pacing page by
updating some paces and navigating away, coming
back to the page, etc.
-normal user workflow should be the same as before
Change-Id: Ie1f814b81d85677945a863a5c3824b07fc0f8d85
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325120
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: Jake Oeding <jake.oeding@instructure.com>
closes LF-564
flag=none
test plan:
- with your user in various timezones
- create an event in the calendar
- consider making the start/end time near midnight (try them both)
- edit the event and choose more options
> expect the date and time fields in the edit page to be correct
- edit the event, changed the date, choose more options
> expect the new date to be in the edit page
- load 0/users/:user_id/calendar_events/new directly, not from
the calendar
> expect the date to be today (I'm not sure what would happen here
if wallclock time was near midnight and your user is in a
different timezone than your browser)
> always expect the date to be formatted like Aug 14, 2023
Change-Id: If33da20f985ed0feca0bcb73b2f5a35fed5eefd9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325112
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: Ed Schiebel <eschiebel@instructure.com>
flag=enhanced_individual_gradebook
closes EVAL-3356
test plan:
- go to enhanced srgb
- verify that the names are last name, first
- verify that the names are sorted by last name
Change-Id: If9fd0a233d97cc2c5ee3a8de6fb849fde3cf7b03
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324446
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Samuel Lee <samuel.lee@instructure.com>
QA-Review: Samuel Lee <samuel.lee@instructure.com>
Product-Review: Jody Sailor
currently the new enhanced individual gradebook is able to be accessed
with the FF off if the user knows to navigate to the gradebook url with
the query param ?version=individual_enhanced. This commit adds a check
on the backend during the routing that will now direct the user to the
traditional gradebook grid if the FF is off.
closes EVAL-3419
flag=individual_gradebook_enhancements
test plan:
- navigate to /courses/<course_id>/gradebook?version=individual_enhanced
and verify that you are directed to traditional gradebook
Change-Id: Ief0c905ffd919a0ea87a3c7643a07fff3ab9ac67
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325291
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Aaron Shafovaloff <ashafovaloff@instructure.com>
QA-Review: Rohan Chugh <rohan.chugh@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
this option would only show if you checked then unchecked the option
'remove points from rubric'
fixes EVAL-3231
flag=none
test plan:
- create an external tool assignment
- from the assignment show page, click the '+ Rubric' button
- notice 'use this rubric for assignment grading' shows up as an option
- save the rubric with the option checked
- ensure the resulting dialog has actual values (not NaN)
Change-Id: I7eda43c2b267b41fd341efe49c40d63fc243d76b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/320909
Reviewed-by: Samuel Lee <samuel.lee@instructure.com>
Reviewed-by: Cameron Ray <cameron.ray@instructure.com>
QA-Review: Samuel Lee <samuel.lee@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
todo list was returning all peer reviews with no restrictions to review
user enrollment status. this change now returns only active or pending
peer reviews based on the user's enrollment status. the logic for
determining active or pending enrollment status was taken from the
existing active_or_pending method in the enrollment model.
fixes EVAL-3277
flag=non
test plan:
- you will probably need to refresh your local redis cache
- set up a peer review assignment with an end date
- assign a student 2 reviews to complete
- as each student submit the assignment
- as the student needing to review, go to the course home page and view
the todo list. you should have the peer review assignment with 2 peer
reviews to complete.
- as a teacher, make one of the reviewee students inactive
- as the student needing to review, go to the course home page and view
the todo list. you should now have the peer review assignment with 1
peer review to complete.
- click on the peer review url. it should navigate you to the peer
review page for that submission.
Change-Id: I638441e4dfa993b0652cae6d1fe92948505dcb9d
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325118
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Derek Williams <derek.williams@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
If you change the calendar of an event in a series, it is not
correctly updated on the selected events. This fixes that.
closes LF-571
flag=calendar_series
test plan:
- create an event series
- pick one and edit it
- change the calendar (and any other stuff)
- Submit and choose All Events
> expect the calendar to be updated in all the events of the series
- repeat but update only this event
- repeat and update this and following
- make other edits and expect it to work as expected
Change-Id: Iae3013c4621db3fed2197b3b23fd4d64f34b0ee1
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325265
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: Ed Schiebel <eschiebel@instructure.com>
When testing the temporary_enrollments feature flag, I noticed
that the feature check was not using the root account. This
caused the feature check to fail when the feature was enabled
on the root account but not on the current (sub) account. This
fixes the feature check to use the root account.
refs FOO-3071
flag=none
test plan:
1. create sub-account
2. create two users on account (a.k.a. user1/user2)
3. from root account: settings > features > turn on temp enrollment
4. enable permissions: User - Temporary Enrollments
5. create course add user1 as teacher
6. add module/assignment and publish everything
7. cURL this:
curl --location 'http://<canvas>/api/v1/courses/1/enrollments' \
--header 'Authorization: Bearer <token>' \
--form 'enrollment[start_at]="2023-08-14T00:00:00Z"' \
--form 'enrollment[end_at]="2024-08-14T00:00:00Z"' \
--form 'enrollment[user_id]="2"' \
--form 'enrollment[type]="TeacherEnrollment"' \
--form 'enrollment[enrollment_state]="active"' \
--form 'enrollment[course_section_id]="1"' \
--form 'enrollment[temporary_enrollment_source_user_id]="1"'
Where temporary_enrollment_source_user_id would be the already
enrolled user id, and user_id would the recipient user id of the
temporary enrollment
8. expect enrollments.temporary_enrollment_source_user_id for user_id
to equal the already enrolled user id
9. also, expect newly-included specs pass
Change-Id: Ib800822e10e4b3819a305edf10f81f82bcb499bd
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325210
Reviewed-by: August Thornton <august@instructure.com>
Reviewed-by: Michael Hulse <michael.hulse@instructure.com>
QA-Review: Michael Hulse <michael.hulse@instructure.com>
Product-Review: Michael Hulse <michael.hulse@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
add custom status pills to the student grades page (grade summary
page) if there is a custom status for a final grade override
closes EVAL-3403
flag=custom_gradebook_statuses
test plan:
- add a custom status to a final grade override through the
traditional gradebooks for a course with grading periods for
a specific grading period and also for the "all grading periods"
filter
- go to that student's grade summary page (student grades page) and
verify that a custom status pill exists in the final grade row
for the grading period that the custom status was added for, and
does not exist for a grading period that it wasn't added for
Change-Id: I46648be4fb6f225663eb3dc5b25ee02495fdba22
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325109
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Jody Sailor
looks for progresses for course_pace_publish that
are in a queued state and have a delayed_job_id where
the DelayedJob for that id does not exist and set them to failed
Fixes LF-506
flag=none
test plan:
- if you don't have some already, make some course pacings, thus
making progresses for publishing the pacings
- in a rails console, find some completed progresses for
course_pace_publish:
Progress.where(tag: "course_pace_publish", workflow_state: "completed")
- set some of those progresses to "queued"
Progress.find(id).update_attribute(:workflow_state, "queued")
- run the migration
- the progresses that were set to queued should now have a
workflow_state of "failed"
Change-Id: I599b224cad9bf84b12b3e39c75c988a7c0289aaf
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324928
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>
Migration-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Sarah Gerard <sarah.gerard@instructure.com>
modifies the REST API endpoint that the student view groups page uses
to fetch groups to add a filter query param. this param filters
groups by group name or the names of the users of the group.
closes EVAL-3254
refs EVAL-3253
flag=none
test plan:
- go to a canvas course that has a large number of groups (e.g. 100+)
- go to the people tab of the course
- click on student view at the top right
- go to the groups section on the people page of the student view
- search for a group name or a user's name that is in the group
- ensure that only one request is made to find those filtered groups
- ensure that the groups that are returned are filtered by the search
term
- enter another search term
- ensure that only one request is made to find those filtered groups
- ensure that the groups that are returned are filtered by the search
term and NOT the previous search term
Change-Id: Iaa62024aaef7f1db50d5cf7029bc590cf31c396b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324188
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: Caleb Guanzon <cguanzon@instructure.com>
flag=enhanced_individual_gradebook
closes EVAL-3373
test plan:
- go to a course with a student and assignment with mulitple submission
types and one with a single submission type
- go to the enhanced individual gradebook
- click on the student's name
- click on the assignment name
- verify that the submission type is in readable format with
comma's for multiple and only one submission type
Change-Id: Id720e73510c4a7960221419cad62ea69abaf416b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324445
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Cameron Ray <cameron.ray@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
QA-Review: Christopher Soto <christopher.soto@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
plugin builds are not getting accurate predictions,
override some of crystalball's methods to fit the way
Canvas-LMS handles plugins.
fixes: DE-1596
flag = none
[force-crystalball]
Change-Id: Ib347737f9e7f65660830ce0ffaaa6b3bc0a27f86
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324830
QA-Review: James Butters <jbutters@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Andrea Cirulli <andrea.cirulli@instructure.com>
Product-Review: James Butters <jbutters@instructure.com>
fix no submission found when an user has both a teacher and observer
role.
fixes MBL-16850
flag=none
test plan:
- have a course with a teacher, student, and an assignment
- add an observer role to the teacher and link the student
- as a student, submit the assignment
- as a teacher, grade the assignment
- perform a GET request for the following route:
api/v1/courses/<Course #>/assignment_groups?
include%5B%5D=assignments
&include%5B%5D=discussion_topic
&include%5B%5D=submission
&include%5B%5D=all_dates
&include%5B%5D=overrides
&include%5B%5D=observed_users
&override_assignment_dates=true
- confirm that there is a submission object in the submission array
for that assignment
Change-Id: Iae1573220d97e4a67efa0639141df885067d2654
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/322437
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Rohan Chugh <rohan.chugh@instructure.com>
Product-Review: Jody Sailor
closes EVAL-3392
flag=anonymous_marking
test plan:
- update an assignment to emit a live event
- ensure `anonymous_grading` field is present in the live event
Change-Id: I8cecb06064cbd0b9dcd142e85eb636edbe893161
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324779
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Cameron Ray <cameron.ray@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>
allow custom statuses to be set and viewed in speedgrader
closes EVAL-3347
closes EVAL-3400
closes EVAL-3401
flag=custom_gradebook_statuses
test plan:
- create a custom status in the gradebook from the domain root
account
- go to a course that has two students and an assignment that has
1 or 0 submissions for one of the two students, and 2+ submissions
for the other student
- go to the speedgrader for that assignment
- click the edit button on the status and ensure that the custom
statuses are available options
- choose a custom status and refresh the page
- if the student has 1 or 0 submissions, the status should appear as
a pill in the speedgrader, otherwise the name should be appended
to the dropdown option for that submission (the dropdown only
appears if there are multiple submissions)
- ensure that the submission has the same status in the traditional
gradebook
Change-Id: I2dc2d51d6f7dacd95ccfb8dc4b6aba84cc32bc34
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324643
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
QA-Review: Christopher Soto <christopher.soto@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
no new cops, but a few fixes to existing cops (notably
Style/RedundantReturn)
Change-Id: I64a744c3d81e25329c1612e4622ca96783b0801d
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324942
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Build-Review: Cody Cutrer <cody@instructure.com>
fixes VICE-3663
flag=restrict_quantitative_data
Test PLan:
- Specs pass.
- We show assignmentgroup if it has an assignment within
the grading period, regardless if it has no submissions.
Change-Id: I13c9817477d73c63c494c398a72f0b3a98dad241
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324751
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: Caleb Guanzon <cguanzon@instructure.com>
also disables the box if the assignment is a new quiz and already
anonymous
closes EVAL-3390
flag=anonymous_marking
test plan:
- create/edit a new quiz
- notice the new text under the anonymous grading checkbox
- edit a new quiz where anonymous grading is already enabled
- notice the checkbox is disabled and cannot be turned off
Change-Id: Ibc0e872c89ad6e932da55e93c93026e4dc492f11
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324649
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
Product-Review: Jody Sailor
closes VICE-3670
flag=react_discussions_post
test plan:
- Specs pass.
- Follow the repro steps on the ticket and
get the error to reproduce before pulling
down this.
- Pull down this, turn off Isolated View, turn
on Split Screen and verify that now you can see
the thread correctly on inline and split-view.
- Cursory testing of discussions subentries.
qa risk: low
Change-Id: I4f698096774d9069961f0896bc88a01d35b96525
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324913
QA-Review: Chawn Neal <chawn.neal@instructure.com>
Reviewed-by: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
why
When returning from a Deep Linking launch, if the tool does not provide
a url, the tool's url will be used instead. Previously, Canvas would not
choose a url and leave the field blank.
fixes INTEROP-8166
flag=lti_overwrite_user_url_input_select_content_dialog
test plan:
Add the 1.3 test tool, and tweak it to _not_ return a url, then launch
it from the "Add item to module" screen and and make sure the tool's url
is used (it should not have a `deep_link` parameter in it).
Change-Id: Ibad1691453dce5e6d4e5112d00bb445f226f6ccf
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324707
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@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 LF-573
flag=none
test plan:
- edit an assignment
- change the due date using the popup calendar
> expect it to work
- change the due date by typing into the input box
> expec it to work too
Change-Id: I472457cee21326508c617186b1d9d7913ace88c0
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324984
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: Ed Schiebel <eschiebel@instructure.com>
fixes LF-158
flag=deprecate_faculty_journal
test plan:
- enable the faculty journal on an account
- Account.find(:id).update!(enable_user_notes: true)
- create a course with a student
- with the deprecate_faculty_journal feature flag **disabled**
- navigate to the inbox (/conversations)
- create a message draft with the student as the recipient
- there should be a checkbox to forward the conversation to the
faculty journal
- with the deprecate_faculty_journal feature flag **enabled**
- repeat the above
- the checkbox should now be gone
qa risk: low
Change-Id: I71278dedc639a8e5cd1647f18326bdc2eedb688b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324879
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: Davis Hyer <dhyer@instructure.com>
Fixes support week bug ticket where GraphQL query was:
1. returning nil for enrollment term
2. returning the wrong enrollment term
This bug occurred when the sis_source_id for the enrollment term
was non-unique across multiple accounts on a single-shard.
refs FOO-3707
flag=none
test plan:
1. create two accounts on a single shard
2. create a term in each account with the same sis_source_id
3. using Postman, cURL, or https://<user>.instructure.com/graphiql
query for the term in each account
4. expect results to be the correct term for account
tips:
- use bearer token to make requests if using cURL or Postman
- use the following query to get the sis_source_id for the term:
query term_by_sis_id {
term(sisId: "12345") {
_id
name
sisId
}
}
Files of note:
- `config/routes.rb:28` entry route for GraphQL
- `app/controllers/graphql_controller.rb` entry point controller
- `app/graphql/graphql_node_loader.rb:184` loads various GraphQL
objects and checks permissions based on the object type and context
- `app/graphql/loaders/sisid_loader.rb` batch loader that loads
records by sis_source_id from an ActiveRecord scope
- `app/graphql/types/term_type.rb` defines a GraphQL type called
“Term”, type fields, methods and permission checks
Change-Id: Ie373c53b6031284b566f88e1782452b94e45c0fe
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324703
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: August Thornton <august@instructure.com>
QA-Review: Michael Hulse <michael.hulse@instructure.com>
Product-Review: Michael Hulse <michael.hulse@instructure.com>
closes LF-496
closes LF-486
flag=calendar_series
test plan 1:
- Navigate to calendar page.
- Create a new event changing the frequency
to anything except "not repeat" or "custom".
- Click submit.
- Select the any occurrence of the series EXCEPT first.
- Click Edit.
- (Optional) Select another frequency.
- Click Submit.
> Verify that the modal only shows "this event" and
"this and following" options.
test plan 2:
- Navigate to calendar page.
- Create a new event changing the frequency
to anything except "not repeat" or "custom".
- Click submit.
- Select the first occurrence of the series.
- Click Edit.
- (Optional) Select another frequency.
- Click Submit.
> Verify that the modal only shows "all",
"this event" and "this and following" options.
test plan 3:
- Navigate to calendar page.
- Create a new event changing the frequency
to "not repeat".
- Click submit.
- Select the first occurrence of the series.
- Click Edit.
- (Optional) Select another frequency.
- Click Submit.
> Verify that the options modal is not showed
since we have only on event.
> Verify that when editing this events again
the modal will be showed this time.
On all test plans:
> Verify that after confirming the update,
the calendar is properly updated.
> Verify that after confirming the update and
refreshing the page the changes are
persisted.
> Verify all these scenarios selecting
"More Options" (Page), on submitting we
should see the modal and act the same way.
Note: Check that when creating/editing an
event with custom frequency are properly
created, loaded and edited.
Change-Id: Ib3c44bae7f0f3cefa5ac91a7f61cb2452035c325
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323082
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Ed Schiebel <eschiebel@instructure.com>
QA-Review: Ed Schiebel <eschiebel@instructure.com>
Product-Review: Juan Chavez <juan.chavez@instructure.com>
closes EVAL-3409
flag=custom_gradebook_statuses
Test Plan:
1. Using the available graphQL setOverrideScore and setOverrideStatus
mutations, verify:
- You CAN remove an override score for a score that currently has a
custom status. Doing so should remove the custom status.
- You CAN remove an override score for a score that does not have a
custom status.
- You CANNOT add a custom status for a score that does not have an
override score.
- You CAN add a custom status for a score that has an override score.
Change-Id: I2b4a3367a4f623e397a457bf0099fa2cada1a404
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324817
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
QA-Review: Christopher Soto <christopher.soto@instructure.com>
Product-Review: Sam Garza <sam.garza@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
refs LF-393
flag=none
Test plan
- Have a media file in a course
with some captions
- Export an IMSCC
- Edit the IMSCC so it doesn't have
the "kind" attribute
- Import the file and make sure
it doesn't crash the import
Change-Id: I5ea0613d5d46649ffec178d88f409b4a35539681
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324440
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: Mysti Lilla <mysti@instructure.com>
closes LF-483
flag=none
Test plan
- Upload an image and a media
file to a course
- Add captions to the media file
- Link both files in the RCE
somewhere
- Copy the course to a new
course and verify you don't
get an error and that the
captions copy properly
Change-Id: If6ef6123ff4fc57b5a5e93d03375e000e5f57882
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324531
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: Mysti Lilla <mysti@instructure.com>
Why:
- We had a case where a tool with domain abc.com and url xyz.abc.com/123
created an assignment with URL xyz.abc.com/456. The URL doesn't match
exactly, and matches_domain? returned false because the tool domain
abc.com doesn't match exactly the launch URL's domain (abc.xyz.com)
- matches_domain? doesn't need to be that strict of a check since it is
only used when we have a preferred_tool_id. We can use the more
relaxed constraints used by matches_host?
- a related problem is we have multiple incompatible methods of
determining a URL from a assignment/content tag; hopefully I can clean
some of that up soon.
refs INTEROP-8152
Test plan:
- install two tools (preferably LTI 1.3, but LTI 1.1 should work too)
with the same domain, one in the account context (which must work) and
one in a course context (this tool doesn't have to work). For 1.3,
probably the easiest is to make a new LTI 1.3 dev key by copying and
pasting the JSON from the old one and modifying the main
target_link_uri, because in order to see which tool is actually being
launched, it's easiest to have a different dev key. If using the LTI
1.3 test tool, only one of the installs will work because the client
ID needs to match in the tool -- in this case, make sure the one in
the account context works.
- it's easiest if you have more than one valid launch path for your
tool. For the LTI 1.3 test tool, you can just modify the routes.rb
file and add another path for the launch endpoint (e.g. "launch2")
- in the course where both tools are available, create an assignment or
module item by choosing the valid tool (which is installed in the
account context). if possible, create the assignment with a
URL on the same domain as the target_link_uri but a different path
(e.g. "launch2") which doesn't match any tool's URL. If not possible,
you can change the URL in the assigment.external_tool_tag (or the
equivalent module ContentTag) in a rails console (probably best to
also change the `assignment.lti_resources_links.first.url` if you
created an assignment)
- change the 'domain' on both tools (you can do it from a rails console,
no need to change the developer key) to remove the first segment of
the domain. For instance, if the domain is
xyz.abc.com, make it just 'abc.com'. If it doesn't have a domain, add
one that is such a "superdomain" of the domain of the launch URL.
- check that before this commit, trying to launch the assignment/module
item will try to launch the wrong tool/developer key For LTI 1.3, the
important thing to look at is the `aud` value in the launch JWT. (It
may even fail to launch since the developer key won't match up). (I'm
not sure how to see the chosen tool with LTI 1.1 -- you might need a
custom variable expansion or something)
- Check that after this commit, the assignment/module item launches with
the correct tool.
Change-Id: I2a2ee3c73e52cbc897702549966924820c1e9877
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323353
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Xander Moffatt <xmoffatt@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
Product-Review: Alexis Nast <alexis.nast@instructure.com>
this commit adds a new tray for grade overrides that allows the user to
save a custom status to a grade override. it also updates the cell color
for a grade override if it has a status.
closes EVAL-3383
closes EVAL-3398
flag=grading_scheme_updates
flag=custom_gradebook_statuses
test plan:
- have a course with custom grade statuses & multiple grading periods
- go to the gradebook & click on a grade override cell
- you should now see a new icon button. click on the button and notice
that the new grade override tray opens
- you should be able to navigate through students in the tray
- students with *no* final grade override score should have the radio
inputs disabled
- for a student that does have a final grade override score, you should
be able to select a status and save it
- once saved, close the tray and notice that the cell color has changed
to the color of the status you selected
- add a filter for a grading period. notice that the cell color from the
previous step is not applied
- change the grade override status for a student in the filtered grading
period. notice that the cell color is applied
- switch between different grading periods and notice that the cell
colors change depending on the status you selected for that grading
period
- set a status to NONE for a student. notice that the cell color is
removed
Change-Id: I3254bd36e174c43d0ed0e6a1fe849ba35f50d1e3
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324604
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Rohan Chugh <rohan.chugh@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
fix the gradebook import where if the first student has no
value in the Notes column, the gradebook importer will not detect
a change even if the other students' notes have been changed. Also fix
the import results display where if blank spaces are added to a
student's notes and there is an actual text change to another
student's notes, the results display will highlight the addition
of blank spaces in red
fixes EVAL-3122
flag=none
test plan:
- have a course with more than one student
- go to the grades page and turn on the Notes column by going to
the settings cog and the View Options tab
- add notes to some of the students except the first student
- export the gradebook to a csv file
- modify any of the students' notes in the csv file except for the
first student
- import the same csv file and see that the changes are displayed
- go back to the csv file and add some blank spaces to the notes
of the first student, but do not modify anyone elses notes
- import the csv and see that the message says there no changes to
the gradebook
- go back to the csv and add some more blank spaces to the first
student's notes and also modify a different student's notes
- import the csv and see that only the student with actual text
changes are highlighted in red, but the student with blank spaces
added is not highlighted
Change-Id: I0a0968937c4d96b3e33b314476e2785c5bfd4b9a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323204
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Sam Garza <sam.garza@instructure.com>
closes LF-482
flag = none
test plan
- In a course, create a module
- Upload pdf files to that module
- Edit the module and add requirements to file ‘view the item’
- Act as a student and access file link through the module, expect
the file gets registered as ‘viewed’ on modules list
Change-Id: I957a1058cd83cea9c82f27e9d51d653be929c730
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324624
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Jonathan Guardado <jonathan.guardado@instructure.com>
Reviewed-by: Sarah Gerard <sarah.gerard@instructure.com>
QA-Review: Sarah Gerard <sarah.gerard@instructure.com>
flag=react_discussions_post
fixes VICE-3625
test plan:
- have a teacher reply to their own discussion
(so that they get the author and teacher role pills)
- verify that the role pills are now shown
under the name, and that they are pipe delimited
(in desktop, and mobile)
- verify this commit satisfies the ticket
Change-Id: I1a135b2ae11167b80321998bc08c8692d22bee37
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324682
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Drake Harper <drake.harper@instructure.com>
QA-Review: Alexander Youngblood <alexander.youngblood@instructure.com>
Product-Review: Sam Garza <sam.garza@instructure.com>
fixes LF-525
flag=course_paces_for_students
test plan:
- Have a course with course pacing and module items and a student
- Go to the course pacing page for students
- While the page is loaded in another tab or the console remove the
student enrollment
- Publish a pace for the student enrollment that was deleted
- Verify no error report was generated and no assignment overrides were
made for the student
- Refresh the course pacing page and verify the enrollment is not there
and there is no error
Change-Id: Id65cb9feeaed59cf7edc083ba77fd27819cfa541
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324311
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Mysti Lilla <mysti@instructure.com>
Reviewed-by: Luis Oliveira <luis.oliveira@instructure.com>
QA-Review: Jacob DeWar <jacob.dewar@instructure.com>
Product-Review: Eric Saupe <eric.saupe@instructure.com>
why:
* the standard services secret is different in each region,
meaning that using it for postMessage forwarding
for LTI Platform Storage would not work when the
school was in a different region than sso.canvaslms.com
closes INTEROP-8191
flag=lti_platform_storage
test plan:
* cp config/vault_contents.yml.example config/vault_contents.yml
* dc restart to pick up config file changes
* in a rails console, confirm `Lti::PlatformStorage.signing_secret`
has a value
Change-Id: I7b361dc615316883f86f00de721fa19b7a12e774
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324663
Reviewed-by: Ryan Hawkins <ryan.hawkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Tucker Mcknight <tmcknight@instructure.com>
Product-Review: Xander Moffatt <xmoffatt@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
This allows us to create a new temporary enrollment / association for a
known user that is modeled after an existing enrollment. We track the
temporary_enrollment_source_user_id field to know which user currently
has a temporary enrollment and what user the enrollment is based on.
This isn't a novel concept, as it just uses existing logic to create
a new base type enrollment given an existing role. The idea is that we
can update enrollment state with the start_at and end_at dates to
start and conclude the temporary enrollment.
closes FOO-3681
flag=temporary_enrollments
Test plan:
• Enable the temporary enrollments feature flag
• Exercise the enrollments API endpoint:
• /doc/api/enrollments.html#method.enrollments_api.create
• See associated JIRA for more details regarding request
specifications and assumptions
Change-Id: Idc34947b43e95ab10f5b00fe8d47bfc7f5233eea
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324211
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Maya Tyner <maya.tyner@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: August Thornton <august@instructure.com>
Instead of calling ensure_media_object directly on each attachment we
can run that logic in the data fixup to add additional processing params
like strand and max_concurrent in order to not overload any systems.
If the max_concurrent is too slow once deployed it will be easy to update
since the jobs will all be part of the same n_strand and can be queried
and updated.
fixes LF-393
flag=none
test plan:
- Turn off your job worker
- Create a MediaObject with the media_id of "maybe" and soft-delete it
- Upload a video to an RCE
- Run migrations with the data fixup, or run the data fixup manually
- Verify a job is created with the strand and max_concurrent correctly
set
Change-Id: Idf1a8417f5d25f49fa855c4dc61ce36fbbc037b9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/321708
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Eric Saupe <eric.saupe@instructure.com>
Migration-Review: Isaac Moore <isaac.moore@instructure.com>
Reviewed-by: Mysti Lilla <mysti@instructure.com>
QA-Review: Mysti Lilla <mysti@instructure.com>
Most places we check for siteadmin permissions there is not customer data
behind the access check. However, the two places changed here do guard
reading customer data, and need to ensure the user has access to the account.
Change-Id: I381d163ea4473931f725f4d2d18b8496e475a450
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324181
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: Jacob Burroughs <jburroughs@instructure.com>
Product-Review: Jacob Burroughs <jburroughs@instructure.com>
flag: none
closes INTEROP-8185
Test plan
- set a tool's domain to "foo.com)" (with that closing parenthesis)
- before this commit, launching the tool should cause an unhandled
exception in the matches_tool_domain? method
- after this commit, launching the tool should work, or fail some other
way
Change-Id: I3baafc7649be7150009a9d539a71111bcee64723
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324583
Reviewed-by: Tucker Mcknight <tmcknight@instructure.com>
Reviewed-by: Xander Moffatt <xmoffatt@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
Product-Review: Evan Battaglia <ebattaglia@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
fixes AE-325
fixes CANVAS-KEVY
flag=none
test plan:
- create a user in Shard 1
- create a Shard 2
- associate the Shard 1 user with an account in Shard 2
- update Shard 2's dashboard settings such that `update_user_dashboards`
is called
- confirm that with this change applied, only canonical users are updated
[skip-crystalball]
Change-Id: I0a9757d39ef67af3fcb274dc183c68bb8ad5ad36
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324385
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: Isaac Moore <isaac.moore@instructure.com>
Product-Review: Isaac Moore <isaac.moore@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
closes EVAL-3275
flag=custom_gradebook_statuses
Test Plan:
- Verify that a user with manage_grades permission is able to set or
clear the custom_grade_status_id on a score that has an override_score
set on it, using the graphQL 'setOverrideStatus' mutation, e.g.:
mutation {
__typename
setOverrideStatus(
input: {enrollmentId: "3", customGradeStatusId: "4"}
) {
grades {
customGradeStatusId
}
}
}
Change-Id: If12b44f5657e4d8c8f84f4ca6270f015a523e4e7
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324495
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Reviewed-by: Rohan Chugh <rohan.chugh@instructure.com>
QA-Review: Christopher Soto <christopher.soto@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>
flag=none
fixes VICE-3586
explanation:
this issue has more to do with publishing
an existing unpublished discussion than with
duplicating discussions
the reason why the original discussion did not show
in calendar and dashboard list view is because
its workflow_state is post_delayed (even when you save
and publish on creation)
the reason why the duplicated discussion begins to show
in student calendar and dashboard is because
when you publish an unpublished discussion
(in this case, the duplicated discussion),
its workflow state is set to active without
even checking for the delayed_post_at attribute of
the discussion
this commit makes it so that when you publish
an unpublished discussion, we set the worklow_state
to post_delayed instead of active if delayed_post_at is
in the future.
test plan:
- create a discussion topic
- in the create form, set the todo date
to 2 days from now
- set the available from to 1 day from now
- set the until date to 3 days from now
- save (do not publish)
- in the discussions index, publish
- as a student, visit the list view of
your dashboard
- verify you do not see the discussion
- visit the calendar
- wait for the loading spinner on the top right
to go away
- verify you do not see the discussion
- now as a teacher, go back to discussions index
and duplicate the discussion
- publish the duplicated discussion
- as a student, check your dashboard list view
and calendar again
- verify you do not see the duplicated discussion
- bundle exec rails c
- DiscussionTopic.last should be your duplicated topic
- DiscussionTopic.last.delayed_post_at = 2.minutes.from_now
- DiscussionTopic.last.save!
- DiscussionTopic.last.reload
- as a student wait for 2 minutes to pass
- then revisit the calendar and the dashboard list view
and verify you now see the duplicated discussion
Change-Id: I786a495f6e03aa427c0958f5f6a43bb1c5eea1d3
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324436
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: Chawn Neal <chawn.neal@instructure.com>
Allows accounts to have a default grading scheme attached.
Works for nested sub_accounts.
flag=default_account_grading_scheme
closes EVAL-3367
[pin-commit-multiple_root_accounts=34042244337234b7993bc85351a443fc103f69b8]
Test Plan:
- Tests Pass
- In the Rails console
- Find a grading scheme
- Find a sub-account
- `sub_account.grading_scheme = grading_scheme`
- `sub_account.save`
- Should be no errors
- Find a course in that sub account
- `course.grading_scheme = nil`
- `course.save`
- `course.default_grading_scheme`
- Should return sub accounts default grading scheme
- `sub_account.grading_scheme = nil`
- `sub_account.save`
- `account.grading_scheme = grading_scheme`
- Verify that `sub_account.default_grading_scheme` and
`course.default_grading_scheme` both return the root accounts
grading scheme
Change-Id: I5b4a374e3e43f06ab06148f9c0f9f35a343bc606
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323569
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Cameron Ray <cameron.ray@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>
refs VICE-3675
flag=none
test plan:
- Specs pass.
- Send a message to your user and have
multiple replies.
- Run this in graphiql:
query GetConversationsQuery {
legacyNode(_id: "1", type: User) {
... on User {
conversationsConnection(scope: "inbox", first: 20) {
nodes {
conversation {
conversationMessagesCount
}
}
}
}
}
}
- It should return the appropriate number of replies,
same number that are shown in the UI if you
select the conversation.
- Try deleting a message as a user and the number
should go down.
qa risk: low
Change-Id: I78f7ad62a61630fbb104b8d7cdb884a767da12c6
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324511
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Drake Harper <drake.harper@instructure.com>
Product-Review: Drake Harper <drake.harper@instructure.com>
QA-Review: Aaron Suggs <aaron.suggs@instructure.com>
closes OUT-4513
flag=none
This patchset will disable the expand
button when the description is only a
single line for html-text and text type
descriptions. Html descriptions with
extra formatting will always be expandable
however.
This patchset accounts for when
the description is resized by the window
or by the center divider or even when the
description is changed because of the
addition of the TruncateText component and
its onUpdate property. A custom handler is
passed to the onUpdate parameter, and that handler
checks whether the description is truncated or not.
So if the description is truncated, the expand button
is disabled. Else, the expand button can be clicked
on.
Test Plan
- Create a new outcome and edit the description from
the html editor. Make sure this description is only
a few words so the description is not truncated by
ellipses (...).
- The description is classified as 'html-text'.
- Verify the description is NOT expandable if
truncated.
- Shrink the size of the window until the description
is truncated and then verify that the description
is expandable.
- Create a new outcome and edit the description from
the html editor. Make this description multiple lines
at least.
- The description is classified as 'html-text'.
- Verify the description is expandable.
- Create a new outcome using an imported standard that
has a single line description.
- The description is classified as 'text'.
- Verify the description is NOT expandable
if truncated.
- Shrink the size of the window until the
description is truncated and then verify
the description is expandable.
- Create a new outcome using an imported standard that
has a longer description.
- The description is classified as 'text'.
- Verify the description is expandable.
- Create a new outcome and edit the description from
the html editor. Make sure the description has extra
html formatting features such as a table.
- The description is classified as 'html'.
- Verify that the description is expandable.
- Note that extra html formatting is not rendered
until the description is expanded.
Change-Id: Ia2612ec66943d8e75b47977c7fc4d328300ede82
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323033
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jason Anderson <jason.anderson@instructure.com>
QA-Review: Jason Anderson <jason.anderson@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
refs LF-393
flag=none
Test plan
- Create an active MediaObject with
media_id "maybe" (Rails console is
probably easiest)
- Have a course where you link
media files in an RCE somewhere
- Export the course
- Import into a new course
- Make sure your files don't error
and check that they have media
entry ids that aren't "maybe"
Change-Id: I2f49692134489b6a1c20e853e37e569e11bbbaa6
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324326
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: Mysti Lilla <mysti@instructure.com>
closes EVAL-3271
flag=custom_gradebook_statuses
Test Plan:
1. Set up a missing policy in a course that awards 50% for missing
assignments.
2. Create a text entry assignment worth 10 points, due in 5 minutes.
Assign it to at least 2 students.
3. Before those 5 minutes have passed, go to the Gradebook and mark
Student1 with a custom status.
4. After the 5 minutes have passed (you might have to wait up to 10
minutes for the periodic MissingPolicyApplicator job to run), notice
that Student2 (who has not submitted, and has not been marked with a
custom status) has been graded with a 5 and is marked missing. Notice
that Student1 (who has not submitted, and has been marked with a
custom status) has _not_ been graded and continues to have the custom
status applied (not the "Missing" status).
5. Submit to the assignment as Student1 and as Student2.
6. Go back to the Gradebook as the teacher and notice that Student1's
status still shows the custom status. Notice that Student2's status
shows as late.
Change-Id: I0ac12edbe05578a6e15a942422640fe8d3721820
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324364
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Reviewed-by: Rohan Chugh <rohan.chugh@instructure.com>
QA-Review: Rohan Chugh <rohan.chugh@instructure.com>
Product-Review: Sam Garza <sam.garza@instructure.com>
adds support for rendering custom grade status pills on the student
grades page
closes EVAL-3242
flag=grading_scheme_updates
flag=custom_gradebook_statuses
test plan:
- add a custom grade status to a student's submission for an
assignment
- go to that student's grades page
- verify that the submission with the custom status has a pill in the
status column of the grades page that has the status's name and is
gray
- do the same but for an assignment that is considered dropped
and verify that the assignment has both the dropped indicator
(slightly transparent/grayed out) and also the custom status
- to add rules for dropping grades, go to the assignments tab, click
the 3 dots for an assignment GROUP (not an individual assignment),
click edit, and set "Lowest Scores" to something greater than 0
Change-Id: I50f71396ebcea493b4707cacf0cbde1748816b90
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324156
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Christopher Soto <christopher.soto@instructure.com>
Product-Review: Sam Garza <sam.garza@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Closes CNVS-59190
flag=none
Test Plan
- Migrations run without error
- Validate you can now set the service_user
association on a developer key record via
the rails console
- Validate the service_user association is nullable
Change-Id: I2e9489b2001d0bbff48ad365f160ba94693e64c0
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323426
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
Migration-Review: Isaac Moore <isaac.moore@instructure.com>
QA-Review: Weston Dransfield <wdransfield@instructure.com>
Product-Review: Weston Dransfield <wdransfield@instructure.com>
Reviewed-by: Xander Moffatt <xmoffatt@instructure.com>
closes LF-454
flag=media_links_use_attachment_id
Test plan
- Create a media attachment with a couple
of captions
- Copy the media's course
- Open the copied media in the file preview
- Check that you see a tooltip by the side of
your caption explaining it's inherited
- Open the copie media in the RCE
- Check that you see a tooltip by the side of
your captions explaining it's inherited
- Check that in neither (RCE or previw) can
you delete the inherited caption
Change-Id: If7051900f3730bcf62bded94da8424a55c838387
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323270
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob DeWar <jacob.dewar@instructure.com>
QA-Review: Jacob DeWar <jacob.dewar@instructure.com>
Product-Review: Luis Oliveira <luis.oliveira@instructure.com>
webdrivers can no longer provide chromedriver past version 114,
switch to relying on selenium-webdriver now that it can
download the correct version of chromedriver.
flage = none
fixes: DE-1658
Test Plan:
-Jenkins passes
-local machine is on the latest version chrome
-download ps
-bundle install
-bundle exec rspec selenium/of/your/choice
-selenium tests run
-chromedriver version matches chrome version
-modify config/selenium.yml
-add line browser_version: "114.0.5735.90"
-bundle exec rspec same/selenium/test/as/before
-selenium tests run
-chromedriver version matches 114.0.5735.90
Change-Id: Id35ea32db443d57aa33bf4e1cd50738fd5f5cbe7
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324314
Reviewed-by: Robin Kuss <rkuss@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
Product-Review: James Butters <jbutters@instructure.com>
Build-Review: Andrea Cirulli <andrea.cirulli@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
fixes LF-517
flag=none
Test plan
- In an old quiz, have a media file
linked in the RCE
- For fun, also make a new media_attachment
style media link by turning on the
media_links_use_attachment_id flag
- Export the course into an IMSCC file
- Import the course and use the "import
to new quizzes" flag
- Ensure the media file links look
correct after import
- Specs pass
Change-Id: I380ae686d19ef8690265e8824f2773cba36a6309
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323083
Reviewed-by: James Logan <james.logan@instructure.com>
QA-Review: James Logan <james.logan@instructure.com>
Product-Review: James Logan <james.logan@instructure.com>
Build-Review: Alex Slaughter <aslaughter@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
In b91a0cdcc2, the AsymmetricClientCredentialsProvider was changed to
use CanvasHttp instead of HTTParty. However, we forgot to adjust the
one of the call sites to call JSON.parse(response.body) instead of
response.parsed_response. This fixes that.
flag=none
refs CANVAS-KQHT
test-plan:
- Setup live events locally, or somehow get an asymmetric OAuth2
situation set up.
- Try and go through the typical OAuth2 flow.
- See that things work properly and no error is thrown.
Change-Id: Ic2b371abe30bbf29ebabfa37ed4745711933d955
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324408
Reviewed-by: Cody Cutrer <cody@instructure.com>
Reviewed-by: Xander Moffatt <xmoffatt@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
Product-Review: Ryan Hawkins <ryan.hawkins@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
flag=none
fixes VICE-3694
test plan:
- in an unpublished course
- create or edit an announcement
- verify that in the create/edit page
the alert text on top of the page
matches the ticket AC
Change-Id: I84275577732a188e13247ae77e5bd12d96e5df6d
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324393
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Sam Garza <sam.garza@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
the name of the exported html file generated for a page is
currently (category name)_(page name).html, but if those names
add up to a filename longer than 255 characters, the export
will fail due to an operating system limitation.
modify the filename scheme to use a SHA256 hash if the
traditional name gets too long
test plan:
- create an ePortfolio page in an ePortfolio section
where the names add up to > 250 characters in length
- export should still work
- the page filename should be a SHA256 digest instead
but should still be linked properly
flag=none
fixes FOO-3700
Change-Id: Ie686c3ffe017017eaabec23cab7958b1679177d6
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324303
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Michael Hulse <michael.hulse@instructure.com>
Reviewed-by: August Thornton <august@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
this feature was requested by multiple customers
at InstructureCon 23 hack night
test plan
- import a SIS user batch using a diffing_data_set_identifier
- remove a user from the csv file and re-import
using the same diffing_data_set_identifier
while supplying the "diffing_user_remove_status=suspended"
option
- the user should be suspended rather than deleted
flag=none
closes FOO-3710
Change-Id: I5a0acf0677c0512a334060f917a3fa4fdf32fcd4
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323910
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Ajmal Esa <ajmal.esa@instructure.com>
QA-Review: Jeremy Stanley <jeremy@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
closes EVAL-3272
flag=custom_gradebook_statuses
[pin-commit-analytics=c60a0c10a8475a069d7bee12f9a08e3610049d66]
[pin-commit-custom_reports=61316a7b4ab9ce676df801deec53e48408039e0e]
Test Plan:
0. Enable 'Custom Status Labels for Submissions and Final Grades' and
create a few custom statuses.
1. Create a text entry assignment due in the past, due for at least 4
students
2. Submit to the assignment for Student1. Don't submit for Student2,
Student3, or Student4
3. As a teacher in Gradebook, mark Student3 as "excused" and mark Student4
with a custom status.
4. As the teacher, make a request to
/api/v1/courses/<course id>/assignments/<assignment id>/submissions
(you may need to add the ?per_page=N query param if you have more than 10
students assigned)
In the response, verify:
- Student1's submission shows
- excused: null
- late: true
- missing: false
- custom_grade_status_id: null
- Student2's submissions shows:
- excused: null
- late: false
- missing: true
- custom_grade_status_id: null
- Student3's submission shows
- excused: true
- late: false
- missing: false
- custom_grade_status_id: null
- Student4's submission shows
- excused: false
- late: false
- missing: false
- custom_grade_status_id: <an id>
5. As the teacher in gradebook, mark Student1, Student2, and Student3
with a custom status. Mark Student4 as late.
6. As the teacher, make a request to
/api/v1/courses/<course id>/assignments/<assignment id>/submissions
(you may need to add the ?per_page=N query param if you have more than 10
students assigned)
In the response, verify:
- Student1's submission shows
- excused: false
- late: false
- missing: false
- custom_grade_status_id: <an id>
- Student2's submissions shows:
- excused: false
- late: false
- missing: false
- custom_grade_status_id: <an id>
- Student3's submission shows
- excused: false
- late: false
- missing: false
- custom_grade_status_id: <an id>
- Student4's submission shows
- excused: false
- late: true
- missing: false
- custom_grade_status_id: null
Change-Id: I1e7e9f5fc8916db7481817c2b39a77ae7e84b309
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324159
Reviewed-by: Derek Williams <derek.williams@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
QA-Review: Jen Smith <jen.smith@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
flag=none
fixes VICE-3689
test plan:
- edit an announcement in a published course
- verify in the edit page that the alert
showing on the top of the page matches
the text in the jira
Change-Id: I42ddb540bfd3b588099a2bea795a080a5ea0824e
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324296
Reviewed-by: Drake Harper <drake.harper@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Jody Sailor
QA-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
why:
* to allow A2 to render an LTI iframe in its assignment_show page, and
achieve parity with assignments 1
* slightly hacky but allows the auth/business logic of #show to be
reused
refs EVAL-2546
closes INTEROP-8128
flag=none
test plan:
* create an assignment of online_upload type and one of external_tool
type
* turn on the A2 feature flag (Assignment Enhancements,
assignments_2_student)
* remove `external_tool? ||` from `Assignment#a2_enabled?` to let A2
render for the LTI assignment (temporary)
* open both assignments - they should both show the A2 screen
* copy the url for each assignment and in a new tab, add `/tool_launch`
to the end of the url
* for the first/non-LTI assignment, this should flash an error and
redirect back to /assignments
* for the second/LTI assignment, this should launch the LTI tool
_and_ use the full window instead of being in an iframe
Change-Id: Ifeeb04fc6ca5a6e5a3bd57ea509ec334677bc4b2
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/320670
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Tucker Mcknight <tmcknight@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
QA-Review: Tucker Mcknight <tmcknight@instructure.com>
Product-Review: Xander Moffatt <xmoffatt@instructure.com>
Account admins typically have the ability / means to view user quota
usage via masquerade, but this change allows them to view directly via
the files quota api in the context of a User.
fixes FOO-3709
flag = none
Test plan:
• exercise the files quota api as an account admin
• GET /api/v1/users/:user_id/files/quota
• ensure that the quota usage is returned
• ensure that the quota usage is returned for the correct user
• ensure that the quota usage is not returned for non account admins
Change-Id: Id637f05e20645de97326ce6deb1da30953b4251c
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324015
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Reviewed-by: Michael Hulse <michael.hulse@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: August Thornton <august@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
fixes LS-154
flag=deprecate_faculty_journal
[pin-commit-multiple_root_accounts=4c2c20fd858d1cb4b138e7aab4ee1df4def7f86c]
[fsc-max-nodes=18]
[fsc-timeout=40]
test plan:
- enable the faculty journal on an account
- Account.find(:id).update!(enable_user_notes: true)
- create a course with a student and add an entry in their journal
(/users/:id/user_notes)
- with the deprecate_faculty_journal feature flag **disabled**
- navigate to an account's settings page (/accounts/:id)
- there should be an option in the sidebar for the faculty journal
- navigate to the permissions page of the account
(/accounts/:id/permissions)
- there should be an option to manage permissions for the faculty
journal
- navigate to the account view of a student (/accounts/:id/users/:id)
- there should be a faculty journal button in the top right
- navigate to the activity report for a course with a student
(/users/:id/teacher_activity/courses/:id)
- the student should have a column for their recent entry
- navigate to the user page for a student (/users/:id)
- there should be a faculty journal button in the top right
- with the deprecate_faculty_journal feature flag **enabled**
- repeat all the above steps, the faculty journal should no longer
be visible/mentioned
qa risk: low
Change-Id: I35891b62c6f03a94a3cfa5562cfb45dcedece1ff
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/320912
Reviewed-by: Jackson Howe <jackson.howe@instructure.com>
QA-Review: Jackson Howe <jackson.howe@instructure.com>
Product-Review: Davis Hyer <dhyer@instructure.com>
Tested-by: James Butters <jbutters@instructure.com>
flag=react_discussions_post
fixes VICE-3645
the logic for full_anonymity searching
is now applied to partial_anonymity searching
changed placeholder to Search entries...
when the discussion is any kind of
anonymous
test plan:
- create a partially anonymous discussion
- have someone reply anonymously
- as any user who can access the discussion,
search for the replyer's real name
- verify the reply does not come back in the results
- search for the reply's message text
- verify the reply comes back in the results
Change-Id: I0bec86140f781ae5201a45f847c6665445e9b7a6
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324157
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
Product-Review: Allison Pittler <allison.pittler@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
(when the flag is on)
closes LF-518
flag=permanent_page_links
qa risk: low
test plan:
-make sure the flag is on
-make a page (call it x)
-make another page and link x in it
-delete x
-navigate to /courses/<id>/undelete
-undelete x
-go back to the other page, and click
on the x link that you embedded
>confirm that the link works and takes
you to page x
Change-Id: Id9976f906b478e3e18fcbcd22de12ef782fc09e9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323977
Reviewed-by: Jackson Howe <jackson.howe@instructure.com>
QA-Review: Jackson Howe <jackson.howe@instructure.com>
Product-Review: Jake Oeding <jake.oeding@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
closes EVAL-3338
flag=custom_gradebook_statuses
Also adds authorization checks for all GraphQL endpoints for these models.
Test Plan:
- Verify that only users with root account :manage permission are able to
fetch, create, or update Grade Statuses via GraphQL for that root
account. Note that statuses can be fetched in two different ways — as a
connection to an account
{
__typename
account(id: "1") {
customGradeStatusesConnection {
nodes {
_id
color
}
}
}
}
or directly as a node:
{
__typename
node(id: "2") {
... on CustomGradeStatus {
color
_id
}
}
}
- Verify that all submissions and scores belonging to a custom grade status
have their custom_grade_status_id nullified when the custom grade status
is destroyed.
Change-Id: Icfe3ea4f1634e20cbd888f5f572e950f5a2d408b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323249
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
QA-Review: Christopher Soto <christopher.soto@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>
closes LF-463
flag=authenticated_iframe_content
test plan:
- Upload a video onto an RCE page
- As a user in the course verify the video is visible
- As a user in the course go to /media_objects/:media_object_id/redirect
- Verify the video is returned
- As a user not in the course go to /media_objects/:media_object_id/redirect
- Verify the video is not returned
- In an incognito window, go to /media_objects/:media_object_id/redirect
- Verify the video is not returned
- Publish the video file and set the visibility to public
- As a user not in the course go to /media_objects/:media_object_id/redirect
- Verify the video is returned
- In an incognito window, go to /media_objects/:media_object_id/redirect
- Verify the video is returned
Change-Id: I0e2e3dfdc6bd31cbba728b1d28ba478d88d83a2e
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324010
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob DeWar <jacob.dewar@instructure.com>
QA-Review: Jacob DeWar <jacob.dewar@instructure.com>
Product-Review: Eric Saupe <eric.saupe@instructure.com>
fixes LF-461
flag = none
test plan:
- Add a file to a course
- Add the file to a module
- Unpublish the file
- Delete the file
- Refresh the module page
- Check that the file is no longer
listed in the module
Change-Id: I6d80eb911f112bf89467bbcb754d38b21d0485d2
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324180
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: Luis Oliveira <luis.oliveira@instructure.com>
closes LF-544
flag=none
Test plan
- Have a course with an old quiz
- In the quiz, link to the quiz
assignment
- Add other course links like
/courses/:id/assignments
- Export a QTI for that quiz
- Import that QTI into a new file
using the "Import existing quizzes
as new quizzes" option
- The links should import successfully
Change-Id: Idbfd89db12250eadde91073934c88dfe4b243b48
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323810
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: James Logan <james.logan@instructure.com>
QA-Review: James Logan <james.logan@instructure.com>
Product-Review: James Logan <james.logan@instructure.com>
adds functionality for custom grade statuses to traditional gradebook
grid, now showing the custom colors as the background colors for
cells with that custom status
closes EVAL-3243
flag=grading_scheme_updates
flag=custom_gradebook_statuses
test plan:
- create a custom grade status
- find a submission and set the submission's custom grade status
to the created status above in the Rails console using this:
sub = Submission.find(<id>)
- do the above for a submission that has no status, one that has the
'dropped' status, and one that is ungraded and has another status
like 'missing', and also ensure that one of these submissions
is an even cell in the grid and one is an odd cell in the grid
(easiest way is to just choose 2 submissions that are vertically
adjacent, like 2 student's submissions for the same assignment)
sub.update!(custom_grade_status_id: <custom_status_id>)
- go to the gradebook grid and find the submission
- the submission's cell should have the custom status's color as
the background color
- the custom status color should override any previous status color
like 'dropped' or 'missing'
- the even cell should be the normal color, and the 'odd' cell should
be a darker version (the very first row of submissions is even)
- when clicking the cell to edit the score, the background color
should change back to white
Change-Id: I58f5e803fd4c864630e9cefe615ee65ee44d3db8
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324011
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Sam Garza <sam.garza@instructure.com>
closes EVAL-3274
flag=custom_gradebook_statuses
Test Plan:
1. Enable the "Custom Status Labels for Submissions and Final Grades"
feature flag.
2. Create a few custom statuses for a root account.
3. As a teacher, go to the Gradebook, click on a submission cell, and open
the Gradebook tray. Verify you can mark the student with a standard or
a custom status, and that the status is still present after a page
reload. Make sure to test that you can change the status from
standard -> custom (e.g. "Missing" -> "My Custom Status") and from
custom -> standard (e.g. "My Custom Status" -> "Missing").
Change-Id: Id648ee7d1511428b36d9aaafd2d8d04819e69fe7
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323983
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Reviewed-by: Rohan Chugh <rohan.chugh@instructure.com>
QA-Review: Rohan Chugh <rohan.chugh@instructure.com>
Product-Review: Sam Garza <sam.garza@instructure.com>
This change fixes a bug when changing a student's grade via
speedgrader to a lower grade when the quiz's scoring_policy
is set to keep_highest. Currently, the LearningOutcomeResult
and LearningOutcomeQuestionResult would remain the higher of
the two scores after the manual update in speedgrader. Now
the LOR & LOQR will reflect the lower score as updated via
speedgrader.
NOTE: By default, a quiz's scoring policy will be set to
keep_highest. This can be changed by allowing multiple
attempts and then selecting a different scoring policy.
According to the issue reported in OUT-5673, the quiz
was not set up to allow for multiple attempts.
closes OUT-5673
flag=outcome_gradebook
test plan:
- Create a learning outcome
- Create a question bank and align the outcome
- Add at least one question to the bank, such as
an true/false question
- Create a quiz
- Attach the questions from the bank to the newly created
quiz
- As a student, take the quiz and score 100%
- As the teacher, view the Learning Mastery Gradebook
- There should be a learning outcome result for the
outcome and it should reflect as mastered.
- As the teacher, navigate to the quiz and open
speedgrader.
- For each question, change the point to 0 and click
Update Scores button to save.
- As the teacher, view the Learning Mastery Gradebook
- The outcome result should reflect as not mastered
Change-Id: I61581abec486670d18fafa1e5b15fbfd43a749de
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/322687
Reviewed-by: Jason Anderson <jason.anderson@instructure.com>
QA-Review: Angela Gomba <angela.gomba@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
[ignore-stage-results=Flakey Spec Catcher]
refs VICE-3679
flag=react_inbox_labels
test plan:
- Specs pass.
- Go to Inbox and look at the right of the
Compose button. Nothing should appear.
- Enabled the react_inbox_labels feature flag.
- Go to Inbox and look at the right of the
Compose button. A Manage labels button
should appear.
- Click on it and do normal operation, additions
and deletions later.
- Click the button Save.
- Cache should update correctly after the changes.
- Keep in mind that there is a delay with how the
delete occurs, since they are delayed one 2.5s.
qa risk: low
Change-Id: I76364756300ff47eda0a06badca6cc8053d26cc4
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323776
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Chawn Neal <chawn.neal@instructure.com>
Product-Review: Chawn Neal <chawn.neal@instructure.com>
QA-Review: Aaron Suggs <aaron.suggs@instructure.com>
this commit adds the custom statuses to the gradebook side tray. it adds
the ability to assign the status as well as the checked state if a
submission has the matching custom status id.
closes EVAL-3346
flag=grading_scheme_updates
flag=custom_gradebook_statuses
test plan:
- add custom statuses to the account
- go to traditional gradebook
- click on a submission & open the gradebook sidebar
- verify that the custom statuses are displayed below the standard
statuses
- manually assign a custom status to a submission in the Rails console
- Submission.find(<id>).update!(custom_status_id: <custom_status_id>)
- reload the traditional gradebook & open the tray for that submission
- verify that the custom status is checked for that submission
Change-Id: I6be625f2db916057c372d6853c12cc22b55ffaf2
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323883
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Rohan Chugh <rohan.chugh@instructure.com>
QA-Review: Rohan Chugh <rohan.chugh@instructure.com>
Product-Review: Sam Garza <sam.garza@instructure.com>
why: the previous change (https://gerrit.instructure.com/c/canvas-lms/+/317899)
requires assignments to have due dates, which can break partners.
closes INTEROP-8176
Change-Id: Ib84350c3a183ea01139ac44126b489bb497f684a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323952
Reviewed-by: Xander Moffatt <xmoffatt@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
Product-Review: Steve Mcgee <steve.mcgee@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
fixes VICE-3683
flag=none
Test Plan:
- Spec passes
- remove my fix
-- run spec check ErrorReport.last
-- that will match error in ticket.
Description:
- The issue is the code impletemented in:
g/323477 for course_paces did not compentsate
for group announcement account context.
Change-Id: I9fdad1de556e488657509fecb0899dc6a09d6b82
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323871
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Reviewed-by: Caleb Guanzon <cguanzon@instructure.com>
Reviewed-by: Chawn Neal <chawn.neal@instructure.com>
Existing decaying_average method
is renamed as weighted_average
and added new standard_decaying_average method
for standard decay calculation.
These changes will be reflected only
if outcomes_new_decaying_average_calculation,
feature_flag is turned on
refs: PFS-21869, PFS-21871
Test Plan
* Create outcome
* it should have default calculation method weighted_average
* Mastery calculation dropdown should show weighted_average
and decaying_average
flag=none
Change-Id: I84a90a58c1b5d311564921af78729480141744ee
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/321346
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Mark Valentine <mvalentine@instructure.com>
Reviewed-by: Chrystal Langston <chrystal.langston@instructure.com>
Reviewed-by: Kyle Rosenbaum <krosenbaum@instructure.com>
QA-Review: Mark Valentine <mvalentine@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
Fixes FOO-3621
flag=none
Test plan:
Submit a OTP with space(s) in the middle and it should validate.
Change-Id: Ib7df567cea9a7da0cd58b2a217a9df029736753a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323036
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Jason Perry <jason.perry@instructure.com>
Product-Review: Jason Perry <jason.perry@instructure.com>
also: use separate .d.ts declaration files in
defer-promise and html-escape
test plan:
- existing tests pass
flag=none
Change-Id: Idd4d2b7b3fc2f0f1e8a10d6a456ba7b7b1442758
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323760
Reviewed-by: Isaac Moore <isaac.moore@instructure.com>
Reviewed-by: Michael Hulse <michael.hulse@instructure.com>
Build-Review: Isaac Moore <isaac.moore@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Aaron Shafovaloff <ashafovaloff@instructure.com>
Product-Review: Aaron Shafovaloff <ashafovaloff@instructure.com>
fixes VICE-3680
refs VICE-3679
flag=react_inbox
Test Plan:
1. Open react inbox
2. Make sure you have send_all_messages enabled
3. Compose a message
4. Verify that the All in ... options have the people count
5. Contexts
5a: course,sections,teachers,students,groups
Change-Id: Ic45ac4523e1108c0ba064d6ca9002a4bb93c4923
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323445
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Allison Pittler <allison.pittler@instructure.com>
As a developer, I’d like to know which Sentry errors my team is
responsible for. Since Canvas is owned by multiple teams, it can take some
effort to determine which team is responsible for a particular sentry
error.
The code_ownership gem can help. It lets us define YAML configs with path
globs of which teams own which files. As an error bubbles up, it uses the
stack trace to know which team best "owns" the error.
In this commit, we add an `inst.team` tag to the error that will be
sortable / filterable in Sentry.
The next step is to add CodeOwnership config and definitions to the
canvas-lms rails app.
This is a Hack Week project.
refs VICE-3684
Test plan:
- specs pass
flag=none
Change-Id: Ifdd5cac0e33c92b2c9112e70b3c7e3a9a9d4e023
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323629
Reviewed-by: Isaac Moore <isaac.moore@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Build-Review: Isaac Moore <isaac.moore@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
closes EVAL-2978
closes EVAL-2983
flag=submission_stickers
Test Plan:
1. Enable "Assignment Enhancements — Student" and "Submission Stickers".
Disable "Confetti for On-Time Submissions".
2. As a student, submit to an assignment
3. In a rails console, award that student a sticker:
sub = Submission.find_by(user_id: <id>, assignment_id: <id>)
sub.update!(sticker: "basketball")
4. As the student, refresh the assignment page and you should see a
basketball sticker. Submit to the assignment again. You should not see
a sticker for the most recent attempt.
5. In a rails console, award that student a sticker again:
sub = Submission.find_by(user_id: <id>, assignment_id: <id>)
sub.update!(sticker: "apple")
6. As the student, refresh the assignment page and you should see a
pencil sticker. Click the dropdown to view your previous attempt and
verify the sticker changes to a basketball.
7. Enable the "Confetti for On-Time Submissions" feature flag. Refresh
the assignment page as the student and you should see that the stickers
are now clickable buttons. If you click a sticker you should see
confetti.
8. Disable the "Submission Stickers" feature flag. Refresh the assignment
page and the stickers should be gone.
Change-Id: I9ecf8bc1a95416d5c98ef48dd9e203e1e43188ee
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/313780
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Spencer Olson <solson@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
closes EVAL-2981
flag=submission_stickers
Test Plan:
- set a sticker on a submission in a rails console:
s = Submission.first
s.update!(sticker: "trophy")
- Go to /graphiql and verify the following query returns the sticker info:
query MyQuery {
submission(id: "<the id of the submission>") {
sticker
}
}
Change-Id: I0e73804b51383f37d9753a206496ba4c9aaddf29
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/313770
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Spencer Olson <solson@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
closes EVAL-2980
flag=submission_stickers
Test Plan:
- Make a request to
/api/v1/courses/:course_id/assignments/:id/submissions.json
- Verify the returned submissions have a `sticker` on them.
Change-Id: Id2959ac95b9696fd51764717fda90d64e74e5cb7
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/313768
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Spencer Olson <solson@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
this commit adds the functionality to display the color of a standard
status in traditional gradebook if set by the new Account Grading Status
Management page. account standard grading status colors will *only* be
displayed if the user has not already set a custom color for that status
in traditional gradebook. the user setting will override the account
setting.
closes EVAL-3348
flag=grading_scheme_updates
flag=custom_gradebook_statuses
test plan:
- with both ff on, navigate to /accounts/2/grading_settings/statuses
- save a custom status color for a standard status that you have not
already saved in Traditional Gradebook.
- navigate to Traditional Gradebook & open the side bar. Navigate to the
View Options tab. You should see the color you saved for the standard
grading status in the list of status colors.
- if you need to wipe your traditional gradebook statuses you can run
the following commands in a rails console:
- upv = UserPreferenceValue.find_by(user_id: 1,
key: 'gradebook_settings', sub_key: 'colors')
- upv.update({value: {}})
- **note** only the status colors you have changed in account grading
statuses page will be overwritten & displayed.
Change-Id: I0fb3d689794e9d3a6b4de90a2ff91f886c2b4ac6
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323525
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Rohan Chugh <rohan.chugh@instructure.com>
QA-Review: Rohan Chugh <rohan.chugh@instructure.com>
Product-Review: Sam Garza <sam.garza@instructure.com>
refs VICE-3679
flag=none
test plan:
- Specs pass.
- Go to the rails console and run this:
u = User.find(ID)
u.preferences[:inbox_labels] = ["Test 1",
"Test 2", "Test 3"]
u.save!
- Run the mutation:
mutation DeleteUserInboxLabel {
deleteUserInboxLabel(input: {name: "Test 1"}) {
errors {
message
}
inboxLabels
}
}
- Go to the rails console and load your user
using: u = User.find(ID)
- u.inbox_labels should have the remaining labels.
- If you try to remove a label that doesn't exist,
it will error.
- If you leave the name blank, it will error.
qa risk: low
Change-Id: I18eab4fc86f955efb928c2e936fbefe4b144932b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323425
Reviewed-by: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
refs VICE-3679
flag=none
test plan:
- Specs pass.
- Run the mutation:
mutation CreateUserInboxLabel {
createUserInboxLabel(input: {name: "Test 1"}) {
errors {
message
}
inboxLabels
}
}
- Go to the rails console and load your user
using: u = User.find(ID)
- u.inbox_labels should have the newly created
label in there.
- If you try to duplicate a label, it will error.
- If you leave the name blank, it will error.
qa risk: low
Change-Id: I6c6ddc28fa51be6adaaebf60b0be6cb57584fd3b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323422
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jason Gillett <jason.gillett@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
Product-Review: Jason Gillett <jason.gillett@instructure.com>
flag=none
fixes VICE-3369
refs VICE-3679
test plan:
- as a root account admin,
visit account settings page
- check "Suppress notifications from being created and sent out"
- save
- perform an action that will create a notification
i.e. a discussion mention, or other notifications that
are set to immediately
- visit the user's messages page /users/:user_id/messages
- verify no notification was created
- now uncheck "Suppress notifications from being created and sent out"
and save
- trigger a new notification to be created
- visit the user's messages page /users/:user_id/messages
- verify the notification is there
Change-Id: I63c0408a9d4909dd92db9902d2c82331acbff100
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/311810
Reviewed-by: Jason Gillett <jason.gillett@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
Product-Review: Jason Gillett <jason.gillett@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
This greatly reduces the likelihood of us emiting
the event when an import contains original_assignment_ids
from a foreign shard which have an id collision with
assignment ids on the current shard.
It does this by including the original course in the query
for the assignment. Which should make the chance of a
collision astronomically low, but not impossible.
closes QUIZ-11546
flag=none
Test Plan:
- Specs pass.
- Export a course export from your sandbox with at least one
NQ assignment.
- Set up your local env with live events. Start watching the
LE stream.
- Inside of your local create two courses (A & B)
- In course A create an NQ assignment.
- In the rails console update that Assignment's id
to match that of the id exported from your sandbox.
- Import the course package into course B.
- You should not receive a `quizzes_next_quiz_duplicated` event.
- You should receive an `assignment_created` event but it should
have a NULL value for `lti_resource_link_id_duplicated_from`
- You should not have any new AssignmentCloneJobs in your LTI
instance.
- Perform a course copy of course A to a new course just to make
sure that works as expected.
Change-Id: I851cc8c79275fcf3f9eff15a214c74146cbcd54e
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/321602
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Stephen Kacsmark <skacsmark@instructure.com>
QA-Review: Dustin Cowles <dustin.cowles@instructure.com>
Product-Review: Marissa Pio Roda <marissa.pioroda@instructure.com>
add upsert mutation for custom and standard grade statuses
add delete mutation for custom grade statuses
closes EVAL-3240
flag=grading_scheme_updates
flag=custom_gradebook_statuses
test plan:
- ensure FFs are enabled
- go to graphiql
- click on add new mutation
- ensure that "deleteCustomGradeStatus", "upsertCustomGradeStatus",
and "upsertStandardGradeStatus" are available mutations in the list
- create a new custom grade status with the upsert query, leaving
the id blank, ensure it returns the new status
- either using graphiql through account->custom grade statuses
connection or the rails console, ensure the new status was created
(CustomGradeStatus.find(id) in rails console)
- update that status with the same query but specifying the id of the
newly created status and changing the color and name, ensure it
returns the updated status
- using graphiql or the rails console, ensure the status was updated
- delete the status with the delete mutation, ensure it returns the
deleted status's id and that the status is soft deleted with a
workflow state of deleted in the database
- ensure that the status is no longer returned in the list of custom
grade statuses from graphiql or in rails console with the command
Account.find(2).custom_grade_statuses.active (mimics the graphql
query)
- do the same for standard grade statuses aside from delete since
there is no mutation for that. ensure that when updating, you only
update the color but still pass in the name and when creating,
the name is one of the following: "missing", "late", "resubmitted",
"dropped", "excused", "extended"
Change-Id: I867842b42105e05a600db8440d42958e7db35880
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323309
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Christopher Soto <christopher.soto@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>