test plan:
* turn on the sis import refactor feature flag
* importing a small sis import (default 50 rows or less)
should show the number of successfully imported rows
for each type on the sis import page
closes #CORE-1634
Change-Id: Ifdbe98c8bc9252552e7280d3df0764503a388396
Reviewed-on: https://gerrit.instructure.com/157791
Tested-by: Jenkins
Reviewed-by: Rob Orton <rob@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
Uploading a csv with moderated assignments would fail because
the attributes that would be checked weren't previously loaded in.
fixes GRADE-1374
Test Plan
- Create a moderated assignment.
- Export the gradebook.
- Modify the grade for the moderated assignment.
- If you are the final grader, uploading should work.
- If you are not the final grader, uploading should have no effect.
Change-Id: If0cef730e3b22cd9b049a9c44133cb7a389a6e85
Reviewed-on: https://gerrit.instructure.com/157526
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
Existing accounts default :moderate_grades permissions to false for
TAs, but the new :select_final_grade replacement permission defaults
to true. In the case that no role overrides exist for accounts, we
add a role override to make :select_final_grade false as well. If a
role override exists (for any role), we mirror the existing one.
closes GRADE-1228
Test Plan
- Don't run migrations yet.
- Open the Permissions page as an admin.
- Create a role that descends from Ta role.
- In a rails console, run RoleOverride.destroy_all
- Run migrations.
- Verify that 'Select final grade for moderation' is turned off for
TAs and any custom roles descended from TAs.
- Verify that roles that had 'Moderate grades' enabled (such as
Teacher) continue to have 'Select final grade...' enabled as well.
- Roll back migrations with `rails db:rollback STEP=1` *STEP might
be greater than 1. In my case, there were CSS related migrations
that needed to be rolled back first.
- In a rails console, run RoleOverride.destroy_all
- Refresh the Permissions page.
- Turn on 'Moderate grades' for one of the Ta roles.
- Run migrations.
- Verify that 'Select final grade...' is turned on for the role that
just had 'Moderate grades' turned on, but the other Ta role that
didn't have 'Moderate grades' turned on has 'Select final grade..'
turned off.
- tl;dr 'Select final grade...' should mirror 'Moderate grades'.
Change-Id: Ie575da205bdbe3f5d9110b3b4e99c7f88644c86a
Reviewed-on: https://gerrit.instructure.com/156131
Reviewed-by: Adrian Packel <apackel@instructure.com>
Tested-by: Jenkins
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
fixes GRADE-1368
test plan:
- Have a course with a student, teacher, and an assignment configured
for anonymous instructor annotations
- From a mobile app leave annotations as the teacher
- View the submission as a student, confirm that annotations are
anonymized
Change-Id: Iee6e21136f6f7456d088aa9bdc118a94f8be2f38
Reviewed-on: https://gerrit.instructure.com/157157
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Tested-by: Jenkins
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
QA-Review: Keith T. Garner <kgarner@instructure.com>
Closes PLAT-3508 & PLAT-3509
Test Plan:
- Verify the key rotate correctly (set current to past, future
to current, and the new key to future) in both cases: when there
is no existing key AND when there is key already in Consul
- Verify the script will be running every month
- Verify the keys got rotated using Imperium gem version '0.4.0'
Change-Id: I630f230b3cd1c515ebb266b532901b4260622173
Reviewed-on: https://gerrit.instructure.com/154529
Reviewed-by: Stewie aka Nicholas Stewart <nstewart@instructure.com>
QA-Review: Nathan Mills <nathanm@instructure.com>
Product-Review: Nathan Mills <nathanm@instructure.com>
Tested-by: Jenkins
When we detect a media comment, replace the default "This is a media
comment." with "You have media feedback."
closes: ADMIN-1090
test plan:
- course with assignment, student submits answer, teacher grades and
leaves a comment
> expect student's planner item to show the first line of the comment
- teacher adds a media comment
> expect student's planner item to say "You have media feedback."
you may have to setup nororious. See
https://instructure.atlassian.net/wiki/spaces/ENG/pages/45645850/Setting+Up+Notorious
for instructions. You may also have to fiddle with browser settings
to get permission to use the mic and/or camera.
Change-Id: Idb688be7e50e66cec0ac52ef6338a3f4cdfe01f9
Reviewed-on: https://gerrit.instructure.com/155791
Tested-by: Jenkins
Reviewed-by: Jon Willesen <jonw+gerrit@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Christi Wruck
refs RECNVS-521
* previously instfs file upload returned only the
instfs uuid as `uuid`
* instfs file upload now returns canvas capture
data, which includes the canvas uuid
* instfs uuid has been renamed to `instfs_uuid`
test plan:
* specs
Change-Id: I1f77f3dd1952fbd275ae67c399ff04ef6533785b
Reviewed-on: https://gerrit.instructure.com/157118
Reviewed-by: Michael Jasper <mjasper@instructure.com>
Tested-by: Jenkins
Product-Review: Xander Moffatt <xmoffatt@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
Refs MBL-10851
Test Plan:
- Create a student and 2 courses and enroll the student in both
- Create a user and make them an observer in only one course for
the student
- Setup thresholds for assignment_grade, course_grade, and
assignment_missing
- Go to the course the observer is not in and grade the student
above/below the assignment_grade threshold
- This should also trigger the course_grade threshold
- Go to the course and create an assignment that is due in a minute
or two
- Wait at least 5 minutes
- No assignment_missing alert should be created
Change-Id: If05db61a198ada8c2cfce9049d595fb633483882
Reviewed-on: https://gerrit.instructure.com/156852
Tested-by: Jenkins
QA-Review: Kausty Saxena <ksaxena@instructure.com>
Reviewed-by: Layne Moseley <lmoseley@instructure.com>
Product-Review: Matthew Sessions <msessions@instructure.com>
refs QUIZ-4921
test plan:
- in local Canvas, register a course, and import a CC package
- as siteadmin, go to /api/v1/course/<course_id>/content_migrations
it should list the content_migrations for the course
- pick id for a content_migration and fetch
/api/v1/course/<course_id>/content_migrations/<content_migration_id>
you should be able to see `audit_info` section
- add a teacher to the course
- login as the teacher, and fetch
/api/v1/course/<course_id>/content_migrations/<content_migration_id>
the teacher should NOT see `audit_info` section
- as the same teacher, fetch
/api/v1/course/<course_id>/content_migrations/<content_migration_id>?include[]=audit_info
the teacher can see `audit_info` section
Change-Id: I1086eb92986bb9788d643123014c73556c1540d4
Reviewed-on: https://gerrit.instructure.com/157024
Tested-by: Jenkins
Reviewed-by: Dan Minkevitch <dan@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
Product-Review: John Corrigan <jcorrigan@instructure.com>
Add a Delayed Job Worker that reuses the
Services::SubmitHomeworkService to submit the url uploads after
copying the url from the source. Sends an email for success or failure
of the job. This will be used when InstFS is not enabled.
Based on work from GOOF-435 for the InstFS to support reliable
url uploads.
fixes: GOOF-461, GOOF-462
Test Plan:
* Disable InstFS
* Submit an assignment from Google/Office
* Get an alert with info about submission
* Job enqueued to process the upload.
* When job finishes, the assignment will be submitted.
Change-Id: I63d0f5f9b5dd01cc53bcfffe6f8d952cd6e2c078
Reviewed-on: https://gerrit.instructure.com/155104
Reviewed-by: Cody Cutrer <cody@instructure.com>
Reviewed-by: Josh Orr <jgorr@instructure.com>
Tested-by: Jenkins
QA-Review: Tyler Belnap <tyler@instructure.com>
Product-Review: Jesse Poulos <jpoulos@instructure.com>
closes OUT-1859
test plan:
- in a course, create about 10 outcomes and 10 student users
- create an assignment, aligned to an outcome
- submit to the assignment with two student users
- assess the rubrics for each submission in speed grader
- load LMGB, confirm that all students and outcomes appear,
with the results of the two students
- using a tool like Postman, perform an API call with an
access to the following endpoint:
http://canvas.docker/api/v1/courses/<course id>/outcome_rollups
- confirm that a rollup appears for each student, and only scores
appear for students whose assignments were assessed
- append "?exclude[]=missing_user_rollups" to the request above
and resubmit
- confirm that only rollups with scores appears (should be two)
- append "&include[]=outcomes" to the request above and resubmit
- confirm that under the "linked" section, that "outcomes" contains
all outcomes in the course
Change-Id: I399715093943455659ed5a05c39befca8dc2e801
Reviewed-on: https://gerrit.instructure.com/156247
QA-Review: Dariusz Dzien <ddzien@instructure.com>
Tested-by: Jenkins
Reviewed-by: Neil Gupta <ngupta@instructure.com>
Reviewed-by: Frank Murphy <fmurphy@instructure.com>
Product-Review: Michael Brewer-Davis <mbd@instructure.com>
fixes GRADE-1324
Test Plan
- Have DelayedJobs running.
- Create a course with one teacher and at least one student.
- Create an assignment for that course.
- Go to the User settings of the teacher and turn on the option to
use semicolons in Gradebook Export.
- Go to the Gradebook as the teacher and export the Gradebook.
- Open the csv file and change the grade a bit.
- Verify that the csv did indeed use semicolons rather than commas.
- Import that csv file back into the Gradebook.
- Verify that the import worked successfully.
- Turn off the option for using semicolons and instead use commas.
- Verify that export/import works with commas using the same above
steps.
Change-Id: I42870aeb3ff4064f3db39ed1b67681e2acc4ed8e
Reviewed-on: https://gerrit.instructure.com/156648
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Adrian Packel <apackel@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
closes OUT-2304
performance:
Indices are used throughout the scoped query.
Shard.current.id => 1773
base query:
LearningOutcomeResult.active.where(context_code:'course_1079845',user_id:3306819,learning_outcome_id:1397026)
without scope:
----------------------------------------------------------------------------------------------------------------------------------
Nested Loop (cost=4.86..8.20 rows=1 width=268)
-> Bitmap Heap Scan on learning_outcome_results (cost=4.42..5.54 rows=1 width=268)
Recheck Cond: ((user_id = 3306819) AND (learning_outcome_id = 1397026))
Filter: ((context_code)::text = 'course_1079845'::text)
-> BitmapAnd (cost=4.42..4.42 rows=1 width=0)
-> Bitmap Index Scan on index_learning_outcome_results_association (cost=0.00..1.73 rows=27 width=0)
Index Cond: (user_id = 3306819)
-> Bitmap Index Scan on index_learning_outcome_results_on_learning_outcome_id (cost=0.00..2.44 rows=123 width=0)
Index Cond: (learning_outcome_id = 1397026)
-> Index Scan using content_tags_pkey on content_tags (cost=0.43..2.66 rows=1 width=8)
Index Cond: (id = learning_outcome_results.content_tag_id)
Filter: ((workflow_state)::text <> 'deleted'::text)
with scope (`exclude_muted_associations`):
----------------------------------------------------------------------------------------------------------------------------------------------------------
Nested Loop Left Join (cost=6.99..20.54 rows=1 width=268)
Join Filter: ((learning_outcome_results.association_type)::text = 'Assignment'::text)
Filter: (((ra.muted IS NULL) AND (qa.muted IS NULL) AND (sa.muted IS NULL)) OR (ra.muted IS FALSE) OR (qa.muted IS FALSE) OR (sa.muted IS FALSE))
-> Nested Loop Left Join (cost=6.56..17.88 rows=1 width=270)
-> Nested Loop Left Join (cost=6.13..15.72 rows=1 width=277)
Join Filter: ((learning_outcome_results.association_type)::text = 'Quizzes::Quiz'::text)
-> Nested Loop Left Join (cost=5.71..13.06 rows=1 width=269)
Join Filter: (((rassoc.association_type)::text = 'Assignment'::text) AND ((rassoc.purpose)::text = 'grading'::text))
-> Nested Loop Left Join (cost=5.28..10.85 rows=1 width=293)
Join Filter: ((learning_outcome_results.association_type)::text = 'RubricAssociation'::text)
-> Nested Loop (cost=4.86..8.20 rows=1 width=268)
-> Bitmap Heap Scan on learning_outcome_results (cost=4.42..5.54 rows=1 width=268)
Recheck Cond: ((user_id = 3306819) AND (learning_outcome_id = 1397026))
Filter: ((context_code)::text = 'course_1079845'::text)
-> BitmapAnd (cost=4.42..4.42 rows=1 width=0)
-> Bitmap Index Scan on index_learning_outcome_results_association (cost=0.00..1.73 rows=27 width=0)
Index Cond: (user_id = 3306819)
-> Bitmap Index Scan on index_learning_outcome_results_on_learning_outcome_id (cost=0.00..2.44 rows=123 width=0)
Index Cond: (learning_outcome_id = 1397026)
-> Index Scan using content_tags_pkey on content_tags (cost=0.43..2.66 rows=1 width=8)
Index Cond: (id = learning_outcome_results.content_tag_id)
Filter: ((workflow_state)::text <> 'deleted'::text)
-> Index Scan using rubric_associations_pkey on rubric_associations rassoc (cost=0.42..2.64 rows=1 width=33)
Index Cond: (id = learning_outcome_results.association_id)
-> Index Scan using assignments_pkey on assignments ra (cost=0.43..2.19 rows=1 width=9)
Index Cond: (id = rassoc.association_id)
-> Index Scan using quizzes_pkey on quizzes (cost=0.43..2.65 rows=1 width=16)
Index Cond: (id = learning_outcome_results.association_id)
-> Index Scan using assignments_pkey on assignments qa (cost=0.43..2.15 rows=1 width=9)
Index Cond: (id = quizzes.assignment_id)
-> Index Scan using assignments_pkey on assignments sa (cost=0.43..2.65 rows=1 width=9)
Index Cond: (id = learning_outcome_results.association_id)
test plan:
- create two course-level outcomes
- create an assignment with a single question, and align the 1st outcome via a rubric
- create a quiz bank with a single auto-gradeable question (e.g. true/false), and
align the 2nd outcome to it
- create a quiz that pulls the single question from the quiz bank above
- as a student, submit to the assignment and the quiz
- as a teacher, assess the assignment, providing a score to the rubric
- as a teacher, confirm:
* both outcomes have results in the LMGB
* both outcomes have results in the sLMGB
- as a student, confirm:
* both outcomes have results in the sLMGB
- as a teacher, mute the assignment in the gradebook:
https://community.canvaslms.com/docs/DOC-12961-4152724339
- as a teacher, confirm:
* both outcomes have results in the LMGB
* both outcomes have results in the sLMGB
- as a student, confirm:
* only the outcome associated with the quiz bank has results in the sLMGB
- as a teacher, mute the quiz in the gradebook
- as a teacher, confirm:
* both outcomes have results in the LMGB
* both outcomes have results in the sLMGB
- as a student, confirm:
* no outcomes should have results in the sLMGB
- as a teacher, unmute the assignment in the gradebook
- as a teacher, confirm:
* both outcomes have results in the LMGB
* both outcomes have results in the sLMGB
- as a student, confirm:
* only the outcome associated with the assignment has results in the sLMGB
Change-Id: I0ea05eedd29383501cc9306bcedcfa67aee4cd67
Reviewed-on: https://gerrit.instructure.com/155210
Tested-by: Jenkins
Reviewed-by: Neil Gupta <ngupta@instructure.com>
Product-Review: Neil Gupta <ngupta@instructure.com>
QA-Review: Neil Gupta <ngupta@instructure.com>
Adds an alert when the student submits stating that the upload is
processing and an email will be sent.
THe FilesController#api_capture called by InstFS, when the upload
processing is finished, uses Services::SubmitHomeworkService#submit
to submit the assignment.
Update the JS to prevent the browser from submitting the url upload
assignment twice. Passes the submit_assignment parameter to provide
backwards compatibilty, so the old JS can still double submit.
fixes: GOOF-449, GOOF-450, GOOF-435
Test Plan:
* Submit a file from the Google Drive, will see a pop up.
* Check the xhr for the request, the submit_assignment param will be true
* InstFS callback will cause the assignment to be submitted.
Change-Id: I5f49b8ef642fe5913bf0c2f282de8d697dcf1ce1
Reviewed-on: https://gerrit.instructure.com/154757
Reviewed-by: Nick Houle <nhoule@instructure.com>
QA-Review: Tyler Belnap <tyler@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: Jesse Poulos <jpoulos@instructure.com>
Tested-by: Jenkins
Reviewed-by: Josh Orr <jgorr@instructure.com>
When exporting a gradebook,
the csv should include custom columns listed at the final columns.
fixes GRADE-1275
Test Plan (Exporting)
-Create a course
-Use the public api to add custom columns, 1 read only and 2 writable
(POST /api/v1/courses/:course_id/custom_gradebook_columns)
-Use the public api to add data into those custom columns
(PUT /api/v1/courses/:course_id/custom_gradebook_columns/:id/data/:user_id)
-Navigate to the gradebook for the course and inspect the columns
-Export to csv
-Check if the csv has the proper columns as the gradebook, the read only column
should not have changed, while the writable columns should display the changes
Test Plan (Importing)
-Follow the steps above to export to csv
-Change any data in an assignment column
-Make sure the column changed is not (read only)
-Save the csv and upload into gradebook
-Check if the assignment changes appear in the gradebook
Change-Id: I36a7d53af7b86ffcb6cdfbc4f78effcb0df9a3fe
Reviewed-on: https://gerrit.instructure.com/155027
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: Keith T. Garner <kgarner@instructure.com>
Product-Review: Matt Goodwin <mattg@instructure.com>
Unmuting an anonymous assignment will now cause that assignment to show
in the UI as though it is not anonymous. In addition, posting grades for
a moderated anonymous assignment will now cause that assignment to show
in the UI as though it is not anonymous.
closes GRADE-1310
closes GRADE-1313
Test Plan:
1. Verify unmuting an anonymous assignment causes that assignment to no
longer be anonymized in the UI. You can do this by spot checking
gradebook (old/new/individual) and SpeedGrader. In addition,
re-muting an unmuted anonymous assignment should cause the assignment
to become anonymized in the UI.
2. Verify posting grades for a moderated, anonymous assignment causes
that assignment to no longer be anonymized in the UI (even if the
assignment is muted).
Change-Id: I113c61b4e7fa0eb8909448d8ba7cffb22600e17c
Reviewed-on: https://gerrit.instructure.com/156151
Reviewed-by: Gary Mei <gmei@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Tested-by: Jenkins
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
closes OUT-2144
test plan:
- create a course-level outcome with default rubric criterion
- create an assignment that is aligned to that outcome
- create two sections in a course (in Settings)
- create 6 student users, split evenly between the two sections
- masquerade as each student and submit to the assignment
- in speedgrader, assess the rubrics with the following scores:
1st section students: 5, 3, 0
2nd section students: 4, 2, 1
- perform an authenticated API call using a tool like Postman
to fetch the average aggregate score:
> /api/v1/courses/<course id>/outcome_rollups?aggregate=course
- confirm the average score is 2.5
- perform the same call again, but fetch the median aggregate score:
> /api/v1/courses/<course id>/outcome_rollups?aggregate=course&aggregate_stat=median
- confirm the median score is 2.5
- determine the "section_id" values for each of the two sections above
by running this in a Rails console:
> CourseSection.last(2).map(&:id)
- append "§ion=<section id>" to the average aggregate score call
above, and confirm the average scores:
1st section: 2.67
2nd section: 2.33
- append ""§ion=<section id>" to the median aggregate score call
above, and confirm the median scores:
1st section: 3
2nd section: 2
Change-Id: I5701fd3edc1ff423caf4735406ee1bc3b5b1b011
Reviewed-on: https://gerrit.instructure.com/156486
Reviewed-by: Frank Murphy <fmurphy@instructure.com>
Tested-by: Jenkins
Reviewed-by: Matt Berns <mberns@instructure.com>
QA-Review: Dariusz Dzien <ddzien@instructure.com>
Product-Review: Augusto Callejas <acallejas@instructure.com>
fixes COMMS-995 COMMS-996
Test Plan
* Make sure discussion and announcement pages don't white page
* Make sure the edit pages and other pages in flow works
* Test well.... reallly welll
Change-Id: I1f4e6ececddba8e81aca595287e59ee75fce3fa0
Reviewed-on: https://gerrit.instructure.com/155878
Tested-by: Jenkins
Reviewed-by: Ryan Shaw <ryan@instructure.com>
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Steven Burnett <sburnett@instructure.com>
Fixes COMMS-1240
Test plan:
- Create an assignment with an override for a specific section, and
nothing for "everyone else"
- Perform an API call to change the overall date (ask Sara for deetz)
- Check that there is now an "everyone else" override, with the new
due date that was specified
- Verify that there were no side-effects
- Verify that other, related calls haven't been messed up
Test plan:
Change-Id: I56451e03392b4ded47b5d7047ad8363045daf1c9
Reviewed-on: https://gerrit.instructure.com/156425
Tested-by: Jenkins
Reviewed-by: Venk Natarajan <vnatarajan@instructure.com>
Product-Review: Steven Burnett <sburnett@instructure.com>
QA-Review: Steven Burnett <sburnett@instructure.com>
test plan:
- for an initial sync of a blueprint course to an associated
course, the following should be copied:
* start date
* end date
* restrict enrollments to course dates setting
- for subsequent syncs, the above should be included if
"Include Course Settings" is checked
fixes ADMIN-1107
Change-Id: I402a40ce690f19fdcc06e33399dbf2e3af07926c
Reviewed-on: https://gerrit.instructure.com/156421
Tested-by: Jenkins
Reviewed-by: James Williams <jamesw@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
closes OUT-2218
test plan:
- in a new course, import the CSV file attached to the JIRA ticket
- align the newly created outcome to an assignment
- submit to the assignment
- confirm that a score appears in the LMGB
- confirm that a score appears in the sLMGB
Change-Id: I5d013b2e74369a23c9922059734c86d0328dea08
Reviewed-on: https://gerrit.instructure.com/155468
Reviewed-by: Frank Murphy <fmurphy@instructure.com>
Tested-by: Jenkins
QA-Review: Dariusz Dzien <ddzien@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
test plan:
* with mathman configured and
"Use MathMan to convert LaTeX to MathML?"
enabled, mathml conversion for equations
in rich content should work as before
closes #CORE-1551
Change-Id: Ib632ee6ea4186cabc782748727e1c67e82f30e10
Reviewed-on: https://gerrit.instructure.com/155808
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: James Williams <jamesw@instructure.com>
Fixes COMMS-1139
Test Plan:
- Send a new conversation to your main user
- Using https://lti-tool-provider-example.herokuapp.com/xml_builder,
create a new collaboration. Set the collaboration section to
content_item_selection_request
- Go to http://localhost:3000/api/v1/users/self/activity_stream and
verify that the message for the collaboration object is the collab's
description.
- Also verify that the title of the conversation object is the subject
Change-Id: If1fecd634ecf3e3af89055b5e0f958c83f419d27
Reviewed-on: https://gerrit.instructure.com/155673
Tested-by: Jenkins
Reviewed-by: Landon Gilbert-Bland <lbland@instructure.com>
QA-Review: Steven Burnett <sburnett@instructure.com>
Product-Review: Sara Chadwick <schadwick@instructure.com>
Some production installations have a beta or test environment that is
refreshed with data from production, and is used as a place to test
integrations or new features. In that case, you may want to create
a developer key that only works against this test instance, which has
traditionally meant making the following tradeoff:
- Create the key in the test instance directly, which means it will be
removed the next time the data is refreshed
- Create the key in production, which means the key works against the
production instance as well
This new functionality allows the best of both worlds: create the key in
production for persistance, but only allow it to function against a test
cluster.
To enable test cluster functionality, you need a plugin that overrides
`ApplicationController.test_cluster?` to return appropriately for the
environment.
To see the functionality, you need to set:
`Setting.set("dev_key_test_cluster_checks_enabled", true)`
closes PLAT-3392
[ci no-db-snapshot]
test plan:
- First ensure that all existing developer key functionality works and
no new functionality appears without any action taken
- Then set Setting.set("dev_key_test_cluster_checks_enabled", true), you
should see the new option available in the new dev key UI
- Create a key with and without the new option checked. Access tokens
from the key without it check should still work normally. Tokens from
the key with it checked should not work
- Now manually override `ApplicationController.test_cluster?` to be
true.
- Tokens from both keys should now work
Change-Id: I5bbb46782d19c26a7b703834aaa507b0cb10039a
Reviewed-on: https://gerrit.instructure.com/153035
Reviewed-by: Cody Cutrer <cody@instructure.com>
Reviewed-by: Weston Dransfield <wdransfield@instructure.com>
Tested-by: Jenkins
QA-Review: August Thornton <august@instructure.com>
Product-Review: Karl Lloyd <karl@instructure.com>
Make the feature flag hidden rather than allowed while additional
work is completed on the feature.
Fixes QUIZ-4872
Test Plan:
Feature Flag is still visible to Site Admins, but no longer visible
to Account Admins in either Beta or Prod.
Change-Id: I11c8c8a80e98ad720aff082bcedbf02e25b91f22
Reviewed-on: https://gerrit.instructure.com/155720
Tested-by: Jenkins
Reviewed-by: Dariusz Dzien <ddzien@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Gentry Beckmann <gbeckmann@instructure.com>
closes ADMIN-1155
refs ADMIN-1031
Test plan
- Set up some discussion topics
- Load /api/v1/planner/items for those topics
and ensure you don't have to load
discussion_topic_participants for each one
Change-Id: I92aea7516bea0ec2b1e7406470c6d0f545b0123f
Reviewed-on: https://gerrit.instructure.com/154274
Tested-by: Jenkins
Reviewed-by: Carl Kibler <ckibler@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Mysti Sadler <mysti@instructure.com>
Student homework submissions from the Google Drive LTI are
failing when the Delay Job queue is backed up. The browser sends two
requests for the submission. The first request clones the url and the
second submits the file for the assignment. If the first request takes a
long time, the student will close their browser, prevent the second
request from happening and stopping the submission.
This increases the priority of url submissions to high, so they will be
priortized by the Delayed Job workers.
refs: GOOF-434
Test Plan: Submit an online homework submission from Google or Office.
The Delayed Job record created will have a priority of zero (lower is
better).
Change-Id: I72d583b22c83a8e058497ba6d965fd992bf05ffd
Reviewed-on: https://gerrit.instructure.com/153745
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins
QA-Review: Mark McDermott <mmcdermott@instructure.com>
Product-Review: Jesse Poulos <jpoulos@instructure.com>
Fixes PLAT-3550
Test Plan:
- Verify there is no 'API Token Scopes' under OAuth2
- Verify there is only one link 'API Token Scopes' under Resources
- Verify there is no code left related to generating the 'API Token
Scopes' table under OAuth2
Change-Id: Ib00a4aeec102eafc22169ac5322b581fef797a0b
Reviewed-on: https://gerrit.instructure.com/155247
Tested-by: Jenkins
Reviewed-by: Weston Dransfield <wdransfield@instructure.com>
QA-Review: Weston Dransfield <wdransfield@instructure.com>
Product-Review: Jesse Poulos <jpoulos@instructure.com>
Refs MBL-10742
Test Plan:
- Create a threshold for each type for an observer-student
pairing
- Generate an alert for each threshold type
- The title should match the ticket
- Threshold Types:
- course_grade_low
- course_grade_high
- assignment_grade_low
- assignment_grade_high
- assignment_missing
- course_announcement
- institution_announcement
- For assignment grade thresholds have multiple
assignments that have different display grade as
types and ensure it puts the correct grade in the
alert title
Change-Id: Ia971e707c8da73b09066c5f23a742fe60a64be8f
Reviewed-on: https://gerrit.instructure.com/155341
Tested-by: Jenkins
Reviewed-by: Layne Moseley <lmoseley@instructure.com>
QA-Review: Layne Moseley <lmoseley@instructure.com>
Product-Review: Matthew Sessions <msessions@instructure.com>
This changes SpeedGrader to be consistent with Gradebook in showing
or hiding concluded students in a soft concluded course. Concluded
students will show or be hidden depending on if "Show Concluded
enrollments" is checked or not.
closes GRADE-1204 and GRADE-585
Test Plan
Setup
- Have a course with at least 2 students.
- Create an assignment.
- Conclude 1 student.
- Go to the course settings and change the course dates to start and
end before the current day.
- Under the course dates, check the box for
"Users can only participate in the course between these dates"
Testing SpeedGrader
- Navigate to the Gradebook.
- Uncheck the option to show concluded students, if it's checked.
- Open SpeedGrader for the assignment.
- Verify that the concluded student does not show.
- Navigate to the Gradebook.
- Check the option to show concluded students.
- Open SpeedGrader for the assignment.
- Verify that the concluded student does show.
Testing Exports
- Navigate to the Gradebook.
- Uncheck the option to show concluded students, if it's checked.
- Export the Gradebook.
- Verify that the concluded student does not appear in the export.
- Navigate to the Gradebook.
- Check the option to show concluded students.
- Export the Gradebook.
- Verify that the concluded student does appear in the export.
Change-Id: Id237086263e47405c03e0ae4af20195fa4d8ca35
Reviewed-on: https://gerrit.instructure.com/155111
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
using ids from now on will speed up the job deserialization
(and the code should still work with existing jobs too)
also fix a problem with error handling when the error
is just a string
Change-Id: I6315e523c6f02050ac3d09b67e693ca616636502
Reviewed-on: https://gerrit.instructure.com/154812
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: James Williams <jamesw@instructure.com>
QA-Review: James Williams <jamesw@instructure.com>
* Adds html_url for assignment_missing alerts
* Always includes action_date field
Refs MBL-10730
Test plan:
* Create an assignment_missing alert for an observer
* View alerts via api `/api/v1/users/self/observer_alerts/:userID`
* Verify that action_date field is present
* Verify that html_url field is present
Change-Id: I1276d6467b392ffaa9f919440ec7635ebd925895
Reviewed-on: https://gerrit.instructure.com/155092
Reviewed-by: Matthew Sessions <msessions@instructure.com>
Product-Review: Matthew Sessions <msessions@instructure.com>
QA-Review: Matthew Sessions <msessions@instructure.com>
Tested-by: Jenkins
Soft concluded courses with hard concluded students were returning
ids for those hard concluded students while the frontend was only
expecting ids for non-hard concluded students. This was causing extra
rows to be present in the gradebook, which cascaded into grades not
showing up. This changes gradebook_user_ids to be in line with what
Gradebook.coffee is expecting.
fixes GRADE-1096
Test Plan
- Create a course.
- Turn on New Gradebook for the course.
- Enroll at least two students.
- Create an assignment.
- Grade both students.
- Conclude one student's enrollment.
- Go to the course settings and change the course dates to start and
end before the current day.
- Under the course dates, check the box for
"Users can only participate in the course between these dates"
- Go back to the Gradebook.
- Verify that there are no empty rows and only the students that are
not concluded are present.
- Set the grid to show concluded enrollments.
- Verify that the concluded enrollments now appear.
Change-Id: I21ffa7ee52c07947710ff8ec68159fcfe96b0ec8
Reviewed-on: https://gerrit.instructure.com/154679
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Tested-by: Jenkins
QA-Review: Derek Bender <djbender@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
test plan:
- enable planner
- have assignments and graded discussions
- ensure these link to the assignment or discussion
on a student's planner
- ensure after the student submits and/or the teacher
grades the item, the planner links to the submission
page where the student can see feedback
fixes ADMIN-179
Change-Id: I4bbe2f11c8c95899b6fda6d0935dc9bc48a66d39
Reviewed-on: https://gerrit.instructure.com/154256
Tested-by: Jenkins
Reviewed-by: Dan Minkevitch <dan@instructure.com>
QA-Review: Ed Schiebel <eschiebel@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
closes QUIZ-4547
Test Plan:
- Enable Quizzes.Next in Canvas
- Enable Quizzes next for the course.
- Browse to Courses -> Settings -> Import Course Content
(/courses/<course_id>/content_migrations)
- For Content Types 'Common Cartridge 1.x package' and 'QTI.zip file'
- Import to Quizzes.Next Checkbox and help should be shown, and enabled
- Disable Quizzes next for the course.
- Browse to Courses -> Settings -> Import Course Content
(/courses/<course_id>/content_migrations)
- For Content Types 'Common Cartridge 1.x package' and 'QTI.zip file'
- Import to Quizzes.Next Checkbox and help should be shown, but disabled
- Disable Quizzes next in Canvas
- Browse to Courses -> Settings -> Import Course Content
(/courses/<course_id>/content_migrations)
- For Content Types 'Common Cartridge 1.x package' and 'QTI.zip file'
- Ensure the Import to Quizzes.Next Checkbox and help are not shown.
Change-Id: Ie04f94684c682db81dac721c7bb11b3d153e7e29
Reviewed-on: https://gerrit.instructure.com/154769
Tested-by: Jenkins
Reviewed-by: Jared Crystal <jcrystal@instructure.com>
QA-Review: David Tan <dtan@instructure.com>
Product-Review: Kevin Dougherty <jdougherty@instructure.com>
Change-Id: I0262c02e289eb8476a01c136ea5a291e91173cf9
Reviewed-on: https://gerrit.instructure.com/155009
Reviewed-by: Clay Diffrient <cdiffrient@instructure.com>
Reviewed-by: Ryan Shaw <ryan@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Product-Review: James Williams <jamesw@instructure.com>
QA-Review: James Williams <jamesw@instructure.com>
Tested-by: James Williams <jamesw@instructure.com>
closes: GRADE-1266
Test Plan:
enroll two students and two TAs and the teacher is the final grader (it
shouldn't matter if the final grader is a TA or a teacher, in fact feel
free to rotate them for more possibilities). If you're short on time the
following could be done on one assignment and for each test case toggle the
settings on and off, but then it would be difficult to quickly pull of the
correct configuration, if problems arise.
The titles of each feature are how they are found in the Assignment form.
This can cause some confusion due to some rules being enabling or disabling
a phrase with a 'not' present so be careful!
/------------+---------------------------+-----------+-----------------------+---------------------+-----------------------\
| assignment | anonymous (graders cannot | moderated | graders can view | graders cannot view | final grader can view |
| | view student names) | grading | each other's comments | each other's names | other grader names |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| I (basic) | | | | | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| II | | on | on | | on |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| III | | on | on | | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| IV | | on | | | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| V | on | on | on | on | on |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| VI | on | on | on | on | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| VII | on | on | on | | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| VIII | on | on | | | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| IX | on | | | | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
Note: if a cell is empty, it means `off`,
For assignments with Moderated Grading enabled the `Number of graders` will
always be `2` (the final grader makes three enrollments we'll use for
Speed Grader)
for each assignment do the following:
have the first student (Student A) submit their homework
- As the first TA (TA1), create a published comment and draft comment on
Student A's submission
- As the second TA (TA2), create a published comment and draft comment on
Student A's submission
- As the final grader (the teacher), create a published comment and draft
comment on Student A's submission
For the follow instructions, negatives are presented in uppercase (`CANNOT`)
for enhanced clarity. Ensure for each grader (unless final grader is
specified) in each assignment referenced via the parens:
(I)
1. can view student names
2. can view each other's comments
(II)
1. can view student names
2. can view each other's comments
3. final graders can view other graders' names
(III)
1. can view student names
2. can view each other's comments
3. final grader CANNOT view other graders' names
(IV)
1. can view student names
2. CANNOT view each other's comments
3. final grader can view each others' comments
(V)
1. CANNOT view student names
2. can view each other's comments
3. CANNOT view each other's names
4. final grader view other graders' names
(VI)
1. CANNOT view student names
2. can view each other's comments
3. CANNOT each other's names
4. final grader CANNOT view other graders' names
(VII)
1. CANNOT view student names
2. can view each other's comments
3. can view each other's names
4. final grader CANNOT view other graders' names
(VIII)
1. CANNOT view student names
2. CANNOT each other's comments
3. final grader can view each others' comments
(IX)
1. CANNOT view student names
Change-Id: I3e9a8787f04cf03a38ea651aa85b3eaa98f41f9c
Reviewed-on: https://gerrit.instructure.com/154391
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
test plan:
- in user files (not course files),
- upload a zip file and select "Expand it"
- it should complete without having to reload the page
fixes ADMIN-1180
Change-Id: I9fbb52a1fa50f55ac294bc6df3057b7e4084fda6
Reviewed-on: https://gerrit.instructure.com/154982
Reviewed-by: Han Yan <hyan@instructure.com>
Reviewed-by: Steve Kacsmark <skacsmark@instructure.com>
Reviewed-by: Robert Lamb <rlamb@instructure.com>
Product-Review: Robert Lamb <rlamb@instructure.com>
QA-Review: Robert Lamb <rlamb@instructure.com>
Tested-by: Jenkins
Change-Id: Ib26b053d9d6c408fc90c7e5a3c1bb73c1f88efcd
Reviewed-on: https://gerrit.instructure.com/154781
Reviewed-by: Simon Williams <simon@instructure.com>
Tested-by: Jenkins
Product-Review: James Williams <jamesw@instructure.com>
QA-Review: James Williams <jamesw@instructure.com>
For any accounts/courses with the old Anonymous Grading flag still
enabled, enable anonymous grading for the assignments in those
accounts/courses and move them over to the new Anonymous Marking flag.
For any accounts with the old flag merely allowed, switch it to off.
refs GRADE-957
Test plan:
Setup:
- Have an account (A1) with the Anonymous Grading (course-level) flag
set to ALLOW
- Have a course within A1 (C1) with the same flag set to ON
- Have an account (A2) with the Anonymous Grading (course-level) flag
set to ON (this can be a sub-account of A1)
- Have a course within A2 (C2)
- Create at least one assignment in each course
- Ensure the courses and assignments have been published (i.e., the
courses have a workflow_state of 'available' and the assignments
have a workflow_state of 'published')
Testing:
- Run the migration
- A1, C1 and A2 should no longer have entries for the old feature flag
if you call the feature_flag method in the console:
> account_or_course.feature_flag(:anonymous_grading) # should be nil
- They should also have the new Anonymous Marking flag set to ON
- All assignments in C1 and C2 should now be anonymously-graded
Change-Id: Id1c7325775eda0cbfe89cd5342a1d594c7565b5a
Reviewed-on: https://gerrit.instructure.com/153683
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
closes OUT-1846
Test plan:
- create an outcome
- create two assignments with rubrics including
the outcome
- set one of the rubrics to "Don't post results to LMGB"
- assess a student using both rubrics with different scores
- visit the LMGB
- verify that only the non-hidden score is reflected
in the LMGB
- visit the student LMGB
- verify that only the non-hidden alignment is shown
in the student lmgb
- visit
http://canvas.docker/api/v1/courses/COURSE_ID/outcome_results?user_ids[]=USER_ID&outcome_ids[]=OUTCOME_ID
(replacing COURSE_ID, USER_ID and OUTCOME_ID)
- verify that hidden alignment is not shown
- add
&include_hidden=true
to the above URL
- verify that hidden alignment is now shown
Change-Id: Ie08c63f32686ffc42394e926c22eac773799d616
Reviewed-on: https://gerrit.instructure.com/154464
Tested-by: Jenkins
Reviewed-by: Frank Murphy <fmurphy@instructure.com>
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
QA-Review: Augusto Callejas <acallejas@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
fixes a ticket
Test Plan:
- Test pass
- no development FF on permissions feature flag
Change-Id: Ife6cb890fd576e16b438213ca715988bb2e19614
Reviewed-on: https://gerrit.instructure.com/154687
Reviewed-by: Venk Natarajan <vnatarajan@instructure.com>
Reviewed-by: Landon Gilbert-Bland <lbland@instructure.com>
Tested-by: Jenkins
Product-Review: Steven Burnett <sburnett@instructure.com>
QA-Review: Steven Burnett <sburnett@instructure.com>
refs CORE-1505
also, don't build the overview report anymore (which requires summing up
all of the parts)
Change-Id: Icb4c317e65237cb4ea9a800d7742f36ebac79022
Reviewed-on: https://gerrit.instructure.com/154342
Tested-by: Jenkins
Reviewed-by: James Williams <jamesw@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
This adds a calculate_grades parameter to the assignment creation api
that defaults to true. When set to false, after an assignment is
created the DueDateCacher will run but not force a grade calculation
for the course. The gradebook upload process is the first user of this
parameter to avoid a race condition between the creation of the
assignment during a gradebook upload and the subsequent grade
calculation after the submissions are updated with scores.
fixes GRADE-1229
test plan:
- Create a course with some assignments and some students
- Export the gradebook
- In the CSV add a new assignment and grade the students for that new
assignment
- Import the gradebook
- After import is completed check the canvas logs and confirm that
the grade calculator doesn't run after the call to the assignment
api but does run after the call to submission bulk update
Change-Id: Ibf52a119e3ad34b95786b6e171f585431111feb8
Reviewed-on: https://gerrit.instructure.com/154077
Tested-by: Jenkins
Reviewed-by: Gary Mei <gmei@instructure.com>
Reviewed-by: Jeremy Neander <jneander@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
Change-Id: I8c079ca5ed232191f957d090d34def3ac617cafa
Reviewed-on: https://gerrit.instructure.com/153034
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins
Product-Review: Simon Williams <simon@instructure.com>
QA-Review: Simon Williams <simon@instructure.com>