Commit Graph

1404 Commits

Author SHA1 Message Date
Omar Khan 6cce67989b Add duplicated_successfully to assignment update
Closes QUIZ-3761

Test plan:

- Log in as admin or teacher
- Create an API access token by following the instructions here:
  https://community.canvaslms.com/docs/DOC-10806-4214724194
- Make a note of the token
- Create a Quizzes.Next assignment
- Go back to the assignments page
- Click the kebab menu on the assignment and click 'Duplicate'
- Find the id of the new, duplicating assignment. You can do this by
  running `Assignment.last.id` in a canvas rails console. Make a note of
  this id
- Notify canvas that the assignment has duplicated successfully by
  running:

    curl -v -XPUT \
      -H 'Authorization: Bearer <token>' \
      -H 'Content-Type: application/json' \
      -d '{"assignment": {"duplicated_successfully": true}}' \
      http://canvas.docker/api/v1/courses/<course_id>/assignments/<id>

  where <token> is the API access token created earlier, <course_id> is
  the id of the course, and <id> is the id of the duplicating assignment
  you made a note of earlier.
- Refresh the assignments page
- Check that the assignment is now in the "unpublished" state
- Repeat these steps, but this time with

    {"assignment": {"duplicated_successfully": false}}

  as the request body
- Refresh the assignments page
- Check that the assignment is now in the "failed_to_duplicate" state

Change-Id: Ief72eb84fc711207bea43c66b866710489235280
Reviewed-on: https://gerrit.instructure.com/147483
Tested-by: Jenkins
Reviewed-by: Jeff Belser <jbelser@instructure.com>
Product-Review: Jeff Belser <jbelser@instructure.com>
2018-04-24 19:15:02 +00:00
Rob Orton 3d894486c0 optionally include account object in course api
refs gh-1273

test plan
 - course api include account should work

Change-Id: If4dbd24c70fdb5f9502cd65b031466334b7b9c0d
Reviewed-on: https://gerrit.instructure.com/146762
Tested-by: Jenkins
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Tucker McKnight <tmcknight@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2018-04-18 23:29:38 +00:00
Marc Phillips a2d39f1350 Hide Inherited Dev Key Information
Removes all but the name, workflow_state, and id of the inherited
developer keys. Also addes the developers key that are inherited
to a different tab.

closes PLAT-3244, PLAT-3207, PLAT-3247

Test Plan:
 - Go to the Developer Key page for site admin and create a few keys
    - One with off, one with on, and one with allow
    - Make sure that the feature flag is turned on
    - Click the visibility (eye) icon to enable visibility of each
 - Go to the developer key page for a root admin
    - Note that the inherited tab has the three keys
    - If key is on, should be set to on in the inherited tab and can't 
      change
    - If key is off, shoudl be set to off in the inherited tab and can't
      change
    - If allowed, should be set to allowed and can change
      - Change this key in the root page to on or off, refresh, note
        that state persists
      - Go back to site admin page, change the allow to on or off
      - Go back to the root page and note that the state has been
        overridden and can't change
 - Create a key for the root account and refresh page
    - Note that the root account keys are still in the main tab
 - Create more than 11 root account keys, refresh page, and note that
   it is now paginated
     - Click the show more button, all the remaining keys should appear
 - Go back to the site admin page, create more than 11 keys
 - Go back to the root admin page, click on the inherited tab, and see
   that the show more button appears
     - Click the show more button; all the keys should appear
 - Go back to the site admin page and turn off the visibility of all the
   keys
 - Go back to the root admin page, click on the inherited tab, and note
   that none of the keys are now visible

Change-Id: Ib666cb33636b1582108dcc4a8822c8625c633157
Reviewed-on: https://gerrit.instructure.com/145427
Reviewed-by: Stewie aka Nicholas Stewart <nstewart@instructure.com>
Product-Review: Marc Alan Phillips <mphillips@instructure.com>
Tested-by: Jenkins
QA-Review: August Thornton <august@instructure.com>
2018-04-18 21:43:24 +00:00
Cameron Sutter f30fd7ca39 group_id in discussions api
closes MBL-10278

test plan:
- fetch a group discussion from the discussion index & show api endpoints
- the attribute "group_topic_children" should return an array of:
  {id: <id>, group_id: <group_id}

Change-Id: Ibf095ae64e2bd906758e6641c49f2766399e2c7f
Reviewed-on: https://gerrit.instructure.com/147207
Tested-by: Jenkins
Reviewed-by: James Williams  <jamesw@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Taylor Wilson <twilson@instructure.com>
Product-Review: Gentry Beckmann <gbeckmann@instructure.com>
2018-04-17 23:59:03 +00:00
Rob Orton e5d201e1f0 doc: add missing optional include to course api
fixes gh-1273

test plan
 - rake doc:api should work

Change-Id: I5dcc154eca68c789395ffe9f0297d04b66821823
Reviewed-on: https://gerrit.instructure.com/146733
Reviewed-by: Spencer Olson <solson@instructure.com>
Tested-by: Jenkins
Product-Review: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
2018-04-11 23:27:19 +00:00
Michael Jasper 8b68669aa7 Add instfs_uuid to attachment api calls
closes RECNVS-404

test plan:
 - a request for an attachment which includes `?include[]=instfs_uuid`
   returns the instfs_uuid property for the attachment

Change-Id: If2ecaf43807be1a4f1c0489dc30af6e5ef7c4e76
Reviewed-on: https://gerrit.instructure.com/145949
Reviewed-by: Jacob Fugal <jacob@instructure.com>
QA-Review: Collin Parrish <cparrish@instructure.com>
Tested-by: Jenkins
Product-Review: Michael Jasper <mjasper@instructure.com>
2018-04-09 18:47:37 +00:00
Jeremy Stanley 7bfe0ac4b6 fix user_search permissions
test plan:
 - enable the "Account Course and User Search" feature
 - ensure "See other users' primary email address"
   permission is required to find by email address
 - ensure "Read SIS data" or "Manage SIS data" is
   required to find by SIS ID
 - ensure "View login ids for users" is required
   to find by login ID
 - ensure you can find users by canvas ID and name
   in the same search (where one user's name matches
   another user's ID)

also:
 - ensure students cannot use the include[]=email
   option in the "List users in course" API to
   retrieve email addresses of other students
   (unless granted "See other users' primary
   email address" permission)

fixes ADMIN-836

Change-Id: I9c0a1ba9a643632047f42dc010822b6e5035d0d4
Reviewed-on: https://gerrit.instructure.com/143915
Reviewed-by: Mysti Sadler <mysti@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Matt Goodwin <mattg@instructure.com>
Tested-by: Jenkins
2018-04-09 17:19:56 +00:00
wdransfield 0d02c912f7 Don't do binding query without FF enabled
Closes PLAT-3256

Test Plan:
- Turn off all developer key feature flags.
- Visit the /developer_keys page and
  verify no queries for developer key account
  bindings occur.

Change-Id: I06b6783f29f227e446346b00a8c5431ccaf6b306
Reviewed-on: https://gerrit.instructure.com/145887
Product-Review: August Thornton <august@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Tested-by: Jenkins
Reviewed-by: Nathan Mills <nathanm@instructure.com>
2018-04-04 20:28:59 +00:00
Brent Burgoyne ce3379a3ac add success include param for upload preflight
refs CORE-20

test plan:
- test file upload api with success_include[]=avatar on the preflight
  request
- the final response on success should include the avatar property
- test with local storage, s3, and InstFS

Change-Id: I974197944d0f84ad0b89a628ab8604f50cdec45e
Reviewed-on: https://gerrit.instructure.com/144456
Reviewed-by: Ryan Shaw <ryan@instructure.com>
Reviewed-by: Jacob Fugal <jacob@instructure.com>
Tested-by: Jenkins
QA-Review: Tucker McKnight <tmcknight@instructure.com>
Product-Review: Brent Burgoyne <bburgoyne@instructure.com>
2018-04-04 19:45:50 +00:00
Aaron Kc Hsu 4d3dbe196e Add last attended date to enrollments API endpoint
fixes COMMS-1024

Test Plan
* make sure profiles are off and avatars
* go to a student enrolled in a course
* find the student enrollment on a course
example /courses/11/users/2
* Click more details and add a last attended date to the user
* use the api such as the bottom to get all enrollments for
the course
* curl http://localhost:3000/api/v1/courses/11/enrollments
or do something to get the request.. you can visit the url
with canvas running
* make sure that date you set shows up

Change-Id: Idf3dbd39192f1fe3c6088c8fc45a4112994b3419
Reviewed-on: https://gerrit.instructure.com/145253
Reviewed-by: Steven Burnett <sburnett@instructure.com>
Reviewed-by: Venk Natarajan <vnatarajan@instructure.com>
QA-Review: Landon Gilbert-Bland <lbland@instructure.com>
Product-Review: Aaron Kc Hsu <ahsu@instructure.com>
Tested-by: Jenkins
2018-04-02 16:05:39 +00:00
Jacob Fugal 9265aa5c56 return progress from legacy upload via url
fixes RECNVS-401

the javascript has already been adapted to expect a progress instead of
the file status blob, that's what causes the bug. give it what it
expects. the progress results are populated during Attachment#clone_url,
and the progress is flagged completed once the worker successfully
completes the job.

test-plan:
 - with inst-fs turned off in the account
 - have a course with the Google Drive LTI tool enabled
 - have a file upload assignment in that course
 - as a student in the course, click "Submit Assignment" on the file
   upload assignment
 - choose the Google Drive tab, authorize a google account, select a
   file from the drive, and click submit.
 - submit the assignment with the selected file; the submission should
   go through without error (will give an error at this point without
   this commit)
 - click the link to download the submission; should download

Change-Id: I43e991f419a9f81359145d9f40899ecc82675da0
Reviewed-on: https://gerrit.instructure.com/145403
Reviewed-by: Michael Jasper <mjasper@instructure.com>
Tested-by: Jenkins
Reviewed-by: Andrew Huff <ahuff@instructure.com>
QA-Review: Collin Parrish <cparrish@instructure.com>
Product-Review: Jacob Fugal <jacob@instructure.com>
2018-03-30 20:56:22 +00:00
wdransfield ed4fec7627 Allow setting developer key binding state
Closes PLAT-3196, PLAT-3210, PLAT-3017

Test Plan:
- Create a developer key in site admin
- Verify in the DB a DeveloperKeyAccountBinding is
  created for that key and associated to the site
  admin account. The workflow state of the binding
  should be 'allow'
- Set the developer key visible to true
- Navigate to a root account.
- Verify the site admin key is visible and set to 'allow'
- In the root account UI change the visiblity to 'on'
- Refresh the page and verify the change persisted
- In the site admin UI turn the developer key to 'off'
- In the root account UI verify the key is now set to 'off'
  and the control is disabled.
- In the site admin account UI set the status to 'allow'
- In the root account verify the key status has been
  changed back to 'on' and is no longer disabled.
- Create a key in the root account and verify you can
  succesfully change its binding status to 'allow', 'off',
  and 'on'
- Try any other combinations of keys and states you can think of.
  The binding state set at the site admin level shoud always override
  the state set in the root account.
- Turn off the dev key rewrite feature flags and verify the old UI
  works as before

Change-Id: I50e92e75447529ece7a27a5b9f4b0009f8d1288e
Reviewed-on: https://gerrit.instructure.com/144248
Tested-by: Jenkins
Reviewed-by: Stewie aka Nicholas Stewart <nstewart@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Karl Lloyd <karl@instructure.com>
2018-03-30 16:13:53 +00:00
Jeremy Stanley 781c79cd1f use `page_id` as WikiPage idAttribute
rather than `url`, which can clash with Backbone's cid

test plan:
 - create a course containing Pages named "C1", "C2", ..., "C9"
 - ensure all pages appear on the Pages index,
   without needing to re-sort the list
 - regression test creating and editing wiki pages from the UI

fixes ADMIN-903

Change-Id: I6fcada03eb843625370f211cca23f15a73580629
Reviewed-on: https://gerrit.instructure.com/145081
Tested-by: Jenkins
Reviewed-by: Dan Minkevitch <dan@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2018-03-29 15:36:35 +00:00
Matt Sessions 94d34bf283 Add includes to show discussion
Refs MBL-9902

The show discussion endpoint did not
accept any include parameters. Added
all_dates, sections, sections_user_count,
and overrides

Test Plan:
 - Create a discussion that is section specific
   and has a due date and has overrides
 - Hit /courses/:courseID/discussions/:discussionID
 - It should just give you back the discussion with the
   assignment
 - Include ?include[]=all_dates
 - It should include all_dates on the assignment
 - Include ?include[]=overrides
 - It should include overrides on the assignment
 - Include ?include[]=sections
 - It should include sections on the discussion
 - Include ?include[]=sections&include[]=sections_user_count
 - It should include the user count on the section
 - Hit /courses/:courseID/discussions
 - It should not include the overrides on the assignment
 - Include ?include[]=overrides
 - It should include the overrides on the assignment

Change-Id: I41820dc47720152ef6494d1b0a3428e07272e645
Reviewed-on: https://gerrit.instructure.com/145060
Tested-by: Jenkins
Reviewed-by: Cameron Sutter <csutter@instructure.com>
QA-Review: Landon Gilbert-Bland <lbland@instructure.com>
Product-Review: Matthew Sessions <msessions@instructure.com>
2018-03-28 16:00:19 +00:00
Omar Khan db95fee9b1 Add duplicating states to Assignment model
Closes QUIZ-3753

Test plan:

- Create an assignment
- Click on the assignment's kebab menu and select 'Duplicate'
- Open a rails console with:
  `docker-compose run --rm web bundle exec rails console`
- In the rails console, fetch the duplicate assignment:
  `assignment = Assignment.last`
- Put the assignment in the 'duplicating' state:
  `assignment.update!(workflow_state: 'duplicating')`
- Refresh the assignment list, check that a spinner and 'Making a copy'
  text appear as per the mockup
- Put the assignment in the 'failed_to_duplicate' state:
  `assignment.update!(workflow_state: 'failed_to_duplicate')`
- Refresh the assignment list, check that a 'Something went wrong'
  message, 'Retry' and 'Cancel' buttons appear as per the mockup
- Click the 'Cancel' button, check that assignment disappears
- Repeat the above steps and click the 'Retry' button, check that it
  duplicates the assignment

Change-Id: Id594395d27dc05c07e621974875281341fa4390a
Reviewed-on: https://gerrit.instructure.com/144512
Tested-by: Jenkins
Reviewed-by: Steve Kacsmark <skacsmark@instructure.com>
QA-Review: Michael Hargiss <mhargiss@instructure.com>
Product-Review: Kevin Dougherty <jdougherty@instructure.com>
2018-03-28 15:55:32 +00:00
Dan Minkevitch d482af4ddc Remove duplicate teacher entries for course API
Fixes ADMIN-829

Test Plan:
* Turn on the new Course and User search feature option
  at the account level
* Create a course with multiple sections and enroll two
  teachers in one of the sections
* Add one of the teachers as a teacher to the second section
* View the Courses page at the account level and notice the
  Show More link is not displayed under the list of teachers
  for the course

Change-Id: If8fce197b5e0c3edb93027f04769476e1e7e0d7f
Reviewed-on: https://gerrit.instructure.com/144170
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
QA-Review: Dan Minkevitch <dan@instructure.com>
2018-03-20 21:42:55 +00:00
Rob Orton 75b43f1b2e remove old unused setting
Change-Id: Ia1477ba32f8424f3e5e00e4fb69136b3b1aaea53
Reviewed-on: https://gerrit.instructure.com/144172
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
2018-03-20 19:05:46 +00:00
Jacob Fugal 2bdca4957e consider request host when choosing oauth host
fixes RECNVS-361

instead of just using Attachment.current_root_account.domain

to facilitate the change, all generation of non-public links to external
file storage go through a FileAuthenticator instance that holds the
necessary information about the current user and oauth host

test-plan:
[locally]
- smoke test file uploads and downloads, there should be no impact on
  behavior, just a refactor
[once on beta]
- enable inst-fs in your sandbox
- logout of canvas
- open network logging in your browser dev tools and log back in to
  canvas
- identify the requests related to the inst-fs login pixel and
  corresponding oauth redirects
- the oauth should have occurred against your beta sandbox, not your
  production sandbox
- attempt to upload a file; should be successful

Change-Id: Ic859b707908baef84f5ee4dba29f18bdd841abcc
Reviewed-on: https://gerrit.instructure.com/143930
Tested-by: Jenkins
Reviewed-by: Michael Jasper <mjasper@instructure.com>
QA-Review: Collin Parrish <cparrish@instructure.com>
Product-Review: Jacob Fugal <jacob@instructure.com>
2018-03-20 04:25:18 +00:00
Adrian Packel 7517bc628c Add anonymous grading assignment field
Add an "anonymous grading" field to the Assignment object, and add a
checkbox for it in the assignment UI that appears when the feature flags
for anonymous moderated marking (the base flag) and AMM-related
anonymous grading are enabled.

closes GRADE-949

Test plan:
  * Run the attached migration and make sure there are no errors.
    Afterward, open up a database console and check that there
    are no values in the new column:

    > select * from assignments where anonymous_grading is null;

    The above query should return zero rows.
  * Make sure that undoing the migration using db:migrate:down
    properly deletes the new column (remember to re-run the
    migration before continuing!).
  * Enable Anonymous Moderated Marking at the account level if not
    already enabled. Create a new course and turn on the new
    Anonymous Marking flag for it.
  * Create an assignment and edit it.
  * There should be an "anonymous grading" checkbox on the edit page,
    and if you check (or uncheck) it its value should persist between
    views of the page.
  * Check that if you turn the new anonymous grading flag off for the
    course and edit the assignment again, the checkbox is no longer
    present.

Change-Id: Ie8955644d78243008bdcd51a05689c093d5d8a8b
Reviewed-on: https://gerrit.instructure.com/143402
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-03-19 17:47:56 +00:00
Stewie (Nicholas Stewart) f764613419 Add dev key visible to api
Refs: PLAT-3184

Test Plan:  Visible attribute should be in the dev key api

Change-Id: I0bfb76d9d0c40434ea12495dd1b24b32e5d6e4b3
Reviewed-on: https://gerrit.instructure.com/142847
Tested-by: Jenkins
Reviewed-by: Weston Dransfield <wdransfield@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Stewie aka Nicholas Stewart <nstewart@instructure.com>
2018-03-19 15:49:29 +00:00
Mysti Sadler a242a38e50 Order planner queries by overridden due dates
fixes ADMIN-131

Test plan
- Set up user with several assignments with
  as many types of overrides as possible
- (User in multiple sections with different
  due dates, user with an ad-hoc override,
  overrides that don't override the due date, etc)
- Ensure the API returns the items in the correct
  order (assuming the user has a due date for the
  item)
- Check the same with ungraded quizzes
- Ensure the plannable_date is the correct date
  for the user
- Turn off Canvas Planner and check to make sure
  the to do list works correctly

Change-Id: Ie38900ac645804867823ed24b59f228cefef7f51
Reviewed-on: https://gerrit.instructure.com/142412
Tested-by: Jenkins
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: Mysti Sadler <mysti@instructure.com>
2018-03-13 19:09:19 +00:00
Andrew Huff c15f938cb7 canvas upload via url
closes RECNVS-329

test plan: (joint with g/142642)

Change-Id: I32df18bdc91451e67bb83fbcc68b3f0629444ad6
Reviewed-on: https://gerrit.instructure.com/142732
Reviewed-by: Jacob Fugal <jacob@instructure.com>
QA-Review: Collin Parrish <cparrish@instructure.com>
Tested-by: Jenkins
Product-Review: Jacob Fugal <jacob@instructure.com>
2018-03-11 19:37:47 +00:00
Jacob Fugal cfc4e74055 use api_attachment_preflight with /files/pending
fixes RECNVS-237

simplify FilesController#create_pending (which corresponds to the
POST /files/pending route) to do its preflight setup through
api_attachment_preflight. this makes it consistent with other preflight
endpoints, particularly so inst-fs gets used when enabled.

cascaded implications:
* FilesController#create for local uploads is removed in favor of
  FilesController#api_create + FilesController#api_create_success
* FilesController#s3_success for s3 uploads is removed in favor of
  FilesController#api_create_success
* FilesController#render_attachment_json is removed (was only used by
  the previous two removed methods) in favor of the attachment_json
  returned by #api_create_success
* JavaScript performing uploads through /files/pending now expects an
  {<attachment fields>} shaped response in line with
  attachment_json
* JavaScript performing uploads through /files/pending now expects a
  'content-type' field in the response instead of 'content_type', in
  line with attachment_json

as part of the cleanup, the duplicate_handling parameter was renamed to
on_duplicate to match other preflight endpoints, and the size parameter
was added to the request for quota checking

test-plan:
- generally, uploads that go through /files/pending:
  - still work
  - work with instfs
- specifically, the uploads that go through /files/pending are:
  - uploading an image as an avatar in the user profile
  - submitting an assignment via file upload
  - conversation messages with attached files
  - uploading a file to an eportfolio
  - upload image from wiki sidebar (w/o RCE enabled)
  - upload files from wiki sidebar (w/o RCE enabled)
- of particular interest to confirm beyond just "appears to work" are:
  - attachment(s) are associated with conversation message correctly
    after upload
  - attachment(s) are associated with submission correctly after upload
  - images uploaded to eportfolio are recognized as images
  - video files uploaded via wiki sidebar are recognized as video
  - image files uploaded via wiki sidebar are recognized as images

Change-Id: I463b3746e8e99a5e503df302664122bf364771c1
Reviewed-on: https://gerrit.instructure.com/141859
Tested-by: Jenkins
QA-Review: Collin Parrish <cparrish@instructure.com>
Reviewed-by: Jonathan Featherstone <jfeatherstone@instructure.com>
Product-Review: Jacob Fugal <jacob@instructure.com>
2018-03-09 23:16:14 +00:00
Jacob Fugal 7a2323afee include progress results in progress_json
refs RECNVS-331

allows simplifying course link validator to use progress_json

test-plan: N/A

Change-Id: I88bf27298773a40cf9bec0152093bbc8da9bed40
Reviewed-on: https://gerrit.instructure.com/142641
Tested-by: Jenkins
Reviewed-by: James Williams  <jamesw@instructure.com>
QA-Review: Collin Parrish <cparrish@instructure.com>
Product-Review: Jacob Fugal <jacob@instructure.com>
2018-03-09 23:12:53 +00:00
Shahbaz Javeed 04349fe757 run DueDateCacher only once for some bulk operations
closes GRADE-927

test plan:
* Create a course with an assignment and a quiz
* Enroll three students in the course
* For the assignment
  - Add two overrides with one student in each and ensure the
    "Everyone Else" group isn't present in any overrides
  - Observe the Rails logs while saving this to ensure DueDateCacher
    runs only once
  - Verify DueDateCacher only runs for the assignment and recalculates
    grades at the same time
  - Edit the assignment and submit without any changes
  - Verify DueDateCacher does not run
* For the quiz
  - Add two overrides with one student in each and ensure the
    "Everyone Else" group isn't present in any overrides
  - Observe the Rails logs while saving this to ensure DueDateCacher
    runs only once
  - Verify DueDateCacher only runs for the assignment and recalculates
    grades at the same time
  - Edit the assignment and submit without any changes
  - Verify DueDateCacher does not run
* For the Course
  - From the Course settings page, Copy the course with the following
    settings:
    > Change the start date to one year out
    > Choose "Shift dates" for the Date adjustment
  - Observe the Rails logs while saving this to ensure DueDateCacher
    runs only once
  - Verify DueDateCacher only runs for the course

Change-Id: Ia97620132f3f1ccc42668610deb125e67c45bd9a
Reviewed-on: https://gerrit.instructure.com/142197
Reviewed-by: Spencer Olson <solson@instructure.com>
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>
2018-03-08 19:45:59 +00:00
Jacob Fugal e60143748d user real user when available in instfs JWTs
refs RECNVS-264

but still pass the @current_user for access and upload JWTs, so that it
can go in a separate claim if its different

test-plan:
- smoke test an inst-fs upload. should still work

Change-Id: I4be9cd4049c83848e69aae37500ae9f4b96392b4
Reviewed-on: https://gerrit.instructure.com/142334
Tested-by: Jenkins
Reviewed-by: Michael Jasper <mjasper@instructure.com>
QA-Review: Jonathan Featherstone <jfeatherstone@instructure.com>
Product-Review: Jacob Fugal <jacob@instructure.com>
2018-03-06 20:44:27 +00:00
Augusto Callejas 412e49baee Outcome import creation/status endpoints
closes OUT-1534

Scheduling of outcome import jobs will occur in a separate PS,
after this merges and OUT-1997 is merged too.

test plan:
  - start up canvas
  - generate api docs:
    > docker-compose run --rm web bundle exec rake doc:api
  - load api docs in http://canvas.docker/doc/api/index.html
  - read over the "Outcomes CSV Format" and make sure it reads well
  - read over the "Outcomes Import" and make sure it reads well
  - obtain an access token:
    https://community.canvaslms.com/docs/DOC-10806-4214724194
  - request an outcome import, replace "canvas-path" and "token" values:
    curl -F attachment=@<canvas-path>/spec/lib/outcomes/fixtures/demo.csv \
         -F 'import_type=instructure_csv' \
         -H "Authorization: Bearer <token>" \
         http://canvas.docker/api/v1/accounts/1/outcome_imports
  - in a rails console, confirm that the import was accepted:
    > docker-compose run --rm web bin/rails console
    % pp OutcomeImport.last
    # confirm that the import is in the 'created' state, associated with
      your user and associated with an account context
    # note the "id" value for later use
    % pp OutcomeImport.last.attachment
    # confirm that the attachment is in the 'processed' state and has
      the filename "test_outcomes_1.csv" passed in above
  - request the status of the outcome import (should return a message
    saying "The specified resource does not exist"):
    curl -H "Authorization: Bearer <token>" \
         http://canvas.docker/api/v1/accounts/1/outcome_imports/latest
  - back in the rails console created above, manually transition
    the import to "importing":
    % OutcomeImport.last.job_started
  - run the above curl command again, and this time the latest outcome
    import should be returned, in the 'importing' state
  - run the above curl command again, replacing "latest" with the "id"
    value obtained above. it should return the same response as the
    previous step.

Change-Id: Ice7d67b625b443cec70f531f2e673face6d6fbeb
Reviewed-on: https://gerrit.instructure.com/142024
Reviewed-by: Neil Gupta <ngupta@instructure.com>
Reviewed-by: Frank Murphy <fmurphy@instructure.com>
Tested-by: Jenkins
QA-Review: Frank Murphy <fmurphy@instructure.com>
Product-Review: Neil Gupta <ngupta@instructure.com>
2018-03-05 19:22:03 +00:00
Rob Orton 9c06bf6d91 add timestamps to account report api
fixes CORE-1076

test plan
 - specs should pass

Change-Id: Id0b88c21a606a69ec5663864f4303ba95101c14a
Reviewed-on: https://gerrit.instructure.com/142386
Reviewed-by: James Williams  <jamesw@instructure.com>
Tested-by: Jenkins
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2018-03-02 16:19:19 +00:00
Michael Jasper a891136f20 Add host claim to inst-fs JWT
refs RECNVS-313

test-plan:
- with inst-fs enabled, do the following:
  - login, upload a file, access a file
- in each case the JWT serialized in the url should contain a
  `host` claim which is the oauth host (domain of the root account)

Change-Id: I05e833407bfd6a3d6cb0dcb95d42d446e314d224
Reviewed-on: https://gerrit.instructure.com/141584
Tested-by: Jenkins
Reviewed-by: Jacob Fugal <jacob@instructure.com>
QA-Review: Collin Parrish <cparrish@instructure.com>
Product-Review: Michael Jasper <mjasper@instructure.com>
2018-02-28 17:32:59 +00:00
Cody Cutrer 8b47dfcd8f transpose cross-shard links in api_user_content
fixes CORE-763

test plan:
 * set up two accounts, on different shards, and a user associated with both
 * create a course on shard 2 and create a wiki page for the front page.
 * create a module in that course
 * as the content of the front page, embed an image from the course, and
   link to the module
 * using the domain of shard 1, go to /api/v1/courses/<id of shard 2>~<id the course>/front_page
 * inspect the links in the returned body element. they should be using the
   first account's domain, but should contain (short) global ids. there should
   4 - the 'regular' URL for the image and the link, and a data-api-endpoint for each.
 * exercise all 4 URLs. the HTML ones should redirect to account 2's domain,
   and the API URLs should return a result directly

Change-Id: I10aa0fc1dc003a781d04ec5b230ede6aeba64fb9
Reviewed-on: https://gerrit.instructure.com/141664
Reviewed-by: Rob Orton <rob@instructure.com>
Tested-by: Jenkins
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2018-02-27 16:57:45 +00:00
Nate Collings cbd207736b add read_only to custom_gradebook_columns
Test Plan:

1 - Run the migrations and validate that the
    `read_only` column exists on the
    `custom_gradebook_columns` table, with a default
    of false
2 - Create a new CustomGradebookColumn through the API
    and validate that it accepts and persists the
    `read_only` parameter. Example curls:

   Create the column:

   curl -H "Authorization: Bearer <token>" \
     http://localhost:3000/api/v1/courses/:id/custom_gradebook_columns \
     -X POST \
     -F "title=ReadOnly" \
     -F "read_only=true"

   Validate the columns:

   curl -H "Authorization: Bearer <token>" \
     http://localhost:3000/api/v1/courses/:id/custom_gradebook_columns/

3 - Open the gradebook for a course and validate that you cannot
    edit the `read_only` columns in both the old and new
    gradebooks. (Tabbing should still work as normal.)

4 - Go to the Individual View. Under Global Settings, check Show Notes
    in Student Info. Under Content Selection, select a student.
    Confirm that you can only edit the custom columns that were
    not created as read_only.

refs PFS-9913, PFS-9914, PFS-10003

Change-Id: I18005cc0eaf19202c00a5d79c2a04421b5d12a5c
Reviewed-on: https://gerrit.instructure.com/139625
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Tested-by: Jenkins
Product-Review: Ian Morris <ianm@instructure.com>
QA-Review: Aiona Hernandez <ahernandez@instructure.com>
2018-02-26 19:59:46 +00:00
Jeremy Stanley c78eeae6f9 don't count student-view student in course api total_students
test plan: ensure the API endpoint below does not include
 the student view student in total counts

 api/v1/courses/X?include=total_students

fixes ADMIN-800

Change-Id: I706bcdabdf2cba9031c8b5649a89370e1f0471e9
Reviewed-on: https://gerrit.instructure.com/141685
Tested-by: Jenkins
Reviewed-by: Jon Willesen <jonw+gerrit@instructure.com>
QA-Review: Jon Willesen <jonw+gerrit@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2018-02-23 18:28:21 +00:00
wdransfield 6b465dd804 Fix last N+1 for adding originality_data to submission_history
Closes: GRADE-861

Test Plan
- Verify there are no N+1 queries when loading speedgrader
  caused by originality reports
- Verify there are no N+1 queries when loading gradebook
  caused by originality reports
- Verify originality reports are copied to all submissions
  in a group when they are created or updated in a group
  assignment.
- Verify online upload originality reports are displayed
  correctly in speedgrader, gradebook, student grade page,
  and submission details page.
- Verify originality reports display properly in gradebook
  and speed grader when there are multiple submissions
  and each has a different originality report.
- Verify the "resubmit to plagiarism tool" button still
  appears in speedgrader.
- Verify originality reports for group assignments are displayed
  correctly.
- Verify text entry originality reports are displayed correctly.
- Verify originality report launches work correctly from speedgrader
  and gradebook.

Change-Id: I459bbf0a165bb131d58fc153feb0dce3d0bf07af
Reviewed-on: https://gerrit.instructure.com/141321
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Weston Dransfield <wdransfield@instructure.com>
2018-02-22 17:01:41 +00:00
Augusto Callejas 4b5654711d Propagate outcome edits to unassessed rubrics
closes OUT-1566

When outcomes are imported into rubrics, then any updates
to an outcome's name, description and ratings will be
reflected in unassessed, updateable (referenced by no more
than one assignment) rubrics, specifically in the rubric
criteria containing the outcome.

test plan (unassessed/updateable):
  - create an account outcome
  - create an account rubric, using the outcome as
    a single criterion
  - edit the outcome, including name, description
    ratings and total points possible (confirm that
    a warning dialog appears before editing)
  - confirm that the changes are reflected in the
    account rubric's criterion (check criteria name,
    ratings, and total points)
  - create an assignment, and use the account rubric
    as its rubric
  - edit the outcome, including name, description
    ratings and total points possible (confirm that
    a warning dialog appears before editing)
  - confirm that the changes are reflected in the
    account rubric's criterion and the assignment's rubric
    (check criteria name, ratings, and total points)
  - create another assignment, and use the account rubric
    as its rubric
  - edit the outcome, including name, description
    ratings and total points possible (confirm that
    a warning dialog DOES NOT appear before editing)
  - confirm that the changes are NOT reflected in the
    account rubric's criterion and both the assignment
    rubrics

test plan (assessed):
  - create a new account rubric using the default criterion
  - create a new assignment and use the account rubric
    as its rubric
  - as a student, submit to the assignment
  - as a teacher, score the assignment, including the rubric
  - add the account outcome to this new account rubric
  - edit the outcome, including name, description
    ratings and total points possible (confirm that
    a warning dialog DOES NOT appear before editing)
  - confirm that the changes are NOT reflected in the
    account rubric's criterion and the assignment's rubric

Change-Id: Ie5064269689071a450fa503fb68c73f5beb16710
Reviewed-on: https://gerrit.instructure.com/127991
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
Tested-by: Jenkins
Reviewed-by: Frank Murphy <fmurphy@instructure.com>
QA-Review: Andrew Porter <hporter-c@instructure.com>
QA-Review: Leo Abner <rabner@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-02-21 21:59:05 +00:00
Omar Khan 353b6e90d4 Add Assignment#duplicate_of relation
This commit updates Assignment#duplicate to store a reference to the
original assignment on the duplicated assignment. Both the original
assignment and the new assignment's lti_resource_link_id are included
in the `assignment_created` live event emitted when the new assignment
is saved.

This allows LTI tools listening for Canvas live events to identify when
an assignment has been duplicated, and duplicate their own data
accordingly.

Closes QUIZ-3749

Test plan:

- Set up live events and tail the kinesis stream as per the instructions
  in doc/live_events.md
- Create an LTI assignment
- An `assignment_created` live event containing this assignment's
  lti_resource_link_id should appear in the kinesis log. Make a note of
  this lti_resource_link_id
- Duplicate this assignment by clicking the "kebab" menu and clicking
  "Duplicate"
- Check that another `assignment_created` live event appears in the
  kinesis log, containing both the original assignment's
  lti_resource_link_id and the new assignment's lti_resource_link_id

Change-Id: I64bdb9a2132e58c4e7be0ab7687c2c819a3587fd
Reviewed-on: https://gerrit.instructure.com/140877
Tested-by: Jenkins
QA-Review: Michael Hargiss <mhargiss@instructure.com>
Reviewed-by: Jeff Belser <jbelser@instructure.com>
Product-Review: Michael Hargiss <mhargiss@instructure.com>
2018-02-20 22:55:00 +00:00
Spencer Olson 2867804416 ignore soft-deleted grading periods for current_period_id
Ignores soft-deleted Grading Periods when determining the current
grading period for an enrollment.

closes GRADE-834

Test Plan:
1. At the root account grading standards page
   (accounts/:id/grading_standards), create an active Grading Period
   (a period where `start_date` > now < `end_date`).
2. In a course that is using that grading period, hit the courses
   endpoint as a student and verify the enrollments you get back have
   a not-null current_grading_period_id:

   GET /api/v1/courses/:id?include[]=total_scores&include[]=current_grading_period_scores

   => current_grading_period_id should be present

3. At the root account grading standards page, delete the Grading
   Period you created in step 1.

4. In a course that is using that grading period, hit the courses
   endpoint as a student and verify the enrollments you get back have
   a null current_grading_period_id:

   GET /api/v1/courses/:id?include[]=total_scores&include[]=current_grading_period_scores

   => current_grading_period_id should be null

Change-Id: I5aed1ba5bed47a08902d74ec3c41a4b9e2bad049
Reviewed-on: https://gerrit.instructure.com/139932
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Josh Simpson <jsimpson@instructure.com>
Tested-by: Jenkins
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
QA-Review: Adrian Packel <apackel@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-02-09 15:56:11 +00:00
Adrian Packel 1c48c5e8df add unposted values to methods in API controllers
Update several API methods to return unposted scores/grades alongside
the existing fields if the requesting user has either of the
:manage_grades or :view_all_grades permissions.

The updated functions are:
submissions_api_controller.rb#for_students
users_controller.rb#grades_for_student
course_json.rb#total_scores
course_json.rb#current_grading_period_scores

closes GRADE-761

Test plan:

Initial setup and notes:
- As a teacher, set up a course with some students and at least one
  unposted assignment, and assign some grades.
- Also, set up a login for a student in the course.

For each step listed below, you should access the listed URL first
as the teacher, then log out and back in as a student, and access it
again. Check that your results are in line with what's indicated below.
To each URL, prepend your server and port (presumably localhost:3000 or
similar).

Testing submissions_api_controller:
- Access the following URL (replace "1" with your course ID):
  /api/v1/courses/1/students/submissions?student_ids=all&include=total_scores&grouped=true
- As a teacher:
  - In each individual student hash, the fields "unposted_current_score"
    and "unposted_final_score" should appear alongside the corresponding
    computed_ scores.
  - The unposted fields should reflect each student's scores with
    unposted assignments factored in.
- As a student:
  - The unposted fields should not appear.

Testing grades_for_student:
- From your course above, identify the ID for a student's enrollment,
  perhaps using the Rails console.
  (E.g.: StudentEnrollment.find_by(course_id: <course ID>).id)
- Access the following URL (replace "1" with the enrollment ID):
  /grades_for_student?enrollment_id=1
  (note that the "/api/v1/" prefix is NOT part of this one)
- As a teacher:
  - The output should include an 'unposted_grade' field reflecting the
    student's unposted (current) score.
- As a student:
  - The output should not include the new field.

Testing course_json:
- Set up a grading period that includes the current date and time,
  if one is not already active.
- Identify the ID of a student in the course.
  (E.g.: StudentEnrollment.find_by(course_id: <course ID>).user.id)
- Access the following URL (replace "1" with your course ID):
  /api/v1/users/1/courses?include[]=enrollments&include[]=total_scores&include[]=current_grading_period_scores
- As a teacher:
  - In the output, each element in the "enrollments" array should
    include the following fields (which should, as described above,
    reflect the student's scores factoring in unposted assignments):
    - unposted_current_score
    - unposted_current_grade
    - unposted_final_score
    - unposted_final_grade
    - current_period_unposted_current_score
    - current_period_unposted_current_grade
    - current_period_unposted_final_score
    - current_period_unposted_final_grade
- As a student:
  - The unposted fields listed above should *not* be included.

Change-Id: Ie2b7cbfa41446d3f9010d4f6376407b1c1edd443
Reviewed-on: https://gerrit.instructure.com/138468
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
Tested-by: Jenkins
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-02-07 18:34:10 +00:00
Rob Orton ae1dc5d0ee restore sis_batch errors until api is deprecated
fixes CORE-922

test plan
 - old api results should include limited errors
   and warnings

Change-Id: Ia71bca882ea234d286b43be12baa291518e69f11
Reviewed-on: https://gerrit.instructure.com/139371
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
2018-02-05 18:11:44 +00:00
Rob Orton 5e735cebeb store sis_batch_errors in the db
fixes CORE-324

test plan
 - run a sis import with errors
 - the errors should be included in the api JSON

Change-Id: I97e372a82b565e7bfa01cd9ca0bb66bb67c95723
Reviewed-on: https://gerrit.instructure.com/139071
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2018-01-26 22:08:25 +00:00
Rob Orton 68ed1c341d add sis_ids to groups and group categories APIs
fixes CORE-652

test plan
 - groups response should include sis_id
 - group category response should include sis id

Change-Id: I2e2ea884e6fed333baf4a2f5df8a8d1ad0e65f1c
Reviewed-on: https://gerrit.instructure.com/137876
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins
QA-Review: Tucker McKnight <tmcknight@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2018-01-17 23:21:41 +00:00
James Williams 3db514f1b8 master courses: check for expired migrations in api
refs #ADMIN-675

Change-Id: Ie656b5272c63245aaa0df82d98efdd18941ea03d
Reviewed-on: https://gerrit.instructure.com/137748
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2018-01-12 16:38:00 +00:00
Keith Garner aec7350338 add unposted scores to enrollment api for teachers/admins
This adds four additional fields (unposted_current_score,
unposted_final_score, unposted_current_grade, unposted_final_grade) to
the enrollment and users endpoints if the requesting user has either
manage_grades or view_all_grades permissions.

fixes GRADE-119

test plan:
 - Have a course with a teacher and a student.
 - Have three assignments each worth 10 points, one muted (Assignment 1)
   and two not muted (Assignment 2 and Assignment 3).
 - As the teacher, grade the student 6/10 for Assignment 1 and 10/10
   for Assignment 2. Do not grade the student for Assignment 3.
 - As the teacher, make an API call to get the grades for the student:

   GET /api/v1/courses/:course_id/users/:student_id?include[]=enrollments
   Authorization: Bearer the-teacher-api-token

   Verify the grades on the enrollments in the response include the
   unposted_current_score, unposted_final_score,
   unposted_current_grade, and unposted_final_grade keys. Verify the
   unposted_current_score is 80.00, the unposted_final_score is 53.33,
   the unposted_current_grade is null, and the unposted_final_grade is
   null.

 - As the student, make an API call to get the grades for yourself:

   GET /api/v1/courses/:course_id/users/:student_id?include[]=enrollments
   Authorization: Bearer the-student-api-token

   Verify the grades on the enrollment in the response do not include
   the unposted_current_score, unposted_final_score,
   unposted_current_grade, or unposted_final_grade keys.

Change-Id: Ibd14d0ed0a246f1cb8d16d7bc9ba0beb2680cba9
Reviewed-on: https://gerrit.instructure.com/137213
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
Tested-by: Jenkins
QA-Review: Indira Pai <ipai@instructure.com>
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Product-Review: Matt Goodwin <mattg@instructure.com>
2018-01-09 17:47:51 +00:00
Steven Burnett 6d26a8d4b5 add sections tool tip to index page
fixes COMMS-584

Test Plan:
- With section specific announcements turned on
- Go to the announcements index page
- If you don't have any announcements create some
  that are both section specific and some that aren't
- go back to the index page
- hover over the all sections toolip/the tool tip that
  says the count of the amount of sections
- notice it states how many users it sent to (for all sections)
  and how many it sent to for section specific

Change-Id: I74e37512f6244a32cfd2fdb90bce63c85e42be26
Reviewed-on: https://gerrit.instructure.com/136867
Reviewed-by: Venk Natarajan <vnatarajan@instructure.com>
Tested-by: Jenkins
QA-Review: Landon Gilbert-Bland <lbland@instructure.com>
Product-Review: Steven Burnett <sburnett@instructure.com>
2018-01-08 20:49:43 +00:00
Rob Orton 4c2aceed42 Revert "remove assignment stream items for students removed from assignment"
This reverts commit d64f44feeb.

Change-Id: Ibfd2d633f03fc04e9091f2241c12247fa4624b27
Reviewed-on: https://gerrit.instructure.com/137135
Reviewed-by: Steven Burnett <sburnett@instructure.com>
Reviewed-by: Tyler Pickett <tpickett@instructure.com>
Reviewed-by: Venk Natarajan <vnatarajan@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
Tested-by: Rob Orton <rob@instructure.com>
2018-01-06 16:12:59 +00:00
Clay Diffrient 9f1bfa5adc Allow requests with use_verifiers=0 and jwt auth to not include verifiers
refs CORE-23

Test Plan:
  - Make a GET request to /api/v1/folders/XX/files?use_verifiers=0
    using a valid JWT
  - Verifiers should not be present in the URLs returned

Change-Id: I7111098fe1f1fd4f8d83d06bc19f0c819fb18a85
Reviewed-on: https://gerrit.instructure.com/136683
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: Tucker McKnight <tmcknight@instructure.com>
Product-Review: Clay Diffrient <cdiffrient@instructure.com>
2018-01-05 23:02:49 +00:00
Rob Orton 822d2becbc remove duplicate preload
Change-Id: If147691095e217b4a523a231a0bf9844b0eac2dc
Reviewed-on: https://gerrit.instructure.com/136905
Tested-by: Jenkins
Reviewed-by: James Williams  <jamesw@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
2018-01-04 15:19:02 +00:00
Rob Orton aca718826d add sis_pseudonym_id to enrollment object
fixes CORE-667
fixes GRADE-250
fixes GRADE-251

test plan
 - have a user with multiple sis pseudonyms
 - enroll user into courses through sis import
   using both sis_ids for different enrollments
 - each enrollment should return the correct
   pseudonym in grade export, Enrollment API,
   Section API, Submission API

Change-Id: I2693851b6b65fe8266b3a4e6e8cefc30e3d6f214
Reviewed-on: https://gerrit.instructure.com/136804
Tested-by: Jenkins
QA-Review: Anju Reddy <areddy@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2018-01-04 00:58:37 +00:00
Dan Minkevitch 72d695fdb7 Ignore inactive enrollments in overrides list for show page
Fixes ADMIN-311

Test Plan:
* Create an assignment that has an override
  assigned to two students
* Conclude one of the users
* Go back to the assignment page and notice it
  now only lists '1 Student'
* Go to the edit page and notice only the active
  user is listed for the override

Change-Id: I2f351afa4cf341bab1e3679d47cc032c8f729207
Reviewed-on: https://gerrit.instructure.com/131961
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2017-12-28 19:31:09 +00:00
Felix Milea-Ciobanu 9e94911210 add section specific logic to announcements + discussions api
refs COMMS-587 COMMS-588

test plan:
- enable the section specific announcements feature flag
- use a course with multiple sections and students across sections
- create some section specific announcements and regular announcements
- test the following API routes as both a teacher and a student
  - use your own course id as appropriate
  - as a teacher you should see all announcements in a course
  - as a student you should only see announcements specific to the
    sections that you are enrolled in

[Announcements API]
- /api/v1/announcements?context_codes=course_2
  - note that each announcement has a "is_section_specific"
    property with the correct value
- /api/v1/announcements?context_codes=course_2&include[]=sections
  - note that section specific announcements include correct section
- /api/v1/announcements?context_codes=course_2&include[]=sections&include[]=sections_student_count
  - note that section specific announcements' include sections with
    correct "student_count" property

[Discussion Topics API]
- /api/v1/courses/2/discussion_topics/?only_announcements=true
  - note that each announcement has a "is_section_specific"
    property with the correct value
- /api/v1/courses/2/discussion_topics/?only_announcements=true&include[]=sections
  - note that section specific announcements include correct section
- /api/v1/courses/2/discussion_topics/?only_announcements=true&include[]=sections&include[]=sections_studenst_count
  - note that section specific announcements' include sections with
    correct "student_count" property

Change-Id: Idbe68e2d72a538ce5d3701daf12287f3e8bb8d94
Reviewed-on: https://gerrit.instructure.com/136266
Reviewed-by: Steven Burnett <sburnett@instructure.com>
Tested-by: Jenkins
Reviewed-by: Venk Natarajan <vnatarajan@instructure.com>
QA-Review: Landon Gilbert-Bland <lbland@instructure.com>
Product-Review: Felix Milea-Ciobanu <fmileaciobanu@instructure.com>
2017-12-22 17:59:47 +00:00
wdransfield 56ad8ef51c Fix originailty report launches for group assignments
Fixes PLAT-2967

Test Plan:
- Create an assignment that uses file upload and
  a plagiarism detection tool. The assignment
  should be a group assignment. The tool should
  support LTI launches for originality reports.
- As one of the students in the group submit
  to the assignment (there should be at least
  two students in the group).
- Create an originality report for the submission/attachment
  combo.
- Verify that all originality report LTI launches work
  for all students in the group (submission details page,
  student grade page, gradebook, speedgrader).
- Verify the normal flow for originality reports works
  for non-group assignments.

Change-Id: I2b4002c58bd6438181559f8dab66a67ee0a8f8e2
Reviewed-on: https://gerrit.instructure.com/135974
Reviewed-by: Nathan Mills <nathanm@instructure.com>
Tested-by: Jenkins
QA-Review: August Thornton <august@instructure.com>
Product-Review: Weston Dransfield <wdransfield@instructure.com>
2017-12-20 19:52:57 +00:00
Andrew Butterfield b728bf4493 Add UI for LTI tool membership service access option
fixes PLAT-2936
fixes PLAT-2935

Test plan:
* Ensure that when the membership service feature flag is disabled the
  checkbox to allow it on the tool is not visible
* Ensure that when the memebership service feature flag is enabled the
  checkbox to allow it on the tool is visible and can be checked
* Ensure that the checked box persists and is checked when editing the
  tool

Change-Id: Ice75acbcdcc25548c8e9f5d53dd1b2256e8ff8ac
Reviewed-on: https://gerrit.instructure.com/134878
Tested-by: Jenkins
QA-Review: August Thornton <august@instructure.com>
Reviewed-by: Weston Dransfield <wdransfield@instructure.com>
Product-Review: Karl Lloyd <karl@instructure.com>
2017-12-20 18:12:34 +00:00
Jeremy Stanley 4b068cb480 fix "List courses for a user" permissions
test plan:
 - import a course via SIS Import
 - enroll a student in the course
 - as a student, set a nickname for the course
 - use the "List courses for a user" API endpoint as an
   account admin to list the student's courses
 - the SIS ID for the imported course should appear
   in the API results
 - the student's course nickname should not appear
   in the admin's API results

also
 - set up module items with completion requirements
 - complete some but not all of these as the student
 - as the account admin, call
     /api/v1/users/<student id>/courses
   with
     include[]=course_progress
   and ensure the student's module progress is included
   in the API results

fixes ADMIN-603

Change-Id: I0d45c780505dd4d4c325c5da5651334d8dd44c39
Reviewed-on: https://gerrit.instructure.com/135878
Reviewed-by: James Williams  <jamesw@instructure.com>
Tested-by: Jenkins
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2017-12-19 16:27:16 +00:00
Spencer Olson 7f00ee69ac return course score instead of assignment group score
Fixes a bug where assignment group scores could get returned instead
of overall course scores.

closes GRADE-695

Test Plan:
1. Create a course with at least one assignment group and one student.
2. The course will need to be set up such that the following command
   in a rails console returns the assignment group score:

   enrollment = Enrollment.find(<the-enrollment-id>)
   enrollment.scores.where(grading_period_id: nil).first

   This may take some trial-and-error during setup to get this result.
   My best guess would be that you need to do things in this order:
   create the course, enroll the student, add the new assignment group,
   delete the course score via a rails console, and then grade the
   student in the gradebook to trigger recreation of the course score.

3. Hit the following endpoint and verify you get the scores for the
   overall course score back, not the assignment group scores:

   /api/v1/courses/:course_id/users/:user_id?include[]=enrollments

Change-Id: I947aefe5e9c76f20d470ae1d9471c62b8a0fa199
Reviewed-on: https://gerrit.instructure.com/135456
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: Derek Bender <djbender@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2017-12-13 19:55:00 +00:00
James Williams f1b9ebc3fb add a limit for including conversation participant avatars
test plan:
* in the rails console, set a maximum limit for avatars
Setting.set('max_conversation_participant_count_for_avatars', '2')
* have a conversation with 2 recipients and
 one with more than 2 recipients
* calling /api/v1/conversations.json?include[]=participant_avatars
 should only include 'avatar_urls' for the conversation
 with 2 recipients

closes #COMMS-565

Change-Id: I63dfafbee2c44d2e70f8e7f1ecc7d42bb1559a26
Reviewed-on: https://gerrit.instructure.com/134629
Tested-by: Jenkins
Reviewed-by: Steven Burnett <sburnett@instructure.com>
QA-Review: Venk Natarajan <vnatarajan@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
2017-12-11 17:29:29 +00:00
Jon Willesen f7afe556c5 make unread discussion topics have new_activity
Discussion topics can be unread even without replies if the user hasn't
looked at the topic yet. This is why it was showing up in the
new_activity filter. This makes the new_activity flag consistent with
the filter.

fixes ADMIN-564

test plan:
* In the student planner, unread discussion topics with no replies
should have the blue dot for new activity and be consistent with the new
activity filter in the api.

Change-Id: Iba112043c8544c4bc73fac5ecd579187969e9a57
Reviewed-on: https://gerrit.instructure.com/134441
Tested-by: Jenkins
Reviewed-by: Ed Schiebel <eschiebel@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Jon Willesen <jonw+gerrit@instructure.com>
2017-12-07 18:13:05 +00:00
Marc Alan Phillips 7e33b245a6 Allow Text Entry Online with Plagiarism Tools
closes PLAT-2927

Test Plan:
 - Under an assignment creation, select online
 - Click only the Text Entry box
 - The plagiarism Review section should appear
 - Save the submission
 - As a student, submit the assignment after entering text in the
   field
 - Submission should submit with the body to the TP

Change-Id: Ice010860a8bc89e0ead02c257baaad1bc4e91b23
Reviewed-on: https://gerrit.instructure.com/134430
Tested-by: Jenkins
Reviewed-by: Weston Dransfield <wdransfield@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Karl Lloyd <karl@instructure.com>
2017-12-06 22:22:25 +00:00
Felix Milea-Ciobanu d64f44feeb remove assignment stream items for students removed from assignment
fixes COMMS-525

test plan:
- create two students in a course
- create an assignment and assign it to everyone
- notice the assignment notification on the dashboard activity view
  for each of the students
- edit the assignment by assigning it to only the first student
- check the first student's dashboard and notice the assignment
  notification is still there
- check the second student's dashboard and notice that the assignment
  notification is NOT still there

Change-Id: Id521e20ee3df91efe4b86b0a1677e791c4894dff
Reviewed-on: https://gerrit.instructure.com/133805
Reviewed-by: Venk Natarajan <vnatarajan@instructure.com>
Tested-by: Jenkins
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: Felix Milea-Ciobanu <fmileaciobanu@instructure.com>
2017-12-01 17:46:44 +00:00
James Williams 0fa1445b2c don't instantiate outcome alignments unnecessarily
apparently some courses have hundreds of thousands of them

refs #OUT-1611

Change-Id: I1416a8e03de11e7adcc148269689afe809c88592
Reviewed-on: https://gerrit.instructure.com/134241
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-11-30 20:51:48 +00:00
Keith Garner 1996c39274 add duedatecacher run when adhoc overrides changed via api
This patchset adds a call to DueDateCacher.recompute to
Assignment#run_if_overrides_changed! to avoid situations where either
cleanup callbacks are skipped or other due date changes that would
change the cached due date.

fixes GRADE-677

test plan:
 - Create a course with at least 2 users
 - Create an assignment and assign it to just 2 of the users
 - Visit the gradebook and note both students are able to be graded
 - Return to the assignment settings and remove one of those users
   from the override
 - Visit the gradebook and note only the still assigned student is
   able to be graded

Change-Id: I3cedd13ecedcc1cb785e2a70589fd79bef48802d
Reviewed-on: https://gerrit.instructure.com/134028
Tested-by: Jenkins
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2017-11-30 20:07:24 +00:00
Jeremy Stanley e52032d956 blueprint: don't undelete deleted/unlocked items on sync
- have files, quizzes, learning outcomes, outcome groups,
   and modules in a blueprint course. no items should be
   locked.
 - ensure outcome group changes appear in the unsynced
   changes list correctly
 - sync to an associated course
 - delete items in the associated course
 - change the same items in the blueprint in some way
   (i.e., rename them)
 - re-sync
 - the deleted items should not be undeleted in the
   associated course
 - non-deleted outcome groups should not gain a link
   to a deleted outcome (that shows only in the left pane)

fixes ADMIN-559

Change-Id: Ibe8842353760260b050a6330cd27df986b17b5e7
Reviewed-on: https://gerrit.instructure.com/133374
Tested-by: Jenkins
Reviewed-by: James Williams  <jamesw@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2017-11-30 15:53:54 +00:00
Cody Cutrer 0e5010d2fb Revert "Partially revert "Show cross-shard assignments in the calendar""
This reverts commit 30ab514351.

Change-Id: I5cab9a7edf9c0b0c0ba79e72d3fa239d9fb61204
Reviewed-on: https://gerrit.instructure.com/133875
Tested-by: Jenkins
Reviewed-by: Rob Orton <rob@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
2017-11-28 20:31:07 +00:00
Mysti Sadler 4e1a29de82 Graded discussions with new replies show up in new activity API
fixes ADMIN-105

Test plan
- Create a graded discussion
- As user 1 (probably a teacher), add a comment to the discussion
- As user 2 (probably a student), go to
  /api/v1/planner/items?filter=new_activity
- Ensure the graded discussion shows up in the API
- Ensure it doesn't show up twice in /api/v1/planner/items (or
  anywhere else it shouldn't)

Change-Id: I21a88a4e5181e2a43ce5d03cf92230d3107d5093
Reviewed-on: https://gerrit.instructure.com/132096
Tested-by: Jenkins
Reviewed-by: Dan Minkevitch <dan@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Pert Eilers <peilers@instructure.com>
2017-11-27 17:56:21 +00:00
Cody Cutrer 30ab514351 Partially revert "Show cross-shard assignments in the calendar"
fixes CORE-665

This reverts commit a17e7be824.

Change-Id: I407bced8dc408331098d9e5eb35d978955eb3f06
Reviewed-on: https://gerrit.instructure.com/133454
Tested-by: Jenkins
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Reviewed-by: Rob Orton <rob@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2017-11-21 19:23:26 +00:00
Jon Willesen 764ffac0d8 remove html_url for planner notes
It used to have an api url, which is the wrong thing to do. We don't
currently have a real html url for planner notes, so just omit the
field.

fixes ADMIN-533

test plan:
* planner todo items should not be links in the todo list

Change-Id: I8d65bfcfaeeb9fe9f89b05f3520437c5f121d4a9
Reviewed-on: https://gerrit.instructure.com/132675
Reviewed-by: Ed Schiebel <eschiebel@instructure.com>
QA-Review: Jeremy Stanley <jeremy@instructure.com>
Tested-by: Jenkins
Product-Review: Pert Eilers <peilers@instructure.com>
2017-11-20 22:13:01 +00:00
Simon Williams 33ef316052 fix issue with moderating outstanding quiz submissions
fixes QO-281

test plan:
- have a quiz with a short time limit
- have a student start a quiz and not finish it
- as a teacher, go to the moderate page
- click on "Check on outstanding quiz submissions"
- it should show the users name correctly, and work if you submit

Change-Id: I40c36f41ca07536d700da9da9c9a7f9dd21b6b35
Reviewed-on: https://gerrit.instructure.com/132829
Tested-by: Jenkins
Reviewed-by: Davis Lynn McClellan <dmcclellan@instructure.com>
QA-Review: Michael Hanks <mhanks-c@instructure.com>
Product-Review: Simon Williams <simon@instructure.com>
2017-11-16 20:53:52 +00:00
Venk Natarajan 3b666a93ba Include inactive users in group members.
In the groups index page for a course, we were not displaying
inactive users.  This caused problems when a student tried to
sign up for a full group that had inactive users in it, since
we told them that the group had spaces.

This change now displays inactive as well as active users, so
the student is now told that the group is full.  It is up to
the teacher to remove such students if they see fit.

Fixes COMMS-4

Test plan:
* Have a course with some self sign-up groups, with a limit.
* Fill the group up to the limit with active students, making
  sure you have a student left that is not in the group.
* Now, deactivate one of the students in the group.
* With the student *not* in the group, act as that user.
* Go to the "people" page for the course and click on groups.
* Now the student will be told that the group is full.
* Become the teacher again.
* Go to the group in question, the inactive users in it should
  be marked as such.

Change-Id: If54df1e22779a5c0a4a97ed79245e7d5a6d76713
Reviewed-on: https://gerrit.instructure.com/131728
Tested-by: Jenkins
Reviewed-by: Felix Milea-Ciobanu <fmileaciobanu@instructure.com>
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Matt Goodwin <mattg@instructure.com>
2017-11-08 18:21:15 +00:00
Rob Orton 1d66f26072 Revert "remove deprecated sis_login_id"
fixes CORE-589

This reverts commit 2137329872.

Change-Id: Ic3cba1fbf51bc21f4d1d26e07772b3db9bbb90cb
Reviewed-on: https://gerrit.instructure.com/131885
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
2017-11-06 17:53:57 +00:00
Rob Orton 4cec36bb6f add sis_import_id to terms api
closes CNVS-13382

test plan
 - import terms through SIS
 - create terms manually
 - GET /api/v1/accounts/:account_id/terms
   should have sis_import_id if you have
   permissions to see it
 - check that sis_import_id is in api docs

Change-Id: I86b11910149b43280698460fb2967b9e385c0ce3
Reviewed-on: https://gerrit.instructure.com/29946
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
2017-11-06 17:53:10 +00:00
Rob Orton b92026cd54 add sis_import_id to courses api
refs CNVS-10408

test plan
 - import courses through SIS
 - create courses manually
 - /api/v1/accounts/self/courses should have
   sis_import_id if you have permissions to see it
 - check that sis_import_id is in api docs

Change-Id: Ia4537fb8856dcbc831f707350bd8c6b762673d79
Reviewed-on: https://gerrit.instructure.com/29940
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins
Product-Review: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
2017-11-03 20:49:33 +00:00
Venk Natarajan 625da046e6 Show availability time for group ungraded discussions.
The required delayed post and lock at times for group topics aren't
filled in in the database, so this fetches them and sticks them
in the response.

This wasn't a problem for *graded* discussions because the frontend
logic checks the associated assignment first for a delayed posting
time.

Fixes COMMS-194

Test Plan:
* Have a course with groups.
* Make a group discussion not available until the future.
  Make sure it is not graded.
* Go to the group discussions page and verify that it the
  "not available until" phrase is now shown.

Change-Id: I8aa961ffb5590d5d31cea34ef1f9d959386d55af
Reviewed-on: https://gerrit.instructure.com/131539
Tested-by: Jenkins
Reviewed-by: Steven Burnett <sburnett@instructure.com>
QA-Review: Felix Milea-Ciobanu <fmileaciobanu@instructure.com>
Product-Review: Venk Natarajan <vnatarajan@instructure.com>
2017-11-03 15:52:23 +00:00
Mark Valentine 5cd7892888 add criterion_use_range and rating long_description to api
Fixes: PFS-9067

Test Plan:

API ENDPOINT: api/v1/courses/[course_id]/assignments/[assignment_id]

1) Verify that legacy rubrics return correct default values.
   - In an old rubric (created prior to September 2017) verify -
     a) criterion_use_range is false.
     b) rating.long_description is ""
2) Turn on criterion_use_range in account settings.
   - Add a rubric with a criterion that uses ranges, and one that
     does not.
   - Verify criterion_use_range is correct in api for rubric.
3) Add a long description to a criterion.
   - Verify long description shows up in the api endpoint.

Change-Id: I8d57a98a145f784f50c8d0bfbbabaed0cf90db8d
Reviewed-on: https://gerrit.instructure.com/131515
Tested-by: Jenkins
Reviewed-by: Matt Berns <mberns@instructure.com>
QA-Review: Aiona Hernandez <ahernandez@instructure.com>
QA-Review: Andrew Porter <hporter-c@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2017-11-02 15:26:51 +00:00
James Williams 5e803ac9ca fix api endpoint url translation for untitleized page links
test plan:
* create an object with html content
 (e.g. a discussion topic)
* in the rce editor for the object
 use the "create a link to a new page" to create a
 link to a new wiki page with a title with a space
 or another special character
* after saving, follow the link to create the new page

* use the api to view the html content for the object
(e.g. /api/v1/courses/X/discussion_topics/Y/)
* the "data-api-endpoint" added onto the wiki page
 link should give a working api url to fetch
 the wiki page data

closes #CNVS-39817

Change-Id: I79a035131c2f45560db96880056140f688b09dd0
Reviewed-on: https://gerrit.instructure.com/129956
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Tested-by: Jenkins
Product-Review: James Williams  <jamesw@instructure.com>
2017-10-31 20:00:04 +00:00
Jeremy Stanley 1501becc5d API/data model for linking planner notes to objects
test plan:
 - render API docs
 - test creating planner notes linked to learning objects
   via linked_object_asset_string
 - ensure you are not able to create more than one planner note
   linked to a single learning object
 - ensure the API results come back correctly
   and the linked_object_url for each type works

(note: I (re)created wiki page links by id to avoid having
 to instantiate the linked object in order to return a link,
 for performance reasons which will become more important
 once we start joining planner notes on index pages)

closes ADMIN-262

Change-Id: I1b5643cab75fb7fd5724d21837bcc6068ea5687f
Reviewed-on: https://gerrit.instructure.com/129557
Reviewed-by: Mysti Sadler <mysti@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Tested-by: Jenkins
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2017-10-31 16:11:41 +00:00
Jacob Fugal 470e06bbde don't break on 201 Created response from S3
fixes RECNVS-1

also, don't store the attachment.thumbnail_url in the
user.avatar_image_url; the former is potentially time-limited (and also
possibly too long to fit in the field), while the latter is intended for
deferred use.

test-plan:
- do not have inst-fs enabled
- have S3 storage configured, not local storage
- regression test uploads from:
  - user and course files areas
  - course image picker in course settings
  - course content import
  - user avatar image picker
  - rich content editor
  - conversations
  - submissions

Change-Id: I0f194873977b621e1cab8413843ffe0345a34b1b
Reviewed-on: https://gerrit.instructure.com/129587
QA-Review: Collin Parrish <cparrish@instructure.com>
Tested-by: Jenkins
Reviewed-by: Andrew Huff <ahuff@instructure.com>
Product-Review: Jacob Fugal <jacob@instructure.com>
2017-10-27 19:49:48 +00:00
Daniel Lee 5fdcb361a6 Add canvadoc_document_id to submissions endpoint
Fixes RD-4470

Test plan:
- Hit /api/v1/courses/{course_id}/assignments/{assignment_id}/submissions
- The json returned should include 'canvadoc_document_id'

Change-Id: I3cbd94e0121d9a22e7d2efe616e051a3e41fb1e7
Reviewed-on: https://gerrit.instructure.com/128867
Tested-by: Jenkins
Reviewed-by: Derek Bender <djbender@instructure.com>
Reviewed-by: Aaron Shafovaloff <ashafovaloff@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
2017-10-16 18:15:25 +00:00
Tyler Pickett fdd2eaf82e Enable viewing of CalendarEvents cross shard
Fixes: CNVS-37970

Test Plan:
- Enroll a user into a course across a shard boundary
- Add a calendar event (not assignment) for the course
- Log in on the user's home shard and view their calendar
- The event from the cross shard course should appear in the calendar

Change-Id: I3addb678c0504dfad885f11885da61b1a1d769ef
Reviewed-on: https://gerrit.instructure.com/126909
Reviewed-by: Rob Orton <rob@instructure.com>
Tested-by: Jenkins
QA-Review: Rob Orton <rob@instructure.com>
Product-Review: Tyler Pickett <tpickett@instructure.com>
2017-10-11 21:53:37 +00:00
Tyler Pickett a17e7be824 Show cross-shard assignments in the calendar
Refs: CNVS-37970

Test Plan:
- Enroll a user in a course in a trusted shard that is not their home
- Create a dated assignment (NOT calendar event) in the cross-shard course
- Create an un-dated assignment (NOT calendar event) in the cross-shard
  course
- View that user's calendar, the assignments should show up in the
  calendar as well as the undated assignments area

Change-Id: I0c5eaa80fc78355e67a0150b760516997e66d0d9
Reviewed-on: https://gerrit.instructure.com/123495
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins
Reviewed-by: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
Product-Review: Tyler Pickett <tpickett@instructure.com>
2017-10-11 21:53:33 +00:00
James Williams 53a1fd0761 master courses: return restriction info in course api
test plan:
* have a blueprint course
* /api/v1/courses/X should return the blueprint restrictions
 as documented in the courses api

closes #ADMIN-70

Change-Id: I89a7ebc7e6329d66fada5377517f91b28b443ccf
Reviewed-on: https://gerrit.instructure.com/129275
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
2017-10-11 19:47:08 +00:00
Jeremy Stanley aa22031582 count available slots correctly in multicontext AGs
we need to subtract all the slots, not just the visible ones

test plan:
 - have an appointment group that covers two courses
   with 1 participant per slot
 - in one of these courses, reserve a slot as a student
 - ensure a student in the other course no longer sees that
   slot as available

fixes CNVS-36241

Change-Id: I88fae0ab1e94d75b5a5c10093502e0221453ee36
Reviewed-on: https://gerrit.instructure.com/127973
Tested-by: Jenkins
Reviewed-by: Mysti Sadler <mysti@instructure.com>
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2017-10-11 19:04:35 +00:00
James Williams 1cc49ae39f don't include test students in course section student count
test plan:
* enter student view in a course
* view the sections api index endpoint including
 the 'total_students' parameter
i.e. /api/v1/courses/X/sections?include[]=total_students
* the count should not include the test student

closes #CNVS-39676

Change-Id: Iaabd4ad7fc7368bb720d10badd87aaaa96a13680
Reviewed-on: https://gerrit.instructure.com/128043
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Tested-by: Jenkins
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
2017-10-11 18:50:07 +00:00
Rob Orton 2137329872 remove deprecated sis_login_id
fixes CNVS-39375

test plan
 - sis_login_id should not be returned

Change-Id: Icbb49d08052e1cb75c22d02ac0d9b52de14b60f6
Reviewed-on: https://gerrit.instructure.com/126378
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
Tested-by: Jenkins
2017-10-10 03:19:10 +00:00
Michael Jasper dce0254975 Expose submission status in GraphQl Api
refactor rest api for submissions to use same logic and param names

closes CNVS-39777

test plan

- verify that `submissionStatus` and `gradingStatus` are
  available on a submission type query in GraphQL
- verify that the fields `submission_status` and
  `grading_status` are available on the REST enpoint for
  submissions by using the params
  `?include[]=submission_status&include[]=grading_status`

Change-Id: I6bcfdacc9e868b824d2c00082fdd52310c4869d0
Reviewed-on: https://gerrit.instructure.com/128714
Tested-by: Jenkins
Reviewed-by: Cameron Matheson <cameron@instructure.com>
QA-Review: Collin Parrish <cparrish@instructure.com>
Product-Review: Michael Jasper <mjasper@instructure.com>
2017-10-09 17:56:16 +00:00
Rob Orton 1ca32c4057 add user object to sis import api
fixes CNVS-39635

test plan
 - sis import api should return user

Change-Id: If54a50a646c8b73ebf122885d53717572930dda7
Reviewed-on: https://gerrit.instructure.com/128018
Tested-by: Jenkins
Reviewed-by: James Williams  <jamesw@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2017-10-06 19:41:18 +00:00
Jacob Fugal 328c1648dd request thumbnails from instfs when enabled
fixes CNVS-39058, CNVS-39061

Canvas doesn't need to store any additional metadata about instfs
thumbnails; the only metadata it uses about its legacy generated
thumbnails is the url (whether local or s3). we can just generate
thumbnail urls direct to instfs and forgo the thumbnail model
altogether.

test-plan:
- enable instfs
- upload an image to Canvas
- the uploaded image should have a thumbnail in the UI same as a
  non-instfs file before this commit, but the thumbnail should be being
  read from instfs as well
- regression test thumbnails with instfs disabled

Change-Id: I03c21be89469238de7efa317753763834d41c86c
Reviewed-on: https://gerrit.instructure.com/128180
Reviewed-by: Jonathan Featherstone <jfeatherstone@instructure.com>
Tested-by: Jenkins
QA-Review: Collin Parrish <cparrish@instructure.com>
Product-Review: Jacob Fugal <jacob@instructure.com>
2017-10-03 20:00:08 +00:00
Keith Garner 374f4e408a fix mgp related N+1s in courses API
This patchset cleans up a few N+1s related to grading periods and
scores when the courses API is called for a student with
include=current_grading_period_scores and include=total_scores

fixes GRADE-300

test plan:
 - Have a few courses in an enrollment term with multiple grading
   periods set up.
 - Have a few courses in an enrollment term without MGP set up.
 - Register a student in those courses
 - As the student hit the courses API endpoint as:
   /api/v1/courses?include%5B%5D=needs_grading_count&include%5B%5D=syllabus_body&include%5B%5D=total_scores&include%5B%5D=term&include%5B%5D=permissions&include%5B%5D=current_grading_period_scores&include%5B%5D=favorites&include%5B%5D=tabs&per_page=99
 - Observe in the logs that grading period information and score
   information is only loaded once and not once per course

Change-Id: I5c2caf23bb7f51274a0a482ac8b4f3135e887cd6
Reviewed-on: https://gerrit.instructure.com/127447
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
QA-Review: Derek Bender <djbender@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2017-10-02 18:03:52 +00:00
Jacob Fugal 201d0d6b6a read from Location on 201 response from upload
fixes CNVS-39065

vs. success_url for legacy path or body of S3 redirect. for parity with
those old responses, we need to have the Location returned from the
capture include the `enhanced_preview_url` when appropriate.

not sure why, but when S3 gives you a redirect after successful upload,
the XHR follows the redirect happily. when inst-fs does, Canvas gives a
CORS error (at least during local development with docker). rather than
try and tell the difference and fix, it, we really shouldn't be
redirecting anyways. use the appropriate REST status and let the client
know that it wants to fetch from the Location explicitly. this explicit
request is happy without any CORS mangling.

test-plan:
 - have your local canvas connected to local inst-fs
 - go to <canvas>/files
 - upload a new file
 - upload should succeed, including adding the new file to the UI
 - repeat for any other place you can think of to upload a file in
   canvas, including:
   - avatars
   - gradebook
   - submissions
   - conversations
   - etc.

Change-Id: I312aaa17fd000843131c89023e827410cc5e13c6
Reviewed-on: https://gerrit.instructure.com/126012
Tested-by: Jenkins
Reviewed-by: Andrew Huff <ahuff@instructure.com>
QA-Review: Collin Parrish <cparrish@instructure.com>
Product-Review: Jacob Fugal <jacob@instructure.com>
2017-10-02 17:30:41 +00:00
Derek Bender 3efb71a162 fix quiz submissions serializer args
closes: GRADE-299

test plan:
- using the quiz submissions api, pass the following params:
  - include[]=submission
  - include[]=mobile_teacher_state
  - include[]=mobile_student_label
- the api should respond with submission objects that include both
  mobile_teacher_state and mobile_student_label

Change-Id: Ifd93cb84eee2ce142f17419eb06f4011026a22b7
Reviewed-on: https://gerrit.instructure.com/127416
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Taylor Wilson <twilson@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2017-09-29 16:43:16 +00:00
Spencer Olson e1d4b3ee4d add edited_at to submission_comments
closes GRADE-303

Test Plan:
1. Verify the migration succeeds, and verify you can also roll the
   migration back successfully. The rest of the steps will assume the
   migration has been run.
2. Create a course with an assignment. Submit to that assignment as a
   student, and comment on the submission as the student.
3. Make an API call to get the submissions and their comments for the
   assignment.

     GET api/v1/courses/:course_id/assignments/:id/submissions?
         include[]=submission_comments

   Verify the submission comments that are returned have an 'edited_at'
   key on them. The value of 'edited_at' should be nil for all comments.

4. Enter a rails console and update the 'comment' attribute on the
   submission comment.

   assignment = Assignment.find(<your-assignment-id>)
   student = User.find(<your-student-id>)
   submission = assignment.submissions.find_by(user_id: student)
   comment = submission.submission_comments.first
   comment.update!(comment: "i am updating the text on the comment!")

5. Make an API call to get the submissions and their comments for the
   assignment.

     GET api/v1/courses/:course_id/assignments/:id/submissions?
         include[]=submission_comments

   Verify the value of the 'edited_at' attribute for the comment you
   adjusted in step 4 is a timestamp.

Change-Id: I4c91fdfd7a9cef194f08a2d086601fb827a50095
Reviewed-on: https://gerrit.instructure.com/127476
Tested-by: Jenkins
Reviewed-by: Derek Bender <djbender@instructure.com>
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Rob Orton <rob@instructure.com>
2017-09-29 14:54:03 +00:00
wdransfield 4820e9f8fb LTI User show endpoint
Closes PLAT-2819

Test Plan:
- Create a tool consumer profile associated with a
  developer key that uses the newly added `vnd.Cavnas.User`
  service.
- Install a plagiarism detection tool that uses the
  new `vnd.Cavnas.User` service.
- Create an assignment in a course with students and
  associate it with the tool.
- Make a request to `/api/lti/users/:user_id` with
  the id of one of the students and no access token.
  verify that you get a 401
- Make the same request but this time include an
  access token. Verify the student details is returned.
- Make the same request but use the user's `lti_context_id`.
  Verify that the user details is still returned.
- Remove the tool from the assignment and save the change.
- Make the same request and verify a 401 is returned.
- Verify the behaviors outlined above work when the tool
  is installed in a course, account, and root account.

Change-Id: I81bd1446729d194f7f3910bca05638e57e5091d1
Reviewed-on: https://gerrit.instructure.com/126931
Tested-by: Jenkins
QA-Review: August Thornton <august@instructure.com>
Reviewed-by: August Thornton <august@instructure.com>
Reviewed-by: Nathan Mills <nathanm@instructure.com>
Product-Review: Weston Dransfield <wdransfield@instructure.com>
2017-09-28 15:41:12 +00:00
Jacob Fugal 594bdff748 inst-fs upload preflight (and capture fixes)
fixes CNVS-38591

when the inst-fs service is enabled, generate a preflight response
tailored for inst-fs instead of for S3. the service will then receive
the POSTed file data, generate it, and ping Canvas at the embedded
capture URL. compatible with existing Canvas UI.

along the way, some cleanup refactoring in api_attachment_preflight:
* instead of taking submission_context and inferring a folder from
  that, have the submission API be responsible for determining the
  folder and then just specify it. note that the folder inference was
  the only use of submission_context, the submission API was the only
  caller of api_preflight_json to specify submission_context, and the
  folder option we took over was previously both broken and unused.
* simplify the remaining folder inference code. if a folder is
  specified by the code (vs. the user in params), assume they have
  necessary access (the :manage_contents permission would fail for a
  student making a submission)
* correctly abort if params[:on_duplicate] is invalid. before, if the
  UI provided an explicit but invalid value, it would cause a double
  render error.
* inline process_attachment_params for update, and skip it on
  preflight. the UI never provides any of the possible params but
  display_name for preflight, which is then ignored from the
  process_attachment_params result because it's treated separately

TODO: tests
* InstFS.upload_preflight_json
* api_attachment_preflight:
  - uploading a file to a submission (submissions_api#create_file) when the
    submissions_folder feature is enabled stores the file in the user's
    submissions folder
  - student uploading a file to a submission is not blocked by permissions
  - user with :manage_contents permission on a folder is not blocked when
    uploading to that folder
  - user without :manage_contents permission on a folder is blocked when
    attempting to upload to that folder
  - no double render error on on_duplicate=invalid
  - updates to lock_at, etc., on a file (via files#api_update) stick
* files#api_capture:
  - reject if over quota and not flagged quota_exempt
  - attachment.locked based on usage rights settings
  - attachment.handle_duplicates
  - content migration success callback triggered
* InstFS.authenticated_url:
  - includes iat claim
  - expiration is a timestamp

test-plan:
  inst-fs upload happy path:
  - have inst-fs service running, have canvas configured to be able to
    find and share a secret with it, and enable the inst-fs plugin setting
  - go to the files area, or a discussion, or a conversation, etc., and
    upload a file.
  - the file should be successfully uploaded
    - NOTE: known issue, there seems to be a race condition in the service
      responding 201 Created with a Location before Canvas is ready to
      respond to that Location. This will make the upload appear to fail.
      But if you refresh the page, the file should be present. This race
      condition will be fixed in a later commit; it has already been filed
      as a separate bug.
  - attempt to download/preview the file
  - download/preview should work, and should be served from inst-fs

  quota enforcement:
  - configure a course to have a quota
  - select a file that should exceed that quota when uploaded
  - bypassing the canvas UI, access the preflight endpoint directly
    while providing the true size; preflight should fail
  - access the preflight endpoint directly while providing a false size
    that would fit inside the quota; preflight should succeed
  - attempt to POST the file to the returned upload_url with the
    returned upload_params; the upload should fail

  locking pending usage rights:
  - configure the account to lock files without usage rights
  - upload a file
  - the newly created file should be locked
  - assign usage rights to the new file
  - it should unlock

  path collisions:
  - upload a file to a folder
  - upload a distinct file but with the same filename to the same folder
  - should be prompted to rename or overwrite
  - select rename; the newly uploaded file should have the filename
    modified to avoid the collision
  - repeat, but selecting overwrite; the filename should now refer to
    the new file, and the old file should not be accessible in the UI

  non-inst-fs unharmed:
  - disable the inst-fs plugin setting
  - do general regression tests on file uploads (whether S3 or local
    storage)

Change-Id: I2bff1e3c31a3ed0955c29e677a422b7149253318
Reviewed-on: https://gerrit.instructure.com/124929
Tested-by: Jenkins
Reviewed-by: Andrew Huff <ahuff@instructure.com>
QA-Review: Collin Parrish <cparrish@instructure.com>
Product-Review: Jacob Fugal <jacob@instructure.com>
2017-09-27 16:35:40 +00:00
wdransfield cee4334cd0 Prioritize new plag platform settings
Closes PLAT-2848

Test Plan:
- Enable the vericite plugin
- Create an assignment and associate it with a plag detection tool
- Set the visibility option to 'after grading'
- save the assignment
- edit the assigment and verify the visibility optoin is still
  set to 'after grading'

Change-Id: Ic5a9f4ef8088661a1ff36d387c6496adaf4177be
Reviewed-on: https://gerrit.instructure.com/126816
Reviewed-by: Nathan Mills <nathanm@instructure.com>
Tested-by: Jenkins
QA-Review: August Thornton <august@instructure.com>
Product-Review: Weston Dransfield <wdransfield@instructure.com>
2017-09-25 20:35:15 +00:00
Matt Taylor 0f08fe9d97 invalidate cached override list when creating new override
fixes GRADE-174

Test Plan:
  1. Create a course with at least one student
  2. Create a new assignment with no overrides
     - leave the due date blank
     - press Save and Publish
  3. Edit the assignment
     - add an override for one student
     - leave the due date blank
     - press Save
  4. Verify that the override is displayed correctly
     on the assignment page
     - first row titled "1 student"
     - second row titled "Everyone Else"

Change-Id: I096f890cee807d1c62e8dd5785c123055b5a1b24
Reviewed-on: https://gerrit.instructure.com/126560
Tested-by: Jenkins
Reviewed-by: Neil Gupta <ngupta@instructure.com>
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Pert Eilers <peilers@instructure.com>
2017-09-25 13:07:48 +00:00
Spencer Olson 546783a4e8 gradebook: show sis button when individual section is selected
Previoiusly, when viewing a section in the Gradebook as a teacher, if
the "Read SIS Data" permission wasn't enabled, there wasn't a
"Sync Grades" button. Now, the button is present in this scenario.

closes CNVS-39257

Test Plan:
1. Disable the "Read SIS Data" permission for teachers.
2. Create a course with a SIS ID.
3. Create two sections with SIS IDs.
4. Add a teacher to that course
5. Create an assignment.
6. Go to the assignments page and click the "sync to sis icon" next
   to the assignment name.
7. As a teacher, go to the gradebook and notice the Sync Grades button.
8. Select an individual section, and notice there is still a Sync Grades
   button.

Change-Id: I308e5b4eb23b18dc94cf8e5b6ea3f579e2ca9594
Reviewed-on: https://gerrit.instructure.com/126694
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Matt Goodwin <mattg@instructure.com>
2017-09-22 16:49:24 +00:00
Rob Orton ac91aee507 safely delete attachments
when deleting attachments permanently this will
now also delete the s3object. this also makes it
avoid FK error when there are children attachments

fixes CNVS-39122

test plan
 - destroy_permanently_plus should work
 - download submission zip and it should work
 - download eportfolio export and it should work

Change-Id: Ie995b9b3fac739e8aa3e9554c819b263cb67026b
Reviewed-on: https://gerrit.instructure.com/125236
Tested-by: Jenkins
Reviewed-by: brian kirkby <bkirkby@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
2017-09-21 19:51:45 +00:00
James Williams 631e10800a remove submissions_folder feature flag
test plan:
* file upload assignment submissions should work
 and by default be copied to users'
 "submissions" folder

closes #CNVS-39333

Change-Id: I747775150a8b03aa305b96cc840354045256430c
Reviewed-on: https://gerrit.instructure.com/126229
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: David Tan <dtan@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
2017-09-20 19:33:03 +00:00
Jeremy Neander 05e3874188 include all students when updating overrides
fixes OUT-518

test plan:
 1. Select or create a course with three students.
 2. Create an assignment.
 3. Create an override for two of students.
 4. Deactivate one of the students from the override.
 5. Visit the Edit Assignment page for this assignment.
 6. Change the date of the override.
 7. Save the changes.
 8. Verify the date was changed successfully.

Change-Id: Ibc3d07035c0a10ff0f3010909a149a722f762601
Reviewed-on: https://gerrit.instructure.com/125590
Tested-by: Jenkins
Reviewed-by: Matt Taylor <mtaylor@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: Andrew Porter <hporter-c@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2017-09-20 15:33:43 +00:00
James Williams a130158b40 master courses: return associated course count in api call
also speed up some of the js_env data for sidebar

test plan:
* the api "Get blueprint information" endpoint
 (e.g. /api/v1/courses/1/blueprint_templates/default)
 for a blueprint template should
 return an 'associated_course_count'
* also the blueprint sidebar should work as before

refs #CNVS-38933

Change-Id: Iea8d8cc6d67f0b53212f271afdcb6cc93cace3a8
Reviewed-on: https://gerrit.instructure.com/124442
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Tested-by: Jenkins
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-09-20 13:31:18 +00:00
Rob Orton 9045278122 deprecate sis_login_id more
refs CNVS-39375

test plan
 - sis_login_id should not be returned
 - it should be returned for the account if the
   setting is set

Change-Id: I55c683d41ba7ff716de14df734b0b38f0877e7c5
Reviewed-on: https://gerrit.instructure.com/126052
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins
Product-Review: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
2017-09-19 19:46:26 +00:00
Rob Orton 281ec78309 return sis_user_id even if it is empty
fixes CNVS-39303

test plan
 - set integration_id on user with no sis_id
 - api should have sis_id attribute and
   integration_id

Change-Id: Ia5da25bb9959dbc79aaadd31ea8e8aec36146a23
Reviewed-on: https://gerrit.instructure.com/126053
Tested-by: Jenkins
Reviewed-by: Tyler Pickett <tpickett@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
QA-Review: Rob Orton <rob@instructure.com>
2017-09-19 17:09:14 +00:00
Matthew Berns 6e29b73a88 fix incorrect module sequence with autograded mastery path items
fixes OUT-996

test plan:
(I recommend having at least two browsers open, one logged in as a teacher
and one as a student, since you'll need to do a lot of switching)
- set up Canvas with CYOE, and ensure that the mastery paths
  setting is enabled on the account
- create at least 4 quizzes that will be autograded (e.g. only multiple
  choice or T/F questions)
- create some regular assignments that won't be autograded
- create some additional assignments. ensure that you don't assign the
  assignment to everyone, only assign them to 'Mastery Paths'
- set up mastery paths on the quizzes and assignments with the additional
  assignments, using at least three of each of the following setups for
  each:
  - single item in a path
  - two or more items in a path
- add at least 2 of the quizzes to two modules, as well as the
  assignments in their respective mastery paths
- add at least 2 more of the quizzes to other modules, and add assignments
  that are NOT part of their respective mastery paths
- as a student, go to the show page of the various quizzes and original
  assignments
- they should all indicate that the next mastery path is currently locked
- the 'Next' button should direct you to the course modules page
- as a teacher, go into course settings->Navigation and disable the
  modules tab
- as the student, visit the show pages again. The 'Next' button
  should be disabled, but the tooltip indicating that the path is locked
  should still appear
- as a teacher, re-enable the modules tab

- The behaviors below should be observed in all quizzes unless otherwise 
  noted, regardless of whether or not the following items in the 
  respective module are in the quizzes mastery paths
- as a student, take a quiz with a single item in the path, on the 
  show/results page you should see one of two things, depending on 
  whether or not CYOE finishes assessing the item before the page is rendered
   - it should state the next mastery path is currently processing, and
   direct users to the course modules page when clicked
   OR
   - if the next item in the module was part of the quizzes mastery path,
     it should show the newly unlocked item as being next. Otherwise, it 
     should simply show whatever is next in the module
- if you see the 'processing message above, refresh the page. by this point,
  the 'Next' button should reflect the 2nd case mentioned above
- as a student, take the quiz that has a choice of one or another item set
- when you reach the results page, the 'Next' button should indicate that
  the user needs to choose their next mastery path.
- clicking the button should take you to the path choose page
- select an item and return to the quiz show/results page.
- if the next item chosen was part of the module, the selected item should
  now be shown on the 'Next' button. Otherwise, it should be whatever is next
  in the module
- repeat the above steps for the originally created assignments. The only
  different behavior that should be observed is that we should never have
  to deal with a 'still processing' state, everything else should behave
  the same as it did for the auto-graded quizzes

Change-Id: I8eb59cbbbbb4ccb65d3daa149c606c0168790509
Reviewed-on: https://gerrit.instructure.com/125409
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
QA-Review: Leo Abner <rabner@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
Tested-by: Jenkins
2017-09-14 23:41:44 +00:00
James Williams 3a01c04c83 check for invalid rubric_assessment on submissions api
try to make sure that they're actually saving some data
but also don't explode on old invalid assessments

test plan:
* create an assignment with a rubric
* submit to the assignment

* use the assignment api show endpoint
(/api/v1/courses/X/assignments/Y)
and note the "rubric" object showing the criteria ids

* use the submissions api endpoint for
 "Grade or comment on a submission"
 and the "rubric_assessment" parameter
 to save a rubric assessment, using the criteria ids
 retrieved earlier
(e.g. "rubric_assessment[criteria_id][points]=5")

* try to use the same endpoint using
 invalid criteria ids
* should receive a useful error instead of creating
 a rubric assessment that can then break the
 submissions api

closes #OUT-1416

Change-Id: Iedfdca8e8d871dcf49e3de1773fc7d74abc225d3
Reviewed-on: https://gerrit.instructure.com/125511
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Andrew Porter <hporter-c@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
2017-09-13 19:22:00 +00:00
James Williams 5059ced17e master courses: fix outcome copying on selective export
test plan:
* have a blueprint course with an associated course
* add an outcome to the blueprint course
* it should copy over to the associated course

closes #MC-290

Change-Id: I7baf402be34541db55bc7291b6ad8d1d5c85aae6
Reviewed-on: https://gerrit.instructure.com/125039
Tested-by: Jenkins
Reviewed-by: Jon Willesen <jonw+gerrit@instructure.com>
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
2017-09-12 12:13:15 +00:00
Shahbaz Javeed 140f5ec425 add the anonymous_instructor_annotations attribute to assignment
closes GRADE-157

this is currently hidden behind an environment variable until DocViewer
starts consuming this attribute and decides to expose it via a feature
flag

test plan:
* Setup the environment variable ANONYMOUS_INSTRUCTOR_ANNOTATIONS to
  'true'
* Start Canvas
* Go to create an assignment and verify that it contains a checkbox to
  anonymize instructor annotations for the new assignment
* Verify this checkbox works
* Edit the newly created assignment and verify the checkbox labelled
  anonymize instructor annotations always accurately reflects the choice
  made when saving the assignment

* Remove the ANONYMOUS_INSTRUCTOR_ANNOTATIONS environment variable
* Restart Canvas
* Go to create an assignment and verify it no longer contains a checkbox
  to anonymize instructor annotations
* Edit the assignment you created earlier and verify it also no longer
  contains a checkbox to anonymize instructor annotations

Change-Id: Ia43dee5c45ccd151319380e673d70dc509512ca8
Reviewed-on: https://gerrit.instructure.com/123646
Tested-by: Jenkins
Reviewed-by: Derek Bender <djbender@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Matt Goodwin <mattg@instructure.com>
2017-09-06 19:47:21 +00:00
wdransfield 0e4b88cebd Check account chain for plag tool install
Closes PLAT-2816

Test Plan
- Create a sub account
- In the sub account create a course and
  install a plagiarism detection tool
- Create an assignment in that course and
  verify the tool can be associated with
  the assignment.

Change-Id: Ie4b6661c60f4832ba865658f28f8088fde00fa30
Reviewed-on: https://gerrit.instructure.com/125052
Tested-by: Jenkins
QA-Review: August Thornton <august@instructure.com>
Reviewed-by: Andrew Butterfield <abutterfield@instructure.com>
Product-Review: Weston Dransfield <wdransfield@instructure.com>
2017-09-06 19:37:47 +00:00
Spencer Olson 87e9bad41e add current grade to new gradebook history
closes GRADE-172

Test Plan:
1. Verify the New Gradebook History page results includes a "Current"
   grade column. The current grade should behave in the following ways:
   a) The points possible should be shown if the assignment is currently
      displaying grades as points and the current grade can be parsed as
      a number.
   b) If a current grade is not available (like if the submission has
      been destroyed), the current grade should be displayed as "N/A".

Change-Id: Ie1b753962eec10933be8a3be3829c1e2419a643f
Reviewed-on: https://gerrit.instructure.com/124834
Tested-by: Jenkins
Reviewed-by: Derek Bender <djbender@instructure.com>
Reviewed-by: Jeremy Neander <jneander@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Matt Goodwin <mattg@instructure.com>
2017-09-06 15:43:17 +00:00
Derek Bender 38ad7d4392 add mobile_student_label mobile_teacher_state API
This currently does not expose a dropped mobile_teacher_state because
that concept isn't currently exposed in any meaningful way.
See also: GRADE-16

This API is undocumented by design.

closes: GRADE-168

Test Plan
=========

Base Case
---------
- Given an assignment with at least one submission
- When fetching the submissions API:
  `/api/v1/courses/1/assignment/1/submissions`
- Then the fields `mobile_student_label` and `mobile_teacher_state`
  are not present

Mobile Student Label Use Cases
---------------
Resubmitted:
- Given a submission that is resubmitted
- When fetching the submissions API with the string
  'mobile_student_label' in the `include` query parameter:
  /api/v1/courses/1/assignment/1/submissions?include[]=mobile_student_label
- Then the submission JSON includes a field 'mobile_student_label'
  with the value 'resubmitted'

Missing:
- Given an assignment that is past due with no student submission
- When fetching the submissions API with the string
  'mobile_student_label' in the `include` query parameter
- Then the submission JSON includes a field 'mobile_student_label'
  with the value 'missing'

Late:
- Given an assignment that was submitted but was after the due date
- When fetching the submissions API with the string
  'mobile_student_label' in the `include` query parameter
- Then the submission JSON includes a field 'mobile_student_label'
  with the value 'late'

Submitted:
- Given an assignment that has as submission
- When fetching the submissions API with the string
  'mobile_student_label' in the `include` query parameter
- Then the submission JSON includes a field 'mobile_student_label'
  with the value 'submitted'

Unsubmitted:
- Given an assignment without a submission
- When fetching the submissions API with the string
  'mobile_student_label' in the `include` query parameter
- Then the submission JSON includes a field 'mobile_student_label'
  with the value 'unsubmitted'

Mobile Teacher State Use Cases
---------------
Excused:
- Given an assignment with an excused submission
- When fetching the submissions API with the string
  'mobile_teacher_state' in the `include` query parameter:
  /api/v1/courses/1/assignment/1/submissions?include[]=mobile_teacher_state
- Then the submission JSON includes a field 'mobile_teacher_state'
  with the value 'excused'

Needs Review:
- Given a quiz with an essay question that needs review and student
  submission for said quiz
- When fetching the submissions API with the string
  'mobile_teacher_state' in the `include` query parameter
- Then the submission JSON includes a field 'mobile_teacher_state'
  with the value 'needs_review'

Needs Grading:
- Given an assignment submission that hasn't yet been graded
- When fetching the submissions API with the string
  'mobile_teacher_state' in the `include` query parameter
- Then the submission JSON includes a field 'mobile_teacher_state'
  with the value 'needs_grading'

Graded:
- Given an assignment submission that has been graded
- When fetching the submissions API with the string
  'mobile_teacher_state' in the `include` query parameter
- Then the submission JSON includes a field 'mobile_teacher_state'
  with the value 'graded'

nil:
- Given an assignment submission that has been graded
- When fetching the submissions API with the string
  'mobile_teacher_state' in the `include` query parameter
- Then the submission JSON includes a field 'mobile_teacher_state'
  with the value null

Also test with quiz submission

Change-Id: Icbc784b47ecc3baecb770703a9515b52b326e347
Reviewed-on: https://gerrit.instructure.com/123007
Reviewed-by: Spencer Olson <solson@instructure.com>
Tested-by: Jenkins
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
QA-Review: Taylor Wilson <twilson@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2017-08-31 23:18:14 +00:00
brian kirkby 9894e81ee2 user input titles for media are now exposed as <p> title text
fixes CNVS-36185

test plan:
- record/upload video file through tinymce "Record/Upload Media" button
- before recording/uploading the the media, enter text into the Title field
- finish recording/uplading the media and the dialog will dismiss adding
  your recording to tinymce
- switch view to HTML edit mode and verify that the alt tag has your title
- save the comment/page/whatevs
- refresh the page and inspect the thumbnail button
- verify the alt text is included on the anchor tag
- edit the page/comment/whatevs and verify the alt text carries into the edit
- rejoice!

Change-Id: I5ab76688315c668b3c0fe1d06f7ff642650fc4e0
Reviewed-on: https://gerrit.instructure.com/122074
Tested-by: Jenkins
Reviewed-by: Brent Burgoyne <bburgoyne@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: brian kirkby <bkirkby@instructure.com>
2017-08-30 22:09:02 +00:00
wdransfield cfd1295bee Add originality report visibility settings
Closes PLAT-2779

Test Plan:
- Create an assignment with a plagiarism detection tool
  associated. Set the 'Show originality report to students'
  to 'Never'.
- Create an originality report for a submission and
  verify it is not visible to the student on the submission
  details page or grades summary page. It should still be
  visible to the teacher.
- Edit the assignment and change the visibility option to
  'After the due date'. Also set the due date to a date/time
  in the past.
- Verify the originality report is now visible to the student in
  the submission details page and grade summary page (note that
  you may need to flush redis).
- Create a new assignment associated with a plagiarism detection
  tool and set the visibility option to 'After the assignment
  is graded'.
- Create a submission and an originality report.
- Verify that the student cannot view the originality report
  until the assignment has been graded by the teacher.
- Edit the assignment and change report visibility
  to Immediately. Verify that the student can still
  view the originality report.

Change-Id: I35a4e87275577b5b5d9cc0c1ce3501a5ae048a79
Reviewed-on: https://gerrit.instructure.com/123766
Reviewed-by: Andrew Butterfield <abutterfield@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Tested-by: Jenkins
Product-Review: Jesse Poulos <jpoulos@instructure.com>
2017-08-30 20:18:23 +00:00
James Williams a0fbb1ab3d cache progression and item visibility data on courses
so we don't constantly refetch the same data when running
progressions

test plan:
* module progressions with assignment overrides
 should work as before

closes #CNVS-38735

Change-Id: If85cb5f6d736eaebdcd84a5e16fcf1b243ec42aa
Reviewed-on: https://gerrit.instructure.com/123268
Tested-by: Jenkins
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
2017-08-24 16:46:26 +00:00
Gary Mei 242dd3e7c9 show points possible in gradebook history
closes GRADE-171

There are some edge cases where if the assignment went from points
based to non-points based and vice versa, grades will not show up
with points possible or they show up as the non-points based type
with a points possible. Examples are "100" alone and "A/100".

Test Plan
1. Grade some points based assignments.
2. Grade some non-points based assignments.
3. Check the history page; the points based assignments show a points
    possible that the assignment was out of. The non-points based
    assignments do not show points possible.
4. Change the points possible on a points based assignment.
5. Re-grade that assignment.
6. Check the history page; the new entries from Step 5 show up with
    the new points possible. The old entries from before Step 4 show
    with the old points possible.

Change-Id: Id7a4e20622daf021047e378815dea2f8ed6ace9c
Reviewed-on: https://gerrit.instructure.com/122817
Reviewed-by: Brian Park <bpark@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Tested-by: Jenkins
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Matt Goodwin <mattg@instructure.com>
2017-08-23 16:12:07 +00:00
Nick Houle a757d32301 Allow assignment to save w/ post_to_sis unchecked
Fixes: SIS-2912 and SIS-2915

Test plan:
- Enable SIS feature options
- Navigate to a course
- Confirm you can create an assignment with post_to_sis checked
- Confirm you can create an assignment without post_to_sis
  checked
- Edit the assignment
- Check post_to_sis and add a due date for Everyone Else
- Confirm the assignment saves

Change-Id: I921343525713747e3a1fb7a0242ae62826c163f8
Reviewed-on: https://gerrit.instructure.com/122693
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
Product-Review: Brad Humphrey <brad@instructure.com>
Tested-by: Jenkins
QA-Review: Mark McDermott <mmcdermott@instructure.com>
2017-08-23 16:06:46 +00:00
Brent Burgoyne 1fa616ad0f include user full name in recipient search api
closes CNVS-38670

test plan:
- perform a search with the recipient search api
  (/api/v1/search/recipients)
- result should include full_name for users

Change-Id: I1ac89ac35448bf3ca68b754ca5fefb794e97d4e3
Reviewed-on: https://gerrit.instructure.com/122709
Tested-by: Jenkins
QA-Review: Tucker McKnight <tmcknight@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: Brent Burgoyne <bburgoyne@instructure.com>
2017-08-15 22:10:58 +00:00
Rob Orton 17cf65636c add 'restrict_enrollments_to_section_dates' to section api
fixes gh-1095

test plan
 - api should have restrict_enrollments_to_section_dates

Change-Id: I4b3eb38bafefe09c1fbaccc95cd4450c425a821a
Reviewed-on: https://gerrit.instructure.com/122770
Tested-by: Jenkins
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Tucker McKnight <tmcknight@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2017-08-15 18:28:44 +00:00
Simon Williams 3dadfdba88 add from_name to CommMessage api
closes CNVS-38354

test plan:
- hit the CommMessages api
- it should return `from` and `from_name`

Change-Id: Ie06a09e778a3f0098a1ae80cd5bfc237014715bb
Reviewed-on: https://gerrit.instructure.com/120316
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Simon Williams <simon@instructure.com>
2017-08-15 15:47:22 +00:00
Simon Williams 48b208c743 mark content imports as expired after X days
closes CNVS-38163

test plan:
- run Setting.set('content_migrations_expire_after_days', '1')
- create some content imports if you don't already have any
- ContentMigration.where(id: ContentMigration.last.id).
    update_all(created_at: 2.days.ago)
- visit the course content import page
- it should show as unavailable

Change-Id: I0491a1f1e292c0d9ded2ca202bd2cd997839a4bf
Reviewed-on: https://gerrit.instructure.com/118714
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Reviewed-by: Ryan Shaw <ryan@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Simon Williams <simon@instructure.com>
2017-08-15 03:29:19 +00:00
Simon Williams 3f1c585a2f shorten list of tags to rewrite to api urls
there is a measurable cost associated to this step of api content
transformation, so only run it on types of url attributes that might
actually need to be rewritten (ignore mathml href's)

fixes CNVS-38442

test plan:
- create a submission with a lot of <p> tags
- request it from the API
- performance should be better
- now create a link/image to something root-relative in canvas
- request it from the api
- it should come back as absolute

Change-Id: I21fc42db25e84e70a0d19db7dc271cfd46801ecb
Reviewed-on: https://gerrit.instructure.com/122400
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Tucker McKnight <tmcknight@instructure.com>
Product-Review: Simon Williams <simon@instructure.com>
2017-08-14 20:06:57 +00:00
Neil Gupta 6a7d79f063 add external tool url to submission json
fixes GRADE-75

test plan:
* Create a Quizzes.Next quiz
* Complete the quiz as 2 different students
* As the teacher, access the quiz in speed grader
* Adjust the fudge points for the first student
* Navigate to the second student and then back to the first student
* The quiz should still be visible

Change-Id: I4cd9d743f8a2c0c5b511f8f5615c8ed0edc81991
Reviewed-on: https://gerrit.instructure.com/122041
Reviewed-by: Brian Park <brian@siimpl.io>
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
Tested-by: Jenkins
QA-Review: Robin Kuss <rkuss@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2017-08-10 20:11:50 +00:00
Brian Park b4d8da3246 apply late policy in gradezilla frontend on change
closes: GRADE-133

Test Plan:
1. Navigate to gradezilla
2. Change some late policy values in settings cog menu
3. Observe that upon clicking 'Update' in the menu,
   all late and missing assignments are updated to show
   the new grades.
    - Late submission deductions are applied when enabled
    - Late submission deductions are updated when penalty
       value is changed
    - Late submission deductions persist when late
        deductions are turned off
    - Missing submission grades populated when policy set
       - Does not affect existing grades!
    - Missing submission grades unchanged when policy unset
    - Submissions in closed grading periods are unaffected
      by any late or missing policy changes

Change-Id: I6d0f759a1653ab58a749a9d7b0b95eff453a432c
Reviewed-on: https://gerrit.instructure.com/119148
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Tested-by: Jenkins
Reviewed-by: Neil Gupta <ngupta@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Matt Goodwin <mattg@instructure.com>
2017-08-09 17:27:05 +00:00
Mysti Sadler fd6495fd87 Add new_activity tag to planner item json
refs FALCOR-544
refs FALCOR-539

Test plan
- Create some grading items and some discussions/announcements
- Ensure they are not showing up with the new_activity flag
- in the API yet
- Ensure they do not show new_activity for submissions
- Grade or add feedback to the grading items
- Reply to the discussion/announcements
- Ensure that the api now does show new_activity

Change-Id: I8cf448c3296c21057aba9a9006b8efd8044986bd
Reviewed-on: https://gerrit.instructure.com/120658
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: David Mirabile <dmirabile-c@instructure.com>
Product-Review: Christi Wruck
2017-08-08 20:18:12 +00:00
wdransfield 3ee5623ce6 Add DeveloperKey/vendor code association for LTI2
refs PLAT-2708

Test Plan:
- Create a developer key through the Canvas UI and
  verify that a new vendor code text input is
  available and optional.
- Verify each of the following:
  * If a vendor is associated with a devloper key they
    must use one of the associated developer keys
    when registering.
  * If a vendor is associated with a developer key
    they may not register without using a
    developer key.
  * If a vendor is associated with a developer key
    they may not use a developer key other than
    one they are associated with to register.
  * If a vendor is not associated with a developer key
    they must register without a developer key.

Change-Id: I9c9974706f542c1442988634790656da1c407cb8
Reviewed-on: https://gerrit.instructure.com/118592
Reviewed-by: Cody Cutrer <cody@instructure.com>
Reviewed-by: Nathan Mills <nathanm@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Tested-by: Jenkins
Product-Review: Jesse Poulos <jpoulos@instructure.com>
2017-08-07 16:32:48 +00:00
Rob Orton e63627c74c add workflow_state to account_users
fixes CNVS-38231

test plan
 - delete an admin
 - admin should be gone from every where
 - admin should not have permissions to do stuff

Change-Id: I56c90a12b2be879c5d646c1ab6980693ff161673
Reviewed-on: https://gerrit.instructure.com/119220
Reviewed-by: Tyler Pickett <tpickett@instructure.com>
Tested-by: Rob Orton <rob@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2017-08-01 18:31:37 +00:00
James Williams 0638da43ba rails 5.1: all the rest of the specs
Change-Id: I2f4ca4a671a0e5bdcfbeb90b4714465ec34acc9f
Reviewed-on: https://gerrit.instructure.com/120891
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-07-31 19:48:51 +00:00
Andrew Katsanevas 04c576cb41 adds sorting to columns in courses and people search
adds sorting to the 'Courses' and 'SIS ID' columns of the Courses tab
and the 'Name' and 'Last Login' columns of the People tab
closes CNVS-33425

test plan:
- turn on Account Course and User Search feature flag
- go to /accounts/1/search/courses
- make sure Courses and SIS ID columns are clickable and sortable
- make sure that keyboard interaction and a11y looks good
- go to /accounts/1/search/people
- do the same for the Name and Last Login columns of the People tab

add sorting by Teacher column in courses

add sorting by first alphabetical teacher to
the 'Teacher' column of the Courses tab

test plan:
- turn on Account Course and User Search feature flag
- go to /accounts/1/search/courses
- make sure the Teacher column is clickable and sortable
- make sure that keyboard interaction and a11y look good

add sorting by Enrollments column in courses

add sorting by number of students enrolled to
the 'Enrollments' column of the courses tab

test plan:
- turn on Account Course and User Search feature flag
- go to /accounts/1/search/courses
- make sure the Enrollment column is clickable and sortable
- make sure that keyboard interaction and a11y look good

add sorting by Email and SIS ID columns in People

add sorting by 'Email' and 'SIS ID' columns of
'People' search tab

test plan:
- turn on Account Course and User Search feature flag
- go to /accounts/1/search/people
- make sure the Email column is clickable and sortable
- make sure the SIS ID column is clickable and sortable
- make sure that keyboard interaction and a11y look good

change UserPane to extend React.Component

change UserPane.js to be a class that extends React.Component
instead of using the old React.createClass

test plan:
- go to /accounts/1/search/people
- make sure the user search feature works the same as before

fix queries and lint warnings

fix SQL queries based on Tyler's suggestions
and fix some lint warnings throughout

test plan:
- go to /accounts/1/search/courses
- make sure sorts still work
- make sure queries are as correct and efficient
- go to /accounts/1/search/people
- do the same
- make sure Gergich is relatively happy

sort teachers in course and lint fixes

change course search so that teachers are sorted alphabetically
within a course (if it has multiple teachers). also a few lint
fixes here and there.

test plan:
- go /accounts/1/search/courses
- make sure that teachers are sorted within a course

Change-Id: I710878bd8ce98ba2fa4eb0c357721864df338939

add a sortable column for subaccounts to course search

add a new column to course search for subaccount
make it sortable like the other columns

test plan:
- turn on Account Course and User Search feature flag
- go to /accounts/1/search/courses
- make sure the correct subaccounts are showing
- make sure the subaccount column is clickable and sortable
- make sure that keyboard interaction and a11y look good

Change-Id: Ic8b8f258c27c16982a450286f6b715c9e04d425e

fix focus for keyboard navigation in Course Search sorting

prevent the CoursesList from rerendering sometimes on sorts
so that it doesn't lose focus

test plan:
- turn on Account Course and User Search feature flag
- go to /accounts/1/search/courses
- make sure keyboard interaction doesn't lose focus

Change-Id: I6236c92f6e71596d3dc38ef756e6ac808e9e99c2

fix invalid email sorting in User Search

fix the sorting of invalid emails in User Search
so that invalid emails (that don't show up) come last

test plan:
- turn on Account Course and User Search feature flag
- go to /accounts/1/search/courses
- make sure that invalid blank emails are sorted last

Change-Id: I56e6b1e57a1d494e7667c3cfc7b14a10976ec52e

fix invalid emails showing in User Search

fix User Search so that invalid emails don't display when
the "Load More..." button is pressed

test plan:
- turn on Account Course and User Search feature flag
- go to /accounts/1/search/courses
- have more than 10 users so "Load More..." is there
- click "Load More..." and make sure invalid emails don't display
for the newly-loaded users

Change-Id: I5bc23c616ae88da73f8632699c3bde1bffee994d

fix IE11 User Search sorting issue

fix User sorting in IE11 so that it doesn't go back to the
Courses tab when trying to sort

test plan:
- use IE11
- turn on Account Course and User Search feature flag
- go to /accounts/1/search/people
- make sure sorting works (doesn't take you to Courses tab)

Change-Id: I63491ca0b08812e21ed0ed2eb2f8a4bd1b791b89

fix add user in User Search bug where email doesn't show up

fix User Search so that when a user is added, their email
shows up without refreshing the page

test plan:
- turn on Account Course and User Search feature flag
- go to /accounts/1/search/people
- add a new user with a valid email
- make sure it displays before refreshing

Change-Id: Ib339bab3ea858c7c1ab18a6065ef4936941cb24b

remove debugger

Change-Id: Ibf88893ea35d795d8966c7580100ac135c8cfe93
Reviewed-on: https://gerrit.instructure.com/120294
Tested-by: Jenkins
Reviewed-by: Ryan Shaw <ryan@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Andrew Katsanevas <akatsanevas@instructure.com>
2017-07-25 22:55:10 +00:00
Jeremy Neander 0aeee4bdaf replace effective due dates with cached due dates
closes CNVS-38022

test plan:
* regression test Gradezilla with grading periods, especially:
  * filtering by grading periods
  * sorting by grading periods
  * grade locking (closed grading period grade protection)

Change-Id: Ic03e00cbe428e57bd0df7f29f1193deb1945d4a4
Reviewed-on: https://gerrit.instructure.com/119438
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Pert Eilers <peilers@instructure.com>
2017-07-24 15:27:05 +00:00
Nick Houle 7c7c827f8b Fix sis due date validations
Fixes: SIS-2869, SIS-2768

Notes: This commit is also for Mastery Paths.
       Repeat the first six steps for Mastery Paths.
       However, instead of a section override create
       a Mastery Path override. If you need help
       setting up Mastery Paths ping me.

Test plan:
- Enable the new SIS integration settings
- Check the `Require due date` setting
- Navigate to a course with more than one section
- Navigate to the assignments tab
- Create an assignment with one section override and
  add a due date
- Confirm the assignment saves
- Repeat the same steps with two section overrides
- Confirm the assignment saves

Change-Id: I4ce249f24e381fb14698a784b6cf80d4dc839c31
Reviewed-on: https://gerrit.instructure.com/115330
Reviewed-by: Brad Humphrey <brad@instructure.com>
Product-Review: Brad Humphrey <brad@instructure.com>
QA-Review: Mark McDermott <mmcdermott@instructure.com>
Tested-by: Jenkins
2017-07-20 19:14:24 +00:00
James Williams 4ba94cb171 rails 5.1: lib specs
Change-Id: Ieef3d3447cfa2b22c9c9f6662688a40ae48a726c
Reviewed-on: https://gerrit.instructure.com/119730
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-07-20 17:26:51 +00:00
Brad Horrocks 01faca033c fix for moderated grading in DocViewer
Replace crocodoc_ids with moderated_grading_ids
Both canvadocs and crocodoc can use the ids now

refs RD-4238
Test Plan:
With a course that has one teacher, 2 TAs, and a student
- Create an assignment, check the moderated grading check box
- as the student submit the assignment
- as a TA, pull up the submission in speed grader, annotate and grade it
- as the Other TA, open the submission in speed grader
- make sure you cant see the first TAs comments

Change-Id: I886af3e21f9276866ea4be8d5de6574b32e5f122
Reviewed-on: https://gerrit.instructure.com/117360
Tested-by: Jenkins
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
2017-07-18 22:13:39 +00:00
James Williams 16ac8bc9ea throw some ::'s around because rails is terrible
Change-Id: I6beefb3ca636e1915e9cdd173c04d3aa4bac07bc
Reviewed-on: https://gerrit.instructure.com/118923
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-07-13 20:27:58 +00:00
James Williams 980b05fee8 do some preloading for context/account in planner api
Change-Id: I7ffe15c36ba0699d704f568590a6b6afe4916fd9
Reviewed-on: https://gerrit.instructure.com/118680
Tested-by: Jenkins
Reviewed-by: Dan Minkevitch <dan@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-07-13 15:09:24 +00:00
Brad Horrocks 83011b6322 Enable annotations for submission api preview_urls
Test plan:
Make sure submission api results containing preview urls, have
annotations enabled

Fixes RD-4298
Change-Id: Id5358fc82bca6f94cc50f167cc33e7fe6515066f
Reviewed-on: https://gerrit.instructure.com/118357
Tested-by: Jenkins
Reviewed-by: Josh Orr <jgorr@instructure.com>
QA-Review: Mark McDermott <mmcdermott@instructure.com>
Product-Review: Brad Horrocks <bhorrocks@instructure.com>
2017-07-11 03:36:04 +00:00
Brian Park efed5ac493 show late deduction in speedgrader
closes: CNVS-37839

Test Plan:
1. As a teacher, navigate to SpeedGrader for an
   assignment with at least one late submission
2. Switch student to one that has a late, penalized submission
3. Observe that:
  - Unpenalized grade is displayed in input field
  - Penalty is displayed below input field
  - Modified grade is displayed  below input field
4. Repeat 1-3 for assignments of all `grading_type`s
  - Known issue: 'pass_fail' assignments do not
    display the points correctly if they have an
    existing late deduction.  To be addressed in
    future ticket.
5. Repeat with provisional grading
  - Observe thate late penalty stuff doesn't apply
    to provisional grades

Change-Id: Ie0acc835d9565faa9226c6969c70b4e8c5d0220e
Reviewed-on: https://gerrit.instructure.com/117217
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Sheldon Leibole <sheldon@siimpl.io>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Matt Goodwin <mattg@instructure.com>
2017-07-10 20:46:05 +00:00
Mysti Sadler 770605d852 Add dismissed attribute to planner override API
refs FALCOR-453

Test plan
- Ensure that planner overrides can have dismissed
- attributes added both during update and create
- Ensure the dismissed attribute shows up in the
- planner items api
- Ensure the dismissed attribute shows up in the
- missing submissions api, if you include overrides

Change-Id: I28faa856b65ecf6b931761c89eb6ac337848e25c
Reviewed-on: https://gerrit.instructure.com/117965
Reviewed-by: Dan Minkevitch <dan@instructure.com>
Tested-by: Jenkins
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Mysti Sadler <mysti@instructure.com>
2017-07-10 20:00:15 +00:00
Jeremy Stanley 3749ef0659 fix permissions for group appointment edit options
test plan:
 - in a course, create appointment groups with both
   individual and group signup
 - as a student, sign up for both
 - ensure that, when you click the appointments as a student,
   you don't see the "Group Options" and "Delete" buttons
 - ensure that a teacher does see this in both places

fixes CNVS-37047

Change-Id: I5b31cfd4587db9365fd9a0ddafdb920035eade3f
Reviewed-on: https://gerrit.instructure.com/118180
Tested-by: Jenkins
Reviewed-by: James Williams  <jamesw@instructure.com>
QA-Review: David Tan <dtan@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2017-07-10 15:55:48 +00:00
Spencer Olson 796ac1495e remove documentation for accepted_at on submissions
Remove documentation for accepted_at on submissions, because it is
going to get replaced by seconds_late. Also, no longer return the
accepted_at attribute in the submissions API. Finally, rename
duration_late to seconds_late, because in the change to replace
accepted_at with seconds_late, that method will no longer return
a Duration; it will return an integer number of seconds.

closes CNVS-38000

Test Plan:
1. Verify responses from the submissions API no longer return the
   accepted_at field on submissions.
2. Verify responses from the submissions API now return a field named
   seconds_late instead of duration_late
3. Verify the submissions API documentation no longer includes
   information about the accepted_at field, and documentation for
   duration_late has been renamed to seconds_late.

Change-Id: I903dedd45bcb822109d78ff815d6cecd2feb2a8d
Reviewed-on: https://gerrit.instructure.com/117657
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
Tested-by: Jenkins
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Neil Gupta <ngupta@instructure.com>
2017-07-06 16:22:19 +00:00
Rob Orton 7946f57107 return all warnings in sis batch error file
fixes CNVS-37888

test plan
 - run a sis import with more than 50 errors
 - should have all the errors in the error file
   and not just the first 50

Change-Id: Ib927b0aef1367ca7a7d21040d8eecdb80d341301
Reviewed-on: https://gerrit.instructure.com/117762
Tested-by: Jenkins
Reviewed-by: Tyler Pickett <tpickett@instructure.com>
QA-Review: Tucker McKnight <tmcknight@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2017-07-05 21:22:30 +00:00
Neil Gupta 33a0f62210 don't create placeholder submissions for unassigned students
Fixes CNVS-37395

Test plan:
* Create a course with 2 students
* Create an assignment with a due date for everyone
* Create a differentiated assignment with a due date for only 1 student
* In rails console:
  * Run `DueDateCacher.for_course(course_id)
  * Make sure `Submission.count` is 3
  * Make sure the first assignment has 2 placeholder submissions
  * Make sure the second assignment only has one placeholder submission

Change-Id: I5c8084d4fb0138f65e4c117dcc97638cf8d4f49d
Reviewed-on: https://gerrit.instructure.com/114573
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
Product-Review: Neil Gupta <ngupta@instructure.com>
QA-Review: Neil Gupta <ngupta@instructure.com>
2017-06-27 20:33:35 +00:00
Dan Minkevitch 3ff0b8e8c3 Format PlannerNote API responses
Fixes FALCOR-422
Fixes FALCOR-426

Test Plan:
* As a student
* In a course with Student Planner enabled
* And existing Planner Notes
* GET, PUT, POST, and DELETE from the `api/v1/planner_notes`
  endpoint
* The responses should all be JSON formatted correctly and
  return string IDs when the `Accept:
  application/json+canvas-string-ids` header is passed
* The `GET` index/list endpoint should not return deleted notes

Change-Id: I2435d62e8794aacbd4bb2d9484f9e89170187f4e
Reviewed-on: https://gerrit.instructure.com/116980
Reviewed-by: Clay Diffrient <cdiffrient@instructure.com>
Tested-by: Jenkins
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2017-06-27 17:21:40 +00:00
Rob Orton 0956afd9e6 show errors_attachment in sis import api and ui
fixes CNVS-37717

test plan
 - run sis import that would generate errors
 - the json for the import api should have an
   errors_attachment object
 - the ui should have a download file option

Change-Id: I2c6f94b601be5777b8a57f4b5b56f9f2215869ec
Reviewed-on: https://gerrit.instructure.com/116523
Tested-by: Jenkins
QA-Review: Tucker McKnight <tmcknight@instructure.com>
Reviewed-by: Brent Burgoyne <bburgoyne@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2017-06-23 19:51:25 +00:00
wdransfield 9ac4eea42d Fix n+1 query in gradebook history feed endpoint
Closes PLAT-2686

Test Plan:
- As a student create submissions for several assignments
- Retrieve gradebook history via the api for that student:
  /api/v1/courses/<id>/gradebook_history/feed?user_id=<id>
- Verify that an n+1 query does not occure for originality
  reports. (the repeating query we want to avoid look something like this:
  SQL OriginalityReport Load (4.1ms)  SELECT "originality_reports"
  .* FROM "originality_reports" WHERE "originality_reports"
  ."submission_id" = 55487625)

Change-Id: Id5ba23772bc3eaa3b7ac253b4e6c61a8744ed6b3
Reviewed-on: https://gerrit.instructure.com/116270
Tested-by: Jenkins
Reviewed-by: Andrew Butterfield <abutterfield@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Weston Dransfield <wdransfield@instructure.com>
2017-06-22 19:27:11 +00:00
Mysti Sadler 7a9ac20858 Allow planner items API to return all types of overrides
refs FALCOR-333

Test plan
- Create a quiz planner override for a quiz/announcement in Canvas
- POST /api/v1/planner/overrides -d 'plannable_type=quiz'
- POST /api/v1/planner/overrides -d 'plannable_type=announcement'
- Call GET /api/v1/planner/items and ensure the override
- shows up for that quiz/announcement
- Create a overrides on discussion topics/wiki pages
- or other types of items that could be graded
- and ensure they show up in the planner items override

Change-Id: I1bc18b7d80199bdad0cb59f7f27ab44c08442e64
Reviewed-on: https://gerrit.instructure.com/116015
Tested-by: Jenkins
Reviewed-by: Steven Burnett <sburnett@instructure.com>
QA-Review: Dan Sasaki <dsasaki@instructure.com>
Product-Review: Mysti Sadler <mysti@instructure.com>
2017-06-21 20:09:28 +00:00
Dan Minkevitch acafdcffc9 Add `plannable_date` to PlannerItems API
Closes FALCOR-375

Test Plan:
* As a student
* In a course with Student Planner enabled
* With various learning objects with associated
  todo_dates, due dates, posted dates, etc
* GET /api/v1/planner/items
* The response should contain a `plannable_date` for each
  object, with the date reflecting (in order of presence)
  todo_date, due_at, posted_at, or created_at

Change-Id: I3058f265cd91ef4e4f41b1266958a6cc049f213b
Reviewed-on: https://gerrit.instructure.com/116233
Tested-by: Jenkins
Reviewed-by: Mysti Sadler <mysti@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2017-06-21 18:23:11 +00:00
Dan Minkevitch 8f40c14268 BookmarkedCollection for Planner API
Closes FALCOR-325
Fixes FALCOR-361

Test Plan
Date Range Testing:
* With "Student Planner" enabled
* As a student
* Make a GET request to /api/v1/planner/items
  with ?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD&filter=new_activity
* The response should only contain results with new activity
  between those time ranges (test with dates and dates with times)

Pagination Testing:
* With "Student Planner" enabled
* As a student
* Make a GET request to /api/v1/planner/items
  with some combination of start_date, end_date, and filter
* Include a a `per_page` param
* The response should only contain only `per_page` number of
  results
* The response should contain a `Link` header with links to the
  current, next, and previous pages (you should see a URL with
  a `page=bookmark:[bunch of characters]`)
* Copy the `page` param from the `Link` header for the next
  page of results
* Make a request with the newly copied `page=bookmark:[stuff]`
  parameter added to the request
* You should get the next page of results in the response
* The previous and next URLs in the `Link` response header should
  return the previous and next page of results

Regression Testing:
* Full regression test of "New Student Planner"

Change-Id: Ie6352aec71f5de3c60981aaeee65119cc43ed6f7
Reviewed-on: https://gerrit.instructure.com/114848
Reviewed-by: Steven Burnett <sburnett@instructure.com>
Tested-by: Jenkins
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2017-06-20 20:14:20 +00:00
Brad Humphrey c3978bbeac allow post_to_sis to be set via the POST
test plan:
 - set an account to default post_to_sis on
 - create an assignment via the api with post_to_sis = false
 - verify that the assignment was created with post_to_sis = false

fixes SIS-2871

Change-Id: I0eda67788445ad3899f80acf3e1a768dd3b63f3e
Reviewed-on: https://gerrit.instructure.com/115859
Reviewed-by: Nick Houle <nhoule@instructure.com>
QA-Review: Mark McDermott <mmcdermott@instructure.com>
Tested-by: Jenkins
Product-Review: Brad Humphrey <brad@instructure.com>
2017-06-20 19:42:01 +00:00
Dan Minkevitch fff991435f Fix date handling for Planner Items API
Closes FALCOR-361

Test Plan:
* With "Student Planner" enabled
* As a student
* Make a GET request to /api/v1/planner/items
  with ?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD&filter=new_activity
* The response should only contain results with new activity
  between those time ranges (test with dates and dates with times)

Change-Id: I575d99fba4128b695f38bb552c82ad9414137fca
Reviewed-on: https://gerrit.instructure.com/116101
Reviewed-by: Steven Burnett <sburnett@instructure.com>
Tested-by: Jenkins
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2017-06-19 20:21:11 +00:00
Rob Orton 00390bf226 show the correct url for pagination on groups
fixes gh-1055

test plan
 - Execute API call to get a list of external tools associated with a group:
GET /api/v1/groups/2921/external_tools?include_parents=true
 - Examine the headers on the response. The Link header for retrieving more pages should point at:
/api/v1/groups/2921/external_tools?include_parents=true&page=2&per_page=10

Change-Id: Ied9bdb3ea36384faa2148f199047bebe87837aed
Reviewed-on: https://gerrit.instructure.com/115211
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2017-06-16 13:57:24 +00:00
Brian Park add9f15213 allow arranging gradebook assignment columns by module
closes CNVS-31861

test plan:
* Create a course without any modules and ensure it has at least
  two assignments and two students enrolled in it
* Create a course with two modules and at least two assignments
  in each module and an additional two assignments outside of
  any modules

* Go to Gradezilla for Course 1
* Verify that the "View > Arrange By" menu does not show any way
  to sort by modules

* Go to Gradezilla for Course 2
* Verify that the "View > Arrange By" menu shows two new options
  labelled
  - "Modules - First to Last"
  - "Modules - Last to First"
* Choose "View > Arrange By > Modules - First to Last"
* Verify that the assignment columns are arranged in the same
  order as they are on the modules page
* Verify that all assignments not in any modules show up at the
  end of the assignment columns
* Verify that all assignments not in any modules show up in the
  same order as they are on the assignments page

* Choose "View > Arrange By > Modules - Last to First"
* Verify that the assignment columns are arranged in the reverse
  order of the one they are in on the modules page
* Verify that all assignments not in any modules show up at the
  front of the assignment columns
* Verify that all assignments not in any modules show up in the
  same order as they are on the assignments page

* Go to the Modules page and drag/drop the assignments and
  modules to different locations and verify those orders are
  preserved when you go to Gradezilla and arrange assignment
  columns by modules.
* Go to the Assignments page and drag/drop the assignments and
  verify those orders are preserved when you go to Gradezilla
  and arrange assignment columns by modules

Change-Id: I4a4b56f18c7a24272d6c11590bdc8a0d9d55c356
Reviewed-on: https://gerrit.instructure.com/114485
Tested-by: Jenkins
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Christi Wruck
2017-06-14 19:51:25 +00:00
Dan Minkevitch 743bdfee29 Add "new_activity" filter and "submitted" key
Closes FALCOR-332

Test Plan:
* As a student
* In a course with the new Student Planner enabled
* With assignments that have submissions
  with comments/feedback, as well as unread
  discussion topics
* GET /api/v1/planner/items?filter=new_activity
* It should respond with only those items that have
  unread/unviewed activity
* Additionally, the `submitted` key in the `submissions` object
  should be `true` for items with submissions

Change-Id: I776ef9113e6c29f9958c8a22ff86227daf88239c
Reviewed-on: https://gerrit.instructure.com/114730
Tested-by: Jenkins
Reviewed-by: Mysti Sadler <mysti@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2017-06-14 17:01:25 +00:00
Dan Minkevitch c1eb9c2e3f Add planner overrides to missing submissions API
Closes FALCOR-345

Test Plan:
* As a student
* In a course with "Student Planner" enabled
* With missing submissions for the current user
* And planner overrides created for at least one
  of the missing assignments
* GET /api/v1/user/:user_id/missing_submissions
* The endpoint should return missing submissions
* Repeat the request with `?include[]=planner_overrides` passed
  as a parameter/query string
* The response should be the same as above, but include a
  `planner_override` key that contains the JSON data for the
  associated planner override

Change-Id: Ibcd809a6344c5ceef7018fdf9027da1f4b1d784e
Reviewed-on: https://gerrit.instructure.com/115179
Reviewed-by: Steven Burnett <sburnett@instructure.com>
Tested-by: Jenkins
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2017-06-14 17:00:11 +00:00
Michael Brewer-Davis 346fa6f0b9 add course uuid to api response
closes OUT-1317

Test plan:
1.  Create a course in Canvas
2.  Visit
      domain.canvas/api/v1/courses/<course_id>
3.  Verify that "uuid" field is present in JSON
    response

Change-Id: I4a504061a0af55ce635be13e71fa873abd88748c
Reviewed-on: https://gerrit.instructure.com/114839
Tested-by: Jenkins
Reviewed-by: Matt Berns <mberns@instructure.com>
QA-Review: Leo Abner <rabner@instructure.com>
Product-Review: Michael Brewer-Davis <mbd@instructure.com>
2017-06-13 03:19:39 +00:00
wdransfield bda9803bf2 Add launch to submission details modal
Closes PLAT-2544

Test Plan:
- Create a course with a student and a tool that allows
  the student to return an ltiLaunchUrl as an outcomes
  service message.
- Submit to the assignment as the student
- Go to the gradebook and click the comment bubble to open a modal
- Verify the submission URL does the LTI launch
  returned when the submission was created.

Change-Id: I61bf8d0cb9205d3bef864b64f0ebe392c118ded1
Reviewed-on: https://gerrit.instructure.com/114303
Tested-by: Jenkins
Reviewed-by: Andrew Butterfield <abutterfield@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Weston Dransfield <wdransfield@instructure.com>
2017-06-09 13:31:25 +00:00
Neil Gupta 5afdacd654 Return all submissions, even placeholders, in API
Fixes CNVS-37333

Test plan:
* Create a course
* Enroll 2 students
* Create an assignment
* Visit api/v1/courses/:course_id/assignments/:assignment_id/submissions
* Make sure 2 placeholder submissions are returned

Change-Id: I745a3bdce2b76be35aee3382b36e32e7698a86ae
Reviewed-on: https://gerrit.instructure.com/114276
Tested-by: Jenkins
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Neil Gupta <ngupta@instructure.com>
2017-06-07 21:41:51 +00:00
Rob Orton 08e1e7b3f9 show enrollments in deleted courses as deleted in api
fixes CNVS-36193

test plan
 - have enrollments in a course
 - update the course or sections workflow_state to
   ‘deleted’ through a sis import
 - hit the enrollments api for a user
 - the enrollment_state should be ‘deleted’
   GET /api/v1/users/:user_id/enrollments

Change-Id: I93c4be2be6851e8cbd986d405f544338b840f715
Reviewed-on: https://gerrit.instructure.com/112472
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2017-06-07 19:18:54 +00:00
Dan Minkevitch 565f371fde Add submission status & activity to PlannerItem API
Closes FALCOR-297

Test Plan:
* As a student
* In a course with the new Student Planner enabled
* With assignments with various submission states
  such as missing, late, graded, excused, etc
* GET /api/v1/planner/items
* The response should contain a "submissions" key
  whose value is reflected by the current status of the
  assignment, if it can be submitted, or `false` otherwise

Change-Id: I5c6703f930d7c5c13c77fdea8e01c6e31946ce43
Reviewed-on: https://gerrit.instructure.com/114007
Tested-by: Jenkins
Reviewed-by: Steven Burnett <sburnett@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2017-06-07 17:44:38 +00:00
Jeremy Stanley 3d47677764 teacher-side index, show, and details APIs
test plan:
 - render API documentation
 - ensure links between blueprint and associated endpoints
   work properly in API documentation
 - ensure the link from "Set or remove restrictions" to the
   "Course API Update" link works properly in API docs
 - ensure teachers in associated courses who are not
   enrolled in the blueprint and not account admins
   can use the three endpoints in "Associated Course History"
   and that these work as expected
 - the notification links for teachers should be as follows:
   #!/blueprint/blueprint_subscriptions/X/Y
   where X is the BlueprintSubscription ID
   and Y is the ContentMigration ID
 - the notification links for admins should be as follows:
   #!/blueprint/blueprint_templates/X/Y
   where X is the MasterTemplate ID
   and Y is the MasterMigration ID
 (note that making these links work is MC-217)

closes MC-215

Change-Id: I3b0462faf888f8df91cfbd0acb1566da3d60bebc
Reviewed-on: https://gerrit.instructure.com/112840
Tested-by: Jenkins
Reviewed-by: James Williams  <jamesw@instructure.com>
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2017-05-31 15:08:01 +00:00
Steven Burnett c6d6a9ceae add ungraded discussion topics to planner
fixes FALCOR-262

Test Plan:
- Hit the planner_items root route
- Notice it now gives you ungraded discussion
  topics

Change-Id: I8c543a154a16b9eaaf29dad03b59038e65065bad
Reviewed-on: https://gerrit.instructure.com/113000
Reviewed-by: Mysti Sadler <mysti@instructure.com>
Tested-by: Jenkins
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Steven Burnett <sburnett@instructure.com>
2017-05-30 22:01:46 +00:00
Dan Minkevitch 4de6dffa3a Add PlannerNotes to API
Closes FALCOR-261

Test Plan:
* With the student planner feature enabled
* As a student
* Create a Planner Note via the API
  POST /api/v1/planner_notes
  todo_date: today
* List the Planner Items via the API
  GET /api/v1/planner/items
* Your newly created note should be included
  in the returned list of planner items

Change-Id: I609f4e0cbd205a66e08215948bde183d1dc62202
Reviewed-on: https://gerrit.instructure.com/113504
Reviewed-by: Steven Burnett <sburnett@instructure.com>
Tested-by: Jenkins
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2017-05-30 18:13:35 +00:00
Keith Garner 1cd6529c44 add points_deducted and duration_late to submission serializers
Added the new field of points_deducted and duration_late as default
fields to the submission_json method.  Also removes the unused late?
method from QuizSubmission

closes CNVS-32371

test plan:
 - Have a course with a student and an assignment
 - Hit the API endpoint of /api/v1/courses/{course_id}/assignments/{assignment_id}/submissions
 - note the presense of the points_deducted and duration_late fields

Change-Id: I0047cf7d78973bd7602ca373ac5b7d11dd5f2ff4
Reviewed-on: https://gerrit.instructure.com/113039
Reviewed-by: Brian Park <brian@siimpl.io>
Tested-by: Jenkins
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2017-05-26 22:51:24 +00:00
Mysti Sadler a0e29fd75d Wiki Pages for student planner
closes FALCOR-260

Test plan
- Set up some Wiki Pages with to do dates
- Call API /api/v1/planner/items as a student
- Ensure pages are shown if the student should
- see them
- Ensure the student doesn't see pages they shouldn't
- (ie, conditional release, or missing todo dates)

Change-Id: I6cf45e1c19f5a8314912814d9b0263857ce5edb5
Reviewed-on: https://gerrit.instructure.com/112482
Tested-by: Jenkins
Reviewed-by: Steven Burnett <sburnett@instructure.com>
QA-Review: Dan Sasaki <dsasaki@instructure.com>
Product-Review: Mysti Sadler <mysti@instructure.com>
2017-05-26 21:31:37 +00:00
Simon Williams 1ac113a742 return correct status (200) for successful assignment api update
closes gh-979

test plan:
- basic regression of creating/editing assignments
- create api call should return 201, update should return 200

Change-Id: I8af9170c1432ff5124b09ace61fcb7b8bb5ae16d
Reviewed-on: https://gerrit.instructure.com/112570
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Reviewed-by: Ryan Shaw <ryan@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Simon Williams <simon@instructure.com>
2017-05-25 22:10:32 +00:00
Dan Minkevitch a04b0db6e9 Add date range, pagination, and submitted assignments
Closes FALCOR-183
Closes FALCOR-185
Closes FALCOR-257

Test Plan:
* With new planner enabled
* As a student
* With assignments that have submissions
* Hit the `api/v1/planner/items` endpoint
* See that the submitted assignments are included
  in the response
* Hit `api/v1/planner/items?due_after=YYYY-MM-DD`,
  `api/v1/planner/items?due_before=YYYY-MM-DD`, &
  `api/v1/planner/items?due_before=YYYY-MM-DD&due_after=YYYY-MM-DD`,
  replacing YYYY-MM-DD with some date in that format
* The response should only contain objects within that range
* Hit any of the above URLs, appending `&per_page=X&page=Y`,
  replacing `X` with a limit for number of items returned,
  and `Y` with the page of items to return
* The response should contain `X` amount of objects, starting
  from page `Y`

Change-Id: I63fc108107fda07f674ef7a5465125b185c0c510
Reviewed-on: https://gerrit.instructure.com/112386
Reviewed-by: Mysti Sadler <mysti@instructure.com>
Tested-by: Jenkins
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2017-05-25 21:25:03 +00:00
Simon Williams f20a840f70 mark content exports older than 30 days as expired
closes CNVS-37071

test plan:
- export course content, user content, and a folder
- tweak their created_at dates
- try different values of Setting.get('content_exports_expire_after_days', '30')
- the UI should show expired and api should not return an attachment url

Change-Id: I91923666752bc1e5d11f1e5319a83e040a363d41
Reviewed-on: https://gerrit.instructure.com/112720
Reviewed-by: Rob Orton <rob@instructure.com>
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: Tucker McKnight <tmcknight@instructure.com>
Product-Review: Simon Williams <simon@instructure.com>
2017-05-23 19:51:12 +00:00
Derek Bender 6a4e784148 add cell styles to gradebook
closes CNVS-31858

test plan
 - Given a gradezilla enabled gradebook
 - Given submissions that are late, missing, resubmitted, dropped, and
   excused
 - When a submission is late
 - Then the cell color is blue
 - When a submission is missing
 - Then the cell color is purple
 - When a submission is resubmitted
 - Then the cell color is green
 - When a submission is dropped
 - Then the cell color orange
 - When a submission is excused
 - Then the cell color is yellow

 - Given multiple students in the course to verify zerbra striping of
   state colors
 - When on the gradebook page
 - Then even rows are lighter
 - Then odd rows are darker

Change-Id: I9231f454b6982e1c7dc9c95d5eaed11140d2d3bc
Reviewed-on: https://gerrit.instructure.com/110818
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Tested-by: Jenkins
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Christi Wruck
2017-05-19 16:25:07 +00:00
Neil Gupta f0a3595015 Add late policy status support to submission controller
Fixes CNVS-32372

Test plan:
* Create a course
* Enroll a student
* Create an assignment
* As a teacher, hit the submissions update API endpoint
(PUT "/api/v1/courses/#{course.id}/assignments/#{assignment.id}/submissions/#{student.id}.json")

and pass:

submission: {
  late_policy_status: 'missing'
}

* Make sure the json response includes the right late policy status.
* Load the submission in rails console and make sure its late policy
  status is set.

You can pass 'missing', 'late', 'none', or null for late policy status
If status is 'late', then you can also include an `accepted_at`
timestamp that should also persist. If status is anything else,
accepted_at will be automatically cleared and fall back to submitted_at

Change-Id: I7f4032af520c44e5095da95ead03f0c0c987ef3f
Reviewed-on: https://gerrit.instructure.com/111439
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Matt Taylor <mtaylor@instructure.com>
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Neil Gupta <ngupta@instructure.com>
2017-05-17 22:59:26 +00:00
Rob Orton 90d3293f3a add current_line and total_lines to account_reports
refs CNVS-35978

test plan
 - run report
 - it should have current_line

Change-Id: Ic60b1421e38a2b2d66604fbb14c1063925965dc6
Reviewed-on: https://gerrit.instructure.com/106951
Tested-by: Jenkins
Reviewed-by: Tyler Pickett <tpickett@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2017-05-17 19:34:01 +00:00
Mysti Sadler 5c2b0571aa Add to do date to discussion topics
closes FALCOR-223

Test plan
- As a teacher, edit a course discussion or
- a group discussion (account or course) and
- verify the checkbox shows up
- Verify that you can select the checkbox to
- make the date input field show up
- Verify that if you do not input a date, it
- gives you an error message on save
- Verify that if you do input a date and save
- that you can still see that date on reload
- Verify that you can remove the date by unchecking
- the box
- Verify that you can't set the assignment to graded
- and set a todo date (set the date and then check
- the graded checkbox and see if it saves)
- Verify that you can't see the checkbox as a student
- Verify that you can't use the API to set the date
- on either a new or updated discussion as a student
- Verify that you can use the API to set the date
- Verify that you can't use the API to have a graded
- discussion with a todo date

Change-Id: I5ee7a41244444ac4cc7ca54f8de37cdfbf39f722
Reviewed-on: https://gerrit.instructure.com/111172
Tested-by: Jenkins
Reviewed-by: Steven Burnett <sburnett@instructure.com>
QA-Review: Dan Sasaki <dsasaki@instructure.com>
Product-Review: Christi Wruck
2017-05-17 19:24:42 +00:00
Matthew Berns dfc78d9b2c correct group overrides on existing assignments
fixes OUT-1032

test plan:
- ensure you have at least 1 active group in course
- create and save an assignment
- return to the assignment edit page
- make the assignment a group assignment
- attach a set of override dates to the group
- you should be able to successfully save the assignment

Change-Id: I1b6747336d933a8144c1a4e50ef011345697066e
Reviewed-on: https://gerrit.instructure.com/111875
Tested-by: Jenkins
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
QA-Review: Andrew Porter <hporter-c@instructure.com>
Product-Review: McCall Smith <mcsmith@instructure.com>
2017-05-17 19:05:18 +00:00
Marco Bergantin 9861e5faea Whitelist virtual attribute locked for quiz locking via UI
Since rails 4.2 and strong parameters the lock quiz feature via web UI
isn't working anymore

closes gh-1036

Test Plan:
  - Create a new Quiz
  - Click on menu item "Lock this Quiz Now" on show page
  - After redirect a notification shows "Quiz successfully updated"
  - The Quiz now should be locked and the previous menu item should be
    labeled "Let Students Take this Quiz Now"

Change-Id: I60a456f0860c9d233304e3febe5ffb0a08953fa4
Reviewed-on: https://gerrit.instructure.com/111770
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins
QA-Review: Michael Hargiss <mhargiss@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2017-05-15 19:38:05 +00:00
Dan Minkevitch 1f4132e1ba Planner API
Closes FALCOR-183
Closes FALCOR-184
Closes FALCOR-255
Closes FALCOR-186
Closes FALCOR-187
Closes FALCOR-188
Closes FALCOR-189
Closes FALCOR-147
Closes FALCOR-148

Test Plan:
* As a student in an account with the Student Planner
  feature flag enabled
* In a course with multiple upcoming due assignments
  in the current and following weeks
* Test that the following API endpoints provide you
  with the data described:

  get '/api/v1/planner/items'
    * Should return a list matching that of the todo
      list endpoint, while adding an additional key
      named `visible_in_planner`
  get '/api/v1/planner/overrides'
    * Should return a list of previously created
      PlannerOverrides
  get '/api/v1/planner/overrides/:override_id'
    * Should return the specific override for the
      passed in id
  put '/api/v1/planner/overrides/:override_id'
    * Should update an existing override's `visible`
      value to match what was passed in the request. No
      other values should be updated
  post '/api/v1/planner/overrides'
    * Should create a new PlannerOverride with the specified
      `plannable_type`, `plannable_id`, and `visible` values.
      `user_id` should match that of the user making the request
  delete '/api/v1/planner/overrides/:override_id'
    * Should set the PlannerOverride's `deleted_at` to when
      the request was made, as well as updating the `workflow_state`
      to `deleted`

Change-Id: I03890a525f8201a8df1d2f1290cdcd549ba548d7
Reviewed-on: https://gerrit.instructure.com/107495
Tested-by: Jenkins
Reviewed-by: Steven Burnett <sburnett@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2017-05-15 19:18:47 +00:00
Steven Burnett 4105782667 add student planner todo to pages
fixes FALCOR-157

Test Plan:
- Go to Pages with the student planner FF on
- Notice the add to student todo checkbox
- add the todo date and save
- remove the todo date and save
- check validations with checkbox and not saving
- update the todo date and save

Change-Id: I30d3996549f3e6c780603f7668e707e3b3ba8ca0
Reviewed-on: https://gerrit.instructure.com/111303
Tested-by: Jenkins
Reviewed-by: Dan Minkevitch <dan@instructure.com>
QA-Review: David Mirabile <dmirabile-c@instructure.com>
Product-Review: Steven Burnett <sburnett@instructure.com>
2017-05-15 18:37:01 +00:00
James Williams 25758ccbfc don't overwrite assignment override title when updating due date
test plan:
* have a course with a student
* create an assignment and assign it only to the one student
 with a given due date
* open the course calendar
* click on the assignment (the title should include
 "1 student")
* edit the due date (while still on the calendar)
* save it
* the title on the calendar should still say
 "1 student" and not "No students"

closes #CNVS-36813

Change-Id: I25a3179c4e9ab30452c2615d94115c6f3f61e987
Reviewed-on: https://gerrit.instructure.com/111335
Tested-by: Jenkins
Reviewed-by: Ed Schiebel <eschiebel@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
2017-05-11 16:51:42 +00:00
Clay Diffrient 9970a1ec3a Merge branch 'grahamb-developer_key_notes_field'
closes CNVS-36654

Reviewed-by: Ryan Shaw <ryan@instructure.com>
Reviewed-by: Tyler Pickett <tpickett+gerrit@instructure.com>
Reviewed-on: https://gerrit.instructure.com/106068
Tested-by: Jenkins
QA-Review: Tucker McKnight <tmcknight@instructure.com>
Product-Review: Clay Diffrient <cdiffrient@instructure.com>

Change-Id: I6eee43e696ca2d98d935ebd0e51ef54fd7554ed9
2017-05-10 08:21:39 -06:00
James Williams 7366f77614 preserve links in announcement list
test plan:
* set up a course to show announcements on home page
* create an announcement with a link
* it should show the link in the announcements list

closes #CNVS-36278

Change-Id: I20296ab5f2d08d4cf30f296dab4b1957482b9e13
Reviewed-on: https://gerrit.instructure.com/110333
Tested-by: Jenkins
Reviewed-by: Dan Minkevitch <dan@instructure.com>
QA-Review: Robert Lamb <rlamb@instructure.com>
Product-Review: Chris Ward <cward@instructure.com>
2017-05-08 16:41:21 +00:00
Cody Cutrer 99f5b454ed refactor and unify User#find_pseudonym_for_account and SisPseudonym
fixes CNVS-35919

also, prefer SIS pseudonyms over non-SIS pseudonyms from any given
account

test plan:
 * have a non-SIS pseudonym and a SIS pseudonym on a user
 * do an LTI launch
 * the LTI tool should get the info from the SIS pseudonym

Change-Id: I60a3c48a32eae94db93b0e72f1f0f6c5b6a5f5c2
Reviewed-on: https://gerrit.instructure.com/107785
Reviewed-by: Nathan Mills <nathanm@instructure.com>
Reviewed-by: Tyler Pickett <tpickett@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Tested-by: Jenkins
Product-Review: Cody Cutrer <cody@instructure.com>
2017-05-02 18:50:31 +00:00
Jeremy Stanley 4e01ef33a4 add blueprint unsynced changes endpoint
test plan:
 - set up a blueprint course and do an initial sync
 - create, update, and delete objects in the blueprint
 - before performing another sync, call the unsynced_changes
   endpoint and see that your changes are returned

closes MC-172

Change-Id: I6ff383a34b66217199923ed49b0456ff2f5e5be4
Reviewed-on: https://gerrit.instructure.com/110086
Tested-by: Jenkins
Reviewed-by: James Williams  <jamesw@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2017-05-02 16:31:08 +00:00
Jeremy Stanley 83e392a0af API for returning blueprint migration results
test plan:
 - render documentation
 - test the "Get migration details" endpoint:
   - starting both with a blueprint course and a minion course
   - ensure a teacher without rights on the blueprint cannot
     call the endpoint on the blueprint (but can still call
     on a minion)
 - ensure creates, deletes, updates, and exceptions (for
   changed minion content) are returned as expected
   (exceptions show what type of content changed in the minion
    course to prevent the update from being synced:
    'content', 'points', 'due_dates', or 'availability_dates')
 - ensure when calling on a minion course, only exceptions
   for that minion course are returned
 - ensure the html_url retrieved links to the copy of the asset
   in the course the API endpoint is called on (master or minion)

closes MC-119

Change-Id: I73cf52304b080bbe564779294b53b4991700f0f8
Reviewed-on: https://gerrit.instructure.com/104789
Reviewed-by: James Williams  <jamesw@instructure.com>
Tested-by: Jenkins
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2017-05-01 16:26:08 +00:00
Landon Wilkins 014cc7368c da licença part 25
add consistent license headers to all source files
(ruby, coffeescript, javascript)

except for vendor files

Change-Id: Ic87c252aa2a2e2739d61ee9164431698e8d7e547
Reviewed-on: https://gerrit.instructure.com/110048
Tested-by: Jenkins
Reviewed-by: Jon Jensen <jon@instructure.com>
Product-Review: Jon Jensen <jon@instructure.com>
QA-Review: Jon Jensen <jon@instructure.com>
2017-04-27 21:51:40 +00:00
Jeremy Stanley 1eafcea81b Add comment to blueprint migration
test plan:
 - when starting a blueprint migration via the API, you should be
   able to add a comment via the `comment` parameter
 - when listing blueprint migrations, the comment should be
   included

closes MC-167

Change-Id: Ib91dc8917f736c217b2cc02d253c344fb1c14c3e
Reviewed-on: https://gerrit.instructure.com/109666
Tested-by: Jenkins
Reviewed-by: James Williams  <jamesw@instructure.com>
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2017-04-26 13:17:42 +00:00
Jacob Fugal 547ca9f669 don't ignore address_book cache
don't need to preload users that are already in the cache. not
functionality change, just performance

test-plan: N/A

Change-Id: I34aecd97a35619718a7c66c902974d3b2cec09ae
Reviewed-on: https://gerrit.instructure.com/109287
Reviewed-by: Jonathan Featherstone <jfeatherstone@instructure.com>
Tested-by: Jenkins
Product-Review: Jacob Fugal <jacob@instructure.com>
QA-Review: Jacob Fugal <jacob@instructure.com>
2017-04-20 22:16:50 +00:00
wdransfield 25baa102e3 Include account uuid in api response
Closes PLAT-2484

Test Plan:
Exercise the account index and show endpoints. Verify that
a parameter named 'uuid' is included in the response and
is set to the correct account uuid.

Change-Id: I40a30c638fd424d6d9fecacaeeb93f684575fd30
Reviewed-on: https://gerrit.instructure.com/108815
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Weston Dransfield <wdransfield@instructure.com>
2017-04-19 17:16:20 +00:00
James Williams d8ab3ffa26 master courses: fix assignment override locking
don't forbid if there are no overrides

Change-Id: If64e4dc4fb717433f3f8f84a8ff49ad3515aac45
Reviewed-on: https://gerrit.instructure.com/107745
Tested-by: Jenkins
QA-Review: Heath Hales <hhales@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
2017-04-10 15:48:11 +00:00
Graham Ballantyne e359c8d187 Add notes & additional stats to Developer Keys page
This commit enhances the Developer Keys page in two ways:

Notes field:
A notes field is added on the `developer_keys` table. When creating a
key, there is sometimes a need to record more information (for example,
a ticket number for the request, information on how the key is to be
used, etc). The notes field is exposed in the developer key listing, in
the API response, and in the dialog for creating/editing a key.

Usage stats:
While adding the notes field, I found a `TODO` marker for "add some
better stats here, like token count, last usage, etc.". Mark that `TODO`
as `DONE`! This PR adds two methods to the `DeveloperKey` model:
`access_token_count` and `last_used_at`. These fields are returned in
the API response, and are displayed in the Stats column on the Developer
Key page.

Test Plan:
- Add a new developer key. There should be a notes field present in the
  form and it should save the value of the field when creating the key.
- Edit the key; you should be able to update the notes field.
- Assign access tokens using the developer key. The usage information
  should be reflected in the stats for that key.
2017-04-05 14:06:45 -07:00
Jeremy Stanley c3b7a550f6 Display "Limit this slot to [ ] groups" for group signups
test plan:
 - have two appointment groups with upcoming time slots
 - make one of these appointment groups sign up groups instead of
   individual users
 - edit time slots for each appointment group
 - ensure the text at the bottom shows
   "Limit this slot to [ ] groups" for the appointment group that
   signs up students by group, and "users" for the other one

fixes CNVS-35745

Change-Id: I639d1f07d5e7e51dca37e15e89a0d76ea24f1602
Reviewed-on: https://gerrit.instructure.com/106599
Tested-by: Jenkins
Reviewed-by: James Williams  <jamesw@instructure.com>
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2017-03-31 22:45:42 +00:00
Dan Minkevitch deddbf8b27 Change permission check to :read for migration auditing
Refs CNVS-29501

Test Plan:
* In a course, create some content migrations by exporting/importing
  course content
* GET /api/v1/courses/:course_id/content_migrations/:id
  using site admin credentials
* The response should contain infomation within an `audit_info` key
* Hit the same endpoint with teacher, student, or other non-site-admin
  credentials
* The API should not contain the extra information and should behave
  as before

Change-Id: I3a5eb7c3ccd0165dc4e362909a42abb26bb96a02
Reviewed-on: https://gerrit.instructure.com/106182
Tested-by: Jenkins
Reviewed-by: James Williams  <jamesw@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
QA-Review: Dan Minkevitch <dan@instructure.com>
2017-03-31 21:21:19 +00:00
James Williams f430cd18c3 master courses: handle assignment overrides when date-restricted
ignores assignment overrides when updating on the backend
if date-restricted and deletes existing ones on import
when restrictions are added later

also some other stuff that snuck in

closes #MC-135

Change-Id: Iade3a64740ce04388bd5d97fc860fbcf7a6ca99f
Reviewed-on: https://gerrit.instructure.com/106848
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Tested-by: Jenkins
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-03-30 17:21:46 +00:00
Neil Gupta 017c734ccb Add has_weighted_grading_periods flag to course api response
Fixes CNVS-35910

Test plan:
* Hit `@GET("/courses/{courseid}?include[]=term&include[]=permissions&include[]=license&include[]=is_public&include[]=needs_grading_count&include[]=total_scores&include[]=current_grading_period_scores")`
* Make sure it includes a `has_weighted_grading_periods` boolean attr
* Make sure the value reflects the weighted value of the course's
  grading period set
* Remove `&include[]=current_grading_period_scores` from the get request
* Make sure `has_weighted_grading_periods` is not included anymore

Change-Id: I96ea26b568e3ba3a6bf6eb3f1a03c7c0df7dcf5c
Reviewed-on: https://gerrit.instructure.com/106439
Tested-by: Jenkins
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Jeremy Neander <jneander@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Neil Gupta <ngupta@instructure.com>
2017-03-28 00:02:15 +00:00
James Williams 2651bd5c85 don't show email/login_id for users with pending enrollments
test plan:
* invite a student to a course
* the people page shouldn't show their login id or email
* accept the invitation
* now the login id should be shown

closes #CNVS-34920

Change-Id: I621ea2c6ceeae4de53b923bf51300aa9bba832de
Reviewed-on: https://gerrit.instructure.com/105942
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Chris Ward <cward@instructure.com>
2017-03-27 12:27:59 +00:00
James Williams fe2e86c9a2 provide default from name in admin communication messages api
closes #CNVS-35558

Change-Id: I4601d55603563bfc3f9383079528f8270935d636
Reviewed-on: https://gerrit.instructure.com/105949
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-03-23 14:17:51 +00:00
James Williams 92d33c5cd2 master courses: add helper method to load data in js_env
also refactor some stuff to make the distinction clearer
between child-side restrictions and master-side restrictions

closes #MC-126

Change-Id: Ib630022ce7f1d4bfe2461221787b3b942c22da67
Reviewed-on: https://gerrit.instructure.com/105407
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Tested-by: Jenkins
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-03-22 13:51:16 +00:00
James Williams a631102d3f strip html out of body on recent announcements
test plan:
* enable the recent announcements list on the course home
 (when set to show the front page)
* an announcement with html content should only show text
 (and not the html tags)

closes #CNVS-35565

Change-Id: I5162a32caa7da6fa88c5168c0b8791ae0ae38ed5
Reviewed-on: https://gerrit.instructure.com/105680
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: Chris Ward <cward@instructure.com>
2017-03-22 12:37:22 +00:00
Spencer Olson 3f174be127 use scores table instead of grade calculator
Stop using the grade calculator to get grading period scores and
instead fetch the values from the scores table.

closes CNVS-35213

test plan:

1. Verify the "Multiple Grading Periods" account report runs and
   returns accurate student scores.
2. Verify the courses API returns accurate scores when you
   request 'current_grading_period_scores' as a student. Create an API
   key for a student and then make the following request:
   api/v1/courses/:course_id/?include[]=enrollments&include[]=
   current_grading_period_scores&include[]=total_scores

Change-Id: Ifdb8cd602935d1d0d97f301233a185024e6882a2
Reviewed-on: https://gerrit.instructure.com/104776
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Tested-by: Jenkins
Reviewed-by: Neil Gupta <ngupta@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2017-03-17 17:15:39 +00:00
Andrew Butterfield 692ced4566 Fix double escape in sessionless launch url
fixes PLAT-2069

Test plan:
* go through the repo steps in the ticket
* ensure that the data-api-endpoint url query param is not double url
  encoded

Change-Id: I3d6144202f6ec613e3aa38908d7e2dfef87ba460
Reviewed-on: https://gerrit.instructure.com/105337
Tested-by: Jenkins
Reviewed-by: Weston Dransfield <wdransfield@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Andrew Butterfield <abutterfield@instructure.com>
2017-03-16 22:14:33 +00:00
Cody Cutrer ce21af8ecf rails 5: find and fix lots of deprecation warnings [ci verbose]
refs CNVS-34843

Change-Id: Idd523c2a7c37325381d590f1ee70c406ace2a459
Reviewed-on: https://gerrit.instructure.com/105033
Tested-by: Jenkins
Reviewed-by: Rob Orton <rob@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
2017-03-16 16:03:51 +00:00
Matthew Berns f2bd113e02 fix points possible not being saved for graded surveys
fixes CNVS-35100

test plan:
- create a graded survey quiz and assign a point value
- create at least one question for the survey that has
  points
- the point total after saving should match the total
  specified when creating the quiz, not the total point
  value of the question(s)

Change-Id: I4394d400f77971081a09c20ecb64880a68f3e389
Reviewed-on: https://gerrit.instructure.com/104969
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
Reviewed-by: Davis Lynn McClellan <dmcclellan@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Jason Sparks <jsparks@instructure.com>
Tested-by: Jenkins
2017-03-15 21:31:59 +00:00
Spencer Olson fee3b6f992 remove feature flag and place on grading period set
The feature flag "Display Totals for All Grading Periods"
is removed and now lives as an option on grading period
sets. All courses using a given grading period set will
display or hide 'All Grading Periods' totals according to
the set's configuration.

closes CNVS-26713

test plan:

1. Verify the feature flag for 'Display Totals for All Grading Periods'
   is gone.
2. Verify the 'Display Totals for All Grading Periods' feature behaves
   the same way it always has, except for the fact that the feature is
   now a setting on grading period sets, meaning a course should show
   or hide 'All Grading Periods' totals based on the setting of its
   associated grading period set.

Change-Id: Ia445c4a66f98587b556fbdb8ce94b4b8b0d03187
Reviewed-on: https://gerrit.instructure.com/104191
Reviewed-by: Neil Gupta <ngupta@instructure.com>
Tested-by: Jenkins
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Neil Gupta <ngupta@instructure.com>
2017-03-15 19:54:16 +00:00
Blake Allan 9a04032a6d add 'LaTeX: ' prefix to the equation alt attributes from equation editor
Fixes: CNVS-29738

Test Plan:
With an RCE view open, click the insert math equation button
Create a math equation and click insert equation
Ensure that the equation image alt attribute is prefixed by 'LaTeX: '

Change-Id: I6df61e83de9820f54757bbfdd3065275889df88c
Reviewed-on: https://gerrit.instructure.com/102708
Tested-by: Jenkins
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Simon Williams <simon@instructure.com>
2017-03-14 04:45:00 +00:00
Cody Cutrer 6751891617 rails 5: fix lots of deprecation warnings
mostly s/uniq/distinct/, and choosing a content type for render :text

Change-Id: I53a2e77d23ecc43162f70b4fd88303cc1539c20b
Reviewed-on: https://gerrit.instructure.com/104762
Tested-by: Jenkins
Reviewed-by: Simon Williams <simon@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
2017-03-13 19:07:11 +00:00
Brad Humphrey e9231a6428 use mastery path override as default due date
test plan
 * create an assignment
 * assign it to Mastery Paths with a due date
 * the sis assignments api should show that the
   assignment is due_at the mastery path due date

fixes SIS-2758

Change-Id: Ia61762863c46bfc75aad4760a1fd567aa6e1a8f5
Reviewed-on: https://gerrit.instructure.com/104156
Reviewed-by: Stewie aka Nicholas Stewart <nstewart@instructure.com>
QA-Review: Mark McDermott <mmcdermott@instructure.com>
Tested-by: Jenkins
Product-Review: Brad Humphrey <brad@instructure.com>
2017-03-10 23:52:31 +00:00
wdransfield 0d32c11ceb Auto create subscription for tools associated with assignment
Test Plan:
- Verify the 'Canvas.placements.similarityDetection' capability
  no longer appears on the default TCP.
- Verify adding the 'restricted_capabilities' to a custom TCP
  allows you to see this placement.
- Install two LTI2 tools with the similarity detection
  placement and a service offered with an endpoint specified
  and an @id that ends with 'SubmissionEvent' (see
  github.com/westonkd/lti-test-tool/blob/master/config/toolProxy.js
  for an example.
- Create a new assignment using one of the two tools
  as the associated plagiarism detection tool.
- Verify a subscription is created for the tool with
  the following values set:
      ContextType: 'assignment'
      Format: 'live-event'
      ContextId: <id of assignment>
      EventTypes: ['submission_created']
      TransportType: 'https'
      TransportMetadata:{Url: <endpoint of the
                         submission event servce>}
- Edit the assignment just created and only change the name
- Verify another subscription is not created
- Edit the assignment and switch the plagiarism tool to the
  second tool.
- Verify a subscription is created
- Create an assignment with no plagiarism tool
- Verify a subscription is not created
- Install a tool with the same 'SubmissionEvent' service in
  the tool profile, but change the 'action' array to only
  inlcude a 'GET'.
- Attempt to associate an assignment with this newly installed
  tool and verify a error flash message is displayed

Closes PLAT-2287

Change-Id: Ic20afbdb52c6b70d341a7b987345b4768bd0ab45
Reviewed-on: https://gerrit.instructure.com/103851
Reviewed-by: Andrew Butterfield <abutterfield@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: Weston Dransfield <wdransfield@instructure.com>
2017-03-10 13:45:51 +00:00
Cody Cutrer d812a74977 rails 5: apis/v1 c-q
Change-Id: Ia1343f2590b87638264de5a1bf6e41eb78db4bd7
Reviewed-on: https://gerrit.instructure.com/104375
Tested-by: Jenkins
Reviewed-by: Simon Williams <simon@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
2017-03-08 19:07:41 +00:00
Cody Cutrer f105926105 rails 5: api specs a
Change-Id: If119eb194d1a386bb89c39c1a52ce3ba58d07416
Reviewed-on: https://gerrit.instructure.com/104300
Tested-by: Jenkins
Reviewed-by: Simon Williams <simon@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
2017-03-08 17:56:31 +00:00
Cody Cutrer ae0c85da6e rails 5: api specs s-u
Change-Id: I440c4b0fdc7a6a850b9c264835ea1a85f65c4363
Reviewed-on: https://gerrit.instructure.com/104401
Tested-by: Jenkins
Reviewed-by: Rob Orton <rob@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
2017-03-08 06:00:13 +00:00
Clay Diffrient c9fb9a4036 Update AssignmentConfigurationToolsSpec for React 15
closes CNVS-34830

Test Plan:
  - Using similarity detection tools with assignments should
    work as before

Change-Id: I0db913f9568c8983518921eb7a75f35aa0dab3ad
Reviewed-on: https://gerrit.instructure.com/101532
Tested-by: Jenkins
Reviewed-by: Weston Dransfield <wdransfield@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Clay Diffrient <cdiffrient@instructure.com>
2017-03-07 21:00:14 +00:00
Cody Cutrer 4ec005d7fc rails 5: controllers q-r
refs CNVS-34864

Change-Id: I14f590aa5b5b7e97bd240aad7feaa74298567817
Reviewed-on: https://gerrit.instructure.com/104169
Tested-by: Jenkins
Reviewed-by: Simon Williams <simon@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
2017-03-07 04:08:40 +00:00
Cody Cutrer a75f4394d2 rails 5: controller specs a-c
refs CNVS-34864

Change-Id: I1f2f422929049044f791113f4262c0b6971ececa
Reviewed-on: https://gerrit.instructure.com/103930
Reviewed-by: James Williams  <jamesw@instructure.com>
Reviewed-by: Rob Orton <rob@instructure.com>
Tested-by: Jenkins
Product-Review: Cody Cutrer <cody@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
2017-03-06 17:59:49 +00:00
Neil Gupta ec51d5843a Merge branch 'dev/weighted-grading' into master
Fixes CNVS-35214

Change-Id: I55a1d4a02ed2640ad3f147e2c5534ef8f747c2f4
2017-03-03 11:00:01 -06:00
Cody Cutrer cd6ffacee5 rails 5: fixes for spec/lib/a**_spec.rb
refs CNVS-34863

note that User#display_name doesn't exist; Rails 4.2 just ignored it, but
Rails 5 complains

Change-Id: I6fd84ea5304a402eb51e549af5e9a9600737e3fc
Reviewed-on: https://gerrit.instructure.com/103795
Reviewed-by: James Williams  <jamesw@instructure.com>
Tested-by: Jenkins
Product-Review: Cody Cutrer <cody@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
2017-03-02 20:38:34 +00:00
Neil Gupta 91418b6e69 Merge branch 'master' into dev/weighted-grading
Change-Id: I6089b65927f24039e80369c5de7641922567b606
2017-02-28 22:06:16 -06:00
Neil Gupta e34d0de6a6 Merge branch 'master' into dev/weighted-grading
Fixes CNVS-35198
Fixes CNVS-34498

Change-Id: I7841fa62de2747654c3f4ad13c1124aeb10f6663
2017-02-28 16:36:42 -06:00
Omar Khan 65ee8163f9 New assignment page for Quizzes 2
closes QUIZ-1211

Test plan:
- Set up the Quizzes 2 external tool (https://goo.gl/7LpFYh)
- Go to /courses/:id/assignments/new?quiz_lti
- Description textarea should not be present
- 'Moderated grading' checkbox should not be present
- 'Lock assignment properties' checkbox should not be present
- Submission type should be set to 'External Tool'
- It should not be possible to change the submission type
- The external tool URL should be set to the Quizzes 2 URL
- The 'load in new tab' option should not be present
- Click 'Save'
- You should see the new LTI quiz creator tool

Change-Id: I6208dfd39c672d989ae116f9b5d026883b621f6a
Reviewed-on: https://gerrit.instructure.com/102366
Reviewed-by: John Corrigan <jcorrigan@instructure.com>
QA-Review: Michael Hargiss <mhargiss@instructure.com>
Product-Review: Jason Sparks <jsparks@instructure.com>
Tested-by: Jenkins
2017-02-23 23:31:13 +00:00
Spencer Olson fb9049324e set default values for booleans on various tables
This commit adds default values of false and not null constraints for
all boolean columns on the assignments, discussion_topics, and quizzes
tables. This commit also has a data fixup to backfill default values on
the boolean columns.

closes CNVS-34536

Test Plan:
* Do the following in a course with at least one closed grading period:
1. On the Assignments page, create an assignment with a due date in a
   closed grading period using the "+" button on an assignment group.
2. As a teacher, try to toggle the "Post to SIS" setting for the
   assignment from the Assignments page. Verify the setting changes.
3. Create a new assignment with a due date in a closed grading period
   using the "+Assignment" button.
4. As a teacher, try to toggle the post to SIS setting for the
   assignment from the Assignments page. Verify you can edit the
   setting as you toggle the button.

Change-Id: I7c799bb3b194363836d900287be90ca13805508e
Reviewed-on: https://gerrit.instructure.com/101315
Reviewed-by: Neil Gupta <ngupta@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Tested-by: Jenkins
Product-Review: Keith T. Garner <kgarner@instructure.com>
2017-02-22 18:17:59 +00:00
Keith Garner 27434a1e94 allow current_grading_period_scores in courses_api#users
When returning enrollments, the courses#user and courses#users
endpoints will use the current grading period scores for the grades
section when current_grading_period_scores is added as an include.
Additionally, grading_period_id will be included in the scores. If
grading_period_id is nil, its an indication that there is no current
grading period and the score is a total score.

closes CNVS-34972

test plan:
 - Have a course with at least one student in a term that has a
   grading period group, with at least 2 grading periods
 - Create an assignment in each grading period with 10 points.
 - In the gradebook, score the assignment in the first grading period
   at 1 point, score the other at 6 points
 - As the teacher, visit the API end point
   /api/v1/courses/<:course_id>/users/?include[]=enrollments
 - In the json returned, note that grades in the enrollment for
   student match the expected final scores of 35.
 - As the teacher, visit the API end point
   /api/v1/courses/<:course_id>/users/?include[]=enrollments&include[]=current_grading_period_scores
 - In the json returned, note that grades in the enrollment for
   student match the expected grading period scores of 10.
 - As the teacher, visit the API end point
   /api/v1/courses/<:course_id>/users/<:student_id>?include[]=enrollments
 - In the json returned, note that grades in the enrollment for
   student match the expected final scores of 35.
 - As the teacher, visit the API end point
   /api/v1/courses/<:course_id>/users/<:student_id>?include[]=enrollments&include[]=current_grading_period_scores
 - In the json returned, note that grades in the enrollment for
   student match the expected grading period scores of 10.

Change-Id: Iaa74e7f5eec1b79af21c0b7fbb4f6e6f2b1e37c8
Reviewed-on: https://gerrit.instructure.com/102220
Reviewed-by: Neil Gupta <ngupta@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: KC Naegle <knaegle@instructure.com>
Tested-by: Jenkins
Product-Review: Keith T. Garner <kgarner@instructure.com>
2017-02-22 18:17:30 +00:00
James Williams dfbef7aad3 master courses: add api for creating/monitoring migrations
test plan:
* use the API docs for the three new endpoints to
 queue migrations for a blueprint course
 and view migration information

closes #MC-95

Change-Id: Ie04baf7ac1623384413de19aa7d718c3419fdd1d
Reviewed-on: https://gerrit.instructure.com/102294
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
2017-02-22 12:31:14 +00:00
James Williams 4490ab5897 fix quiz 'hide_results' parameter filtering
hide_results sometimes expects a hash instead of a scalar value

test plan:
* should be able to create/edit a quiz without
 "Let Students See Their Quiz Responses" checked and save
 the value correctly

closes #CNVS-35069

Change-Id: I29faaf0d3bec06fa8f05656cd83e0d617b5028b4
Reviewed-on: https://gerrit.instructure.com/102683
Reviewed-by: Marc Alan Phillips <mphillips@instructure.com>
QA-Review: Gentry Beckmann <gbeckmann@instructure.com>
Tested-by: Rob Orton <rob@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
2017-02-18 20:05:01 +00:00
Dan Minkevitch 66f5ef2d4b Add additional fields to Content Migrations API
Closes CNVS-29501

Test Plan:
* In a course, create some content migrations by exporting/importing
  course content
* GET /api/v1/courses/:course_id/content_migrations/:id
  using site admin credentials
* The response should contain infomation within an `audit_info` key
* Hit the same endpoint with teacher, student, or other non-site-admin
  credentials
* The API should not contain the extra information and should behave
  as before

Change-Id: Ia121b2ff72e9be553c1de74be2fd259038526dc5
Reviewed-on: https://gerrit.instructure.com/102193
Tested-by: Jenkins
Reviewed-by: Mysti Sadler <mysti@instructure.com>
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2017-02-16 21:44:24 +00:00
James Williams 62e410c4ba master courses: refactor api hooks to include master-side data
doesn't do anything yet but should make it easier when the
time comes to try to make our lock/unlock button component(s)

closes #MC-92

Change-Id: Iff72e2045f924afe64433a0e5686e077afdcb755
Reviewed-on: https://gerrit.instructure.com/102021
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Tested-by: Jenkins
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-02-16 17:43:22 +00:00
James Williams 090b7586a4 master courses: initial master templates API
test plan:
* generate API documentation
* use the "Blueprint Templates" API documentation to test
 the three new endpoints
 (#show, #associated_courses, #update_associations)

closes #MC-69

Change-Id: I1ac7e0c385721a67d815ed1b8f7ee065248b2650
Reviewed-on: https://gerrit.instructure.com/101590
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Tested-by: Jenkins
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
2017-02-16 16:31:52 +00:00
Brad Humphrey 8979e1010e Merge include student overrides in sis assignments api
Merge branch 'dev/sis/sis-assignments-api'

Test Plan:
 - Verify the api documentation has been updated
   to show student overrides
   (/doc/api/sis_integration.html#method.sis_api.sis_assignments)
 - Create users with SIS IDs
 - Create assignments with post_to_sis enabled
 - Request the endpoint specified in the api docs without include[]=
   * It should return assignments without student overrides
 - Request the endpoint with include[]=student_overrides
   * It should return assignments with student overrides and SIS IDs
 - The API behavior should match the documentation

fixes SIS-2700

Change-Id: Ife4a68f6bf376cf7b4cf6e6a2800994b15bb951d
2017-02-13 15:26:29 -07:00
Brad Humphrey c663e40d88 make inclusion of student_overrides more explicit
test plan:
  sis_assignments_api should still work as expected
  with and without the student_overrides include

refs SIS-2700
fixes SIS-2750

Change-Id: I1da6d75410578c78cf0ac4c8882317ae4a0b5ccd
Reviewed-on: https://gerrit.instructure.com/101928
Tested-by: Jenkins
Reviewed-by: Stewie aka Nicholas Stewart <nstewart@instructure.com>
Product-Review: Brad Humphrey <brad@instructure.com>
QA-Review: Brad Humphrey <brad@instructure.com>
2017-02-13 22:13:39 +00:00
Michael Nomitch e23555cece add anonymous_submissions to allowed quiz params
fixes CNVS-34706

also alphabetizes allowed params

test plan:
  - make a survey and go to edit page
  - toggle "Keep Submissions Anonymous"
    and hit save
  - on page refresh this change is
    persisted
  - change it back
  - this change persists as well
  - when toggled to be anonymous the
    survey is actually anonymous
    - in the quiz submissions page
      for this survey, you do not
      see the name of a student
      when they have taken the survey

Change-Id: If3595492eed91b46f6774b11706a206ad9207dda
Reviewed-on: https://gerrit.instructure.com/101759
Reviewed-by: Marc Alan Phillips <mphillips@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
Product-Review: Jason Sparks <jsparks@instructure.com>
Tested-by: Jenkins
2017-02-13 20:34:11 +00:00
Brad Humphrey 75ca24f1d8 include sis_user_id with student overrides for sis_assignments
test plan:
  set up a user with a sis_id
  set up an assignment with user level overrides
  verify that the sis_assignments_api can return sis_user_id

refs SIS-2700
fixes SIS-2749

Change-Id: I78a33f556cc1326fc5378cd3d92e71a113641f58
Reviewed-on: https://gerrit.instructure.com/101854
Tested-by: Jenkins
Reviewed-by: Nick Houle <nhoule@instructure.com>
Product-Review: Brad Humphrey <brad@instructure.com>
QA-Review: Brad Humphrey <brad@instructure.com>
2017-02-13 19:17:02 +00:00
Brad Humphrey cbf14a8aea add user level assignment overrides to the sis assignment JSON
test plan:
 sis_assignments response should be the same

refs SIS-2700
fixes SIS-2744

Change-Id: I3cd38481f00ec8b52d959c25f947e6306e4046ff
Reviewed-on: https://gerrit.instructure.com/101515
Tested-by: Jenkins
Reviewed-by: Nick Houle <nhoule@instructure.com>
Product-Review: Brad Humphrey <brad@instructure.com>
QA-Review: Brad Humphrey <brad@instructure.com>
2017-02-09 18:12:33 +00:00
Connor Ford bee51363cd Fix rubric api pagination links
Check both account and course contexts in rubric spec

The link header returned with certain rubric API responses incorrectly
contains links to course assignment endpoints instead of additional
pages of rubrics. This commit corrects the pagination links and adds
logic for differentiating between course and account contexts.

Test Plan:
  - Make API requests to the following endpoints for listing rubrics:
  - /api/v1/accounts/:account_id/rubircs
  - /api/v1/courses/:course_id/rubrics
  - Ensure the results are fully paginated by choosing cases with at
    least 10 associated rubrics or by lowering the per_page parameter.
  - Ensure the URLs in the response "Link" header correctly point to
    additional pages of rubrics for the requested context.
2017-02-06 15:50:32 -07:00
Nick Houle 521895b36d Add max_name_length to Assignment API
Refs: SIS-2692

Test plan:
- Using your preferred REST Client make a GET request to the
  assignments api and verify that max_name_length is
  included as an integer.

Change-Id: I0119bab3e840164bcc76fdd01d23bb94d1cce8f8
Reviewed-on: https://gerrit.instructure.com/100062
Tested-by: Jenkins
Reviewed-by: Stewie aka Nicholas Stewart <nstewart@instructure.com>
Product-Review: Brad Humphrey <brad@instructure.com>
QA-Review: Steven Shepherd <sshepherd@instructure.com>
2017-02-03 23:42:43 +00:00
James Williams 435f4684e9 master courses: add restriction icons to files and folders
should not be able to delete a folder if it contains a
 locked file (even nested within subfolders)

also should not get a prompt to overwrite a locked
file when uploading one with the same name

closes #MC-67

Change-Id: I7cc731377e35d27bb4e97550db8c1deb0b527cac
Reviewed-on: https://gerrit.instructure.com/100494
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-01-27 16:27:52 +00:00
wdransfield d57aced80c Change assignment_configuration to similarity_detection
Fixes PLAT-2072

Test Plan:

- Install and LTI1 and LTI2 tool in a course.
  both should use the 'similarity_detection'
  placement.
- Create an assignment in the course with type
  online file uploads. Verify that both tools
  appear in the "plagiarism Review" select
  box.
- Select one of the tools and save the assignment.
- Edit the assignment and verify that the chosen tool
  is still selected.
- Select the other tool, save, and edit again.
- Verify the other tool is still selected.

Change-Id: I775f126f4138a636d5f2a01c57e41a1535df087d
Reviewed-on: https://gerrit.instructure.com/99759
Tested-by: Jenkins
QA-Review: August Thornton <august@instructure.com>
Reviewed-by: Nathan Mills <nathanm@instructure.com>
Product-Review: Weston Dransfield <wdransfield@instructure.com>
2017-01-26 14:33:43 +00:00
Neil Gupta 7298b8749f Get rid of multiple_grading_periods feature flag
Fixes CNVS-27109

Test plan:
Regression test everything related to multiple grading periods.

In particular, make sure:
* there is no mention of the multiple grading periods feature flag on
  the account or course features pages
* make sure grading periods UI always shows up on the account grading
  standards page
* make sure the grading periods UI only shows on the course grading
  standards page if legacy course grading periods exist for that course
  (see below)
* grading period dropdowns only show up everywhere else if there are
  grading periods to show. Otherwise, it should behave as if MGP is
  "disabled"
* Grade calculation should work as expected with and without grading
  periods

To create legacy course grading periods, you have to use rails console:
1. Find your course:
      course = Course.find(<id>)
2. Create a grading period group:
      group = course.grading_period_groups.create!(title: "2017")
2. Create a grading period:
      group.grading_periods.create!(
        weight: 1,
        title: 'Fall',
        start_date: 5.days.ago,
        end_date: 10.days.from_now
      )

Here's the list of known places grading periods can be seen in the UI:

Instructor Assignments page
  (https://community.canvaslms.com/docs/DOC-2615)
Student Assignments page
  (https://community.canvaslms.com/docs/DOC-3123)
Gradebook (https://community.canvaslms.com/docs/DOC-2785)
Gradebook Individual View
  (https://community.canvaslms.com/docs/DOC-2788)
Course Settings grading schemes page
  (https://community.canvaslms.com/docs/DOC-4042)
Student Grades page (https://community.canvaslms.com/docs/DOC-1291)
Dashboard global Grades page
  (https://community.canvaslms.com/docs/DOC-5464)

Change-Id: Iefac4b08120bd1699d4ed98bcb418089eec9b3b8
Reviewed-on: https://gerrit.instructure.com/99744
Reviewed-by: Spencer Olson <solson@instructure.com>
Tested-by: Jenkins
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2017-01-25 20:35:18 +00:00
Frank Murphy f98dfc79d5 Add course locale information to show / list courses endpoint
Fixes MBL-7155

Test Plan:
- Create a course, change locale to Spanish.
- GET http://web.canvaslms.docker/api/v1/courses. Verify that the
  course locale is included in the JSON body of the course.

Change-Id: Ifba9d409533ac4db6bb8d70ccc73c6f32e8414cb
Reviewed-on: https://gerrit.instructure.com/99991
Reviewed-by: Dan Minkevitch <dan@instructure.com>
Tested-by: Jenkins
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2017-01-23 22:24:51 +00:00
Jeremy Stanley 8692b78c76 add date override support to enrollment terms API
the API could actually set date overrides previously, but the
means to do so was not documented, and it could not retrieve them.
this commit fixes both.

test plan:
 - render documentation
 - use the enrollment terms API to create a term with dates
   overridden for specific enrollment types
   - ensure the only accepted enrollment types are those
     in the UI and the documentation and that other strings
     result in a 400 Bad Request error
 - use the enrollment terms API to edit override dates for
   existing terms (with and without changing the term name)
 - use the list enrollment terms endpoint with include[]=overrides
   and ensure override dates are returned properly

fixes CNVS-34227
fixes CNVS-34358

Change-Id: I012224b0cf5c7bdcf4cd0ae1a1e8d9d7965d42c1
Reviewed-on: https://gerrit.instructure.com/99563
Tested-by: Jenkins
Reviewed-by: Dan Minkevitch <dan@instructure.com>
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: Chris Ward <cward@instructure.com>
2017-01-23 20:14:38 +00:00
Ben Rinaca aee7ce3067 include lti_user_id when self requests profile
closes TD-1738

arc, via oauth, wants to make requests to canvas to get info about a
user, including what their lti user id is. this is so we can look up a
user in our system by that lti user id to determine who it is when they
have logged in via canvas oauth.

test plan:
- make sure requesting a user’s profile via api is still working
- make sure that when you request your own user profile via api you get
the lti user id included

Change-Id: I4c42b833baa677b31f5cd79de95daa63b26fba40
Reviewed-on: https://gerrit.instructure.com/99880
Tested-by: Jenkins
Reviewed-by: Andrew Butterfield <abutterfield@instructure.com>
QA-Review: Jahnavi Yetukuri <jyetukuri@instructure.com>
Product-Review: Ben Rinaca <brinaca@instructure.com>
2017-01-19 22:21:36 +00:00
James Williams 8e01d17e03 master courses: link graded discussions/quizzes with assignments
should use the same migration_id + master/child content tags
so they'll be restricted/unlinked together

closes #MC-63

Change-Id: I815c76d79b7407ecbcb2bff88dea9c90188800eb
Reviewed-on: https://gerrit.instructure.com/99887
Reviewed-by: Dan Minkevitch <dan@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
Tested-by: Jenkins
2017-01-19 17:25:46 +00:00
Stewie (Nicholas Stewart) c03e2345a4 Add due_date_required to Assignment API
Refs: SIS-2636

Test Plan: Make a GET request to the assignments api and verify that
  due_date_required is included as a boolean.
  Example url:
    http://canvas.docker/api/v1/courses/25/assignments/6

Change-Id: I517c9597be7f1f2833798556aadfd72cfb88b19e
Reviewed-on: https://gerrit.instructure.com/99609
Reviewed-by: Nick Houle <nhoule@instructure.com>
QA-Review: <mmcdermott@instructure.com>
Tested-by: Jenkins
Product-Review: Stewie aka Nicholas Stewart <nstewart@instructure.com>
2017-01-19 00:24:49 +00:00
Matthew Sessions 09f75dabbd Add course image to show/list courses endpoint
Fixes MBL-7126

Test Plan:
 - Enable the course image feature flags for a course
   (must first allow or enable on the account feature
   flags)
 - Add a course image to a course
 - Hit /api/v1/courses/<course_id>
   with include[]=course_image
 - It should return a field on the course called image_download_url
   which will be a url to either the flicker image or user uploaded
   image that they provided when adding their course image
 - Remove the include and it shouldn't return the
   image
 - Turn the feature flag off but provide the include
   parameter and it shouldn't return the image
 - This should all also work on the list courses endpoint
   the same include value

Change-Id: I6774201235dcd6806e870a4cddab6d63e06b8c42
Reviewed-on: https://gerrit.instructure.com/99664
Reviewed-by: Dan Minkevitch <dan@instructure.com>
Tested-by: Jenkins
QA-Review: David Tan <dtan@instructure.com>
Product-Review: Matthew Sessions <msessions@instructure.com>
2017-01-18 20:28:28 +00:00
James Williams 0517c58e71 master courses: do some locked restrictions+icons for quizzes
closes #MC-62

Change-Id: I39f72492d622749d44fc6c29e96768b25f5b1a7a
Reviewed-on: https://gerrit.instructure.com/99812
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-01-18 14:47:37 +00:00
Spencer Olson b16d399da9 allow post to sis when assignment in closed grading period
closes CNVS-34252

test plan:
1. Create an assignment with a due date in a closed grading period
2. As a teacher, verify you are able to enable or disable the
   "Post to SIS" setting and verify can save the assignment without
   any errors.

Change-Id: Id827fcd9bce7947a9bf15b3e8e64c6c4ed5d9b7a
Reviewed-on: https://gerrit.instructure.com/99703
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Tested-by: Jenkins
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Christi Wruck
2017-01-17 17:32:24 +00:00
James Williams 3207cbbf50 master courses: do some locked restrictions+icons for assignments
closes #MC-61

Change-Id: I14c237cfaa0304b6abf4b05377eac68047ee3f9a
Reviewed-on: https://gerrit.instructure.com/99702
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-01-17 14:46:28 +00:00
James Williams 4c40851416 master courses: do some locked restrictions+icons for discussions
closes #MC-60

Change-Id: I4bbe452b4688ecd7e56c31627d956a34235d1a68
Reviewed-on: https://gerrit.instructure.com/99665
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-01-17 14:36:22 +00:00
James Williams 0dae91f7b0 master courses: add lock/unlocked icons on wiki page index
closes #MC-59

Change-Id: Id9e244ad70baffc0073c5fcb569258e3d28b0081
Reviewed-on: https://gerrit.instructure.com/99644
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-01-17 14:36:13 +00:00
James Williams a9fab4f4af remove strong_params
refs #CNVS-32574

Change-Id: I4e255b989f8ad3fc6ec2f2699d4950dc0e5a419a
Reviewed-on: https://gerrit.instructure.com/99483
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-01-13 12:49:15 +00:00
Dan Minkevitch 78f5641ee3 Refactor comment locking algorithm to properly reflect course setting
Fixes CNVS-34215

Test Plan:
* Create an announcement
* As a student, see that the announcement is available to comments
* As an admin, enable the account setting to disable comments on announcements
* As a student, see that announcements have a locked icon and cannot have replies
* As an instructor, view the announcements page and click the settings icon for an announcement
* See that an "Open to Comments" option doesn't appear in the menu
* View (not edit) one specific announcement and click the settings icon
* See that an "Open for Comments" option doesn't appear in the menu
* As an admin, disable the account setting to disable comments on announcements
* As an instructor, view the announcements page and click the settings icon for an announcement
* See that an "Open to Comments" option appears in the menu and unlocks the announcement when clicked
* View (not edit) one specific announcement and click the settings icon
* See that an "Open for Comments" option appears in the menu

Change-Id: I99482c05a5d710095287108925cca969c76ec160
Reviewed-on: https://gerrit.instructure.com/99150
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Heath Hales <hhales@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
Product-Review: Chris Ward <cward@instructure.com>
Tested-by: Jenkins
2017-01-10 20:14:39 +00:00
James Williams 031242d031 strong params part Q
refs #CNVS-32574

Change-Id: Ifd139bf1e8296370d1d793ceed7c8e2e50440059
Reviewed-on: https://gerrit.instructure.com/94684
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-01-10 18:20:03 +00:00
James Williams 26ee38350a strong params part E-F
refs #CNVS-32574

Change-Id: Ib1fc9c81dbfa4ece200a15a23105dbfa6f84d0c6
Reviewed-on: https://gerrit.instructure.com/94677
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2017-01-10 18:16:54 +00:00
Joel Hough 766f0c9811 hide group file usage right publishing options
fixes CNVS-33258

group files are unpublished if they need usage rights and don't have
them, otherwise they are published

users can now see unpublished group files if they have file manage
permissions

test plan
- enable the usage rights feature flag
- upload a file to a group without setting a usage right
- ensure that the file is visible after a reload
- ensure the file has the "can't be published until usage rights are
set" warning icon
- ensure that the usage right dialog does not have publishing options.
check the dialog opened by:
 - clicking the usage right warning icon
 - clicking the cog menu usage right option
 - clicking the usage right toolbar button
- ensure that course file publishing and usage rights works as it did
before this commit

Change-Id: I19df7aca01cc20996988be173e69097bd9774eba
Reviewed-on: https://gerrit.instructure.com/98454
Reviewed-by: Clay Diffrient <cdiffrient@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Chris Ward <cward@instructure.com>
Tested-by: Jenkins
2017-01-05 22:20:33 +00:00
James Williams 84494e877d master courses: hide edit/delete for restricted wiki pages
proof of concept for first-pass all-or-nothing restrictions

closes #MC-50

Change-Id: I937aeb24892e4fca0b31d5cd2d05058e7ea01679
Reviewed-on: https://gerrit.instructure.com/98553
Tested-by: Jenkins
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2016-12-30 13:55:10 +00:00
Dan Minkevitch 507ea63cab Hide "Open to Comments" button on locked announcements
Fixes CNVS-33938

Test Plan:
* Create an announcement
* As a student, see that the announcement is available to comments
* As an admin, enable the account setting to disable comments on announcements
* As a student, see that announcements have a locked icon and cannot have replies
* As an instructor, view the announcements page and click the settings icon for an announcement
* See that an "Open to Comments" option doesn't appear in the menu
* As an admin, disable the account setting to disable comments on announcements
* As an instructor, view the announcements page and click the settings icon for an announcement
* See that an "Open to Comments" option appears in the menu and unlocks the announcement when clicked

Change-Id: Ibc837d2f1d76ec85790a9f00e74b21e18971c738
Reviewed-on: https://gerrit.instructure.com/98418
Tested-by: Jenkins
Reviewed-by: Frederick Polgardy <fpolgardy@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Dan Minkevitch <dan@instructure.com>
2016-12-29 23:16:55 +00:00
Neil Gupta 775e2e5c62 MGP Closed Assignment Locking Bug Fixes
Fixes CNVS-33974

Test plan:
* As an admin, setup a grading period that is closed
* Create 2 assignments:
  1) a group assignment that is due in the closed period
  2) a moderated assignment that is due in the closed period
* Masquerade as a teacher
* Try to edit each assignment:
  1) For assignment (1), the "New Group Category" button should be
     disabled.
  2) For assignment (1), you should be able to enable peer reviews,
     automatically assign them, and set reviews per user to any number
     greater than 0. Save should work.
  3) For assignment (2), clicking the moderated grading checkbox should
     not enable the peer reviews checkbox in any browser.

Change-Id: I089e40be543531de711f816636f1fb8712b23ba8
Reviewed-on: https://gerrit.instructure.com/98348
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Tested-by: Jenkins
QA-Review: Nathan Rogowski <nathan@instructure.com>
Product-Review: Neil Gupta <ngupta@instructure.com>
2016-12-22 23:16:10 +00:00
Stewie (Nicholas Stewart) e0fe10d25f Fix assignment group update
Fixes: SIS-2665

Test Plan: Create an assignment group with integration data.
Then make an update call to it with different integration data.
Verify that the new integration data is merged into the old.

Change-Id: I7c3516dade23a2bdc3d38b793054872cb84d1b97
Reviewed-on: https://gerrit.instructure.com/98203
Reviewed-by: Nick Houle <nhoule@instructure.com>
Tested-by: Jenkins
QA-Review: Steven Shepherd <sshepherd@instructure.com>
Product-Review: Brad Humphrey <brad@instructure.com>
2016-12-21 18:43:42 +00:00
Mysti Sadler e19b207542 Set up controllers for web zip export API
closes OFFW-44

test plan:
- start a web export (button on the modules page in the ui)
- go to api/v1/courses/:course_id/web_zip_exports and
  ensure you can see the list of web zip exports
- go to api/v1/courses/:course_id/web_zip_exports/:id and
  ensure you can see the one web zip export

Change-Id: Iede777011926dc01ad7f76d2a0b3c7f4183089fb
Reviewed-on: https://gerrit.instructure.com/97533
Tested-by: Jenkins
Reviewed-by: Cameron Sutter <csutter@instructure.com>
QA-Review: Nathan Rogowski <nathan@instructure.com>
Product-Review: Mysti Sadler <mysti@instructure.com>
2016-12-20 20:36:38 +00:00
Nick Houle 4f0e8f08ba Add Ability to Create/Update Assignment Group integration_data
Fixes: SIS-2600

Test Plan:
- Run Migrations
- Use your favorite REST Client
- Create a new AssignmentGroup, confirm the integration_data
  is populated
- Update that AssignmentGroup, confirm the integration_data
  is populated

Change-Id: I2f91fd7153d0ab01e16af32b74b53cb2ef50553d
Reviewed-on: https://gerrit.instructure.com/94478
Reviewed-by: Nick Houle <nhoule@instructure.com>
Reviewed-by: Stewie aka Nicholas Stewart <nstewart@instructure.com>
Tested-by: Jenkins
QA-Review: Steven Shepherd <sshepherd@instructure.com>
Product-Review: Oxana
2016-12-20 19:51:54 +00:00
wdransfield e087da776f OriginalityReport: enable in gradebook
Fixes PLAT-1999

Test Plan
- Create an assignment with a valid submission,
  attachment, and originality report. The originality
  report should not have the 'origanality_report_url'
  field set.
- Navigate to gradebook and verify the 'tunitin' speech
  bubble icon appers next to the submission. Click on the
  submission to open the details modal and verify that
  an icon appears displaying the originality score.
  Verify that the icon does not link to any page when
  clicked.
- Set the 'originality_report_url' of the existing
  OriginalityReport to a valid URL and save it.
- Navigate back to speedgrader and verify the same
  'turnitin' speech bubble appears next to the submission.
  Open the submission details modal and verify the same
  icon appears displaying the originality score. Verify
  that clicking on the icon navigates to the url set on
  the OriginalityReport
- Create an assignment with speedgrader enabled. Create
  a submission and attachment with valid turnitin_data.
- Navigate to gradebook and verify that the turnitin
  submission behaves as it did before.

Change-Id: I9b3577ea55fe802753ffcd0b46bd4c5a4a2ea244
Reviewed-on: https://gerrit.instructure.com/97019
Tested-by: Jenkins
Reviewed-by: Nathan Mills <nathanm@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Weston Dransfield <wdransfield@instructure.com>
2016-12-20 19:31:06 +00:00
Matthew Berns a1aeb610fb revert OUT-20
closes OUT-1012

test plan:
- full regression testing of outcomes, including:
creation
deletion
moving
migrating
importing
taking
results
report export

Change-Id: Id0708d9133bab8977e6fcf7f91a56fb25f15b735
Reviewed-on: https://gerrit.instructure.com/97729
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
QA-Review: Alex Ortiz-Rosado <aortiz@instructure.com>
Product-Review: Michael Brewer-Davis <mbd@instructure.com>
Tested-by: Matt Berns <mberns@instructure.com>
2016-12-20 00:20:34 +00:00