closes EVAL-2643
flag=none
Test Plan:
1. Create a peer review assignment that accepts Text Entry submissions,
and a peer review assignment that accepts On Paper submissions.
2. For both assignments, assign Student A to review Student B.
3. For the text entry assignment: as Student A, before submitting try
to directly access the submission details page for Student B:
/courses/<course_id>/assignments/<text_entry_assignment_id>
/submissions/<student_b_id>
Notice you get 'Access Denied'.
4. For the on paper assignment: as Student A, try to directly access
the submission details page for Student B:
/courses/<course_id>/assignments/<on_paper_assignment_id>
/submissions/<student_b_id>
Notice you are able to access the page.
5. As Student A, submit to the text entry assignment, and then verify
you are able to access the submission details page for Student B.
Change-Id: I370c4f06c33303fb404599cc89695b6bd8fb13b0
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/301221
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Deborah Kwak <deborah.kwak@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
Reviewed-by: Eduardo Escobar <eduardo.escobar@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
closes EVAL-2170
flag=none
Test Plan:
1. Create a course and enroll several students.
2. Create an assignment with moderated grading enabled.
3. Submit to the assignment with two students.
4. Make one of the students concluded and the other inactive.
5. Go to the gradebook and select the option for concluded and inactive
enrollments to appear.
6. Go to SpeedGrader to view the submissions, and you should see the
submission content for the deactivated and concluded students.
Change-Id: I334138db44d8bbc0d17dc3b8be4243cc63ddb78f
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/285313
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
Product-Review: Jody Sailor
Reviewed-by: Syed Hussain <shussain@instructure.com>
Reviewed-by: Eduardo Escobar <eduardo.escobar@instructure.com>
[skip-stages=Flakey]
the balance. mostly. Lint/UriEscapeUnescape is put in the pending
block because it's so touchy, and I didn't want to deal with it
right now
all manual
Change-Id: Ibeb81e013f56f160d51f7d237a9bcfe98daa1e53
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/277569
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
closes EVAL-1628
flag=none
Test plan:
- Have an assignment with submissions from at
least 2 students
- Create an override for one student with a
lock date in the past
- Ensure the lock date for the other students
is in the future
- Leave comments on your student submissions
if you haven't already so they can be
reassigned
- Attempt to reassign for the student with
the lock date in the past. You should get
a flash error with a message stating the
assignment is locked.
- Attempt to reassign for another student.
This should be successful.
Change-Id: Iaaa2e30401a320556fdfefa54e2067ce4d4b8155
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/269924
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
Product-Review: Jody Sailor
closes OUT-4329
flag=reassign_assignments
test-plan:
- create a published assignment within a course
- have a student submit the assignment
- verify that the teacher can reassign the
assignment
Change-Id: I9dd85f90f317823f5818a7e6c991294755e7154b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/261404
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Brian Watson <bwatson@instructure.com>
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
QA-Review: Michael Brewer-Davis <mbd@instructure.com>
Product-Review: Michael Brewer-Davis <mbd@instructure.com>
closes OUT-4033
[fsc-timeout=50]
flag=reassign_assignments
This feature allows teachers to reassign an assignment
to a student after they've submitted to the assignment
and the teacher has provided feedback via comments.
The reassignment will appear in their planner with
a "Redo" tag visible next to the assignment.
Only supports assignments of submission type "Online".
test plan:
- enable "Reassign Assignments" feature option
- in a course, create a student account
- as a teacher, create an assignment with a due date
- as a student, confirm the assignment appears in
their planner
- as a student, submit to the assignment
- as a teacher, open the submission in SpeedGrader
- reassign the assignment to the student by:
* adding a comment to the assignment
* clicking the "Reassign Assignment" button
- as a student, confirm the assignment appears
with a "Redo" pill in the planner, along with
the comment from the teacher
- as a student, resubmit to the assignment and
confirm the assignment shows as completed again
in the planner without the "Redo" pill
- repeat the above steps, except with an assignment
that has "Anonymous Grading" enabled and it should
behave in the same way
- repeat the above steps but with more students and
no due date on the assignment, but with various
assignment overrides with due dates and some students
assigned to those overrides (using course sections)
and confirm the "Resassign Assignment" button only
appears for those students with assignment overrides
(and hence due dates), with the button being disabled
until the student both submits to the assignment and
the teacher has provided a comment.
Change-Id: Id745b50f3810378804e0728e544ebf6bff8f756a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/251663
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
Product-Review: Jody Sailor
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Pat Renner <prenner@instructure.com>
Change-Id: I3ac07e45861aecaca50f82dbb7dccf169bc11edc
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/250566
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Simon Williams <simon@instructure.com>
Product-Review: Simon Williams <simon@instructure.com>
closes TALLY-563
flag = none
...obviously
test plan:
* Smoke test New Gradebook
* Smoke test Grade Summary
Change-Id: I0bf7f962f5e910002b69d727666464356a1e3ccf
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/225876
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Gary Mei <gmei@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
Product-Review: Keith Garner <kgarner@instructure.com>
closes TALLY-162
Test Plan
- Enable New Gradebook
- Create a quiz assignment with a couple multiple choice questions.
- Set its post policy to post manually.
- Have a student take the quiz.
- As the student, go to the grades page:
`courses/:course_id/grades`
- Open the developer tools to the Network tab.
- Use the What-If scores feature on the muted assignment.
- Verify in the response that the submission json data does not
include the body field.
Change-Id: Idd6866b1595971128129edc60e306135baa952dd
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/217080
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Tested-by: Jenkins
Product-Review: Spencer Olson <solson@instructure.com>
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
QA-Review: Gary Mei <gmei@instructure.com>
Commenting as an anonymous peer reviewer will no longer return in the
json response the user_id of the student being reviewed.
fixes GRADE-2150
Test Plan
- Create an anonymous peer review assignment.
- Assign Student A to peer review Student B.
- As Student A, submit for the assignment.
- As Student A, leave a comment for Student B during the peer review.
- Verify that, in the network response for the comment, Student B's
user_id is not included in the submission object.
Change-Id: I4caa44736744553c165174836ca94d4a9676de71
Reviewed-on: https://gerrit.instructure.com/207438
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
QA-Review: Derek Bender <djbender@instructure.com>
Product-Review: Keith Garner <kgarner@instructure.com>
Assignments with a post policy of automatic should allow comments to
count as posting. This fixes for the submission details page, and
also fixes the display in the sidebar of the assignment details page.
fixes GRADE-2308
Test Plan
- Create an assignment with a post policy of automatic.
- Submit to the assignment as a student.
- Navigate to the submission details page as the student.
- Verify that there is no verbiage about grades being hidden.
- Navigate to the student's submission within SpeedGrader.
- Leave a comment.
- Verify that the student can see the comment in the submission
details page and the assignment details page.
- Leave a grade.
- Verify that the student can see the grade in the submission
details page and the assignment details page.
Change-Id: Ib768aa4860959b0b1517b128279194f029b5aec0
Reviewed-on: https://gerrit.instructure.com/201647
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Keith Garner <kgarner@instructure.com>
Tested-by: Jenkins
Product-Review: Keith Garner <kgarner@instructure.com>
QA-Review: Gary Mei <gmei@instructure.com>
Quizzes include the autograde result in the submission body (see
quiz_submission#update_assignment_submission and
quiz_submission.rb#update_scores). Until that behavior is removed,
hide the submission body when a quiz is still muted, in order to
prevent a student from seeing the results prematurely.
closes GRADE-2145
Test Plan
- Create a quiz assignment with a couple multiple choice questions.
- Mute it from the gradebook.
- Have the student take the quiz.
- As the student, go to the submission details page:
`courses/:course_id/assignments/:assignment_id/submissions/:user_id`
- Open the developer tools to the Network tab.
- Use the What-If scores feature on the muted assignment.
- Verify in the response that the submission json data does not
include the body field.
Change-Id: Ie6ab891589259a5824322e165f88b2fa21261931
Reviewed-on: https://gerrit.instructure.com/192141
Tested-by: Jenkins
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Keith Garner <kgarner@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: Gary Mei <gmei@instructure.com>
Product-Review: Keith Garner <kgarner@instructure.com>
fixes GRADE-1902
When an assignment is anonymous and still muted, students submitting
late will not have their names exposed in notifications.
test plan:
* Submission Steps
1. Sign in or act as a student
2. Submit to the anonymous assignment
3. Submit to the non-anonymous assignment
A. Setup
1. Create an anonymous assignment, due yesterday
2. Create a non-anonymous assignment, due yesterday
B. Test Plan for Immediate Email
1. Set your "Late Grading" notification preferences for immediate
email
2. Perform the Submission Steps above
3. As the teacher, find the late submission emails
4. Verify the student name is present for the non-anonymous email
5. Verify the student name is absent for the anonymous email
6. Flag them as spam, because you ain't got time for that nonsense
C. Test Plan for Daily/Weekly Email
1. Set your "Late Grading" notification preferences for daily/weekly
email
2. Perform the Submission Steps above
3. Wait a day, or a week, ... or whatever
4. As the teacher, find the late submission emails
5. Verify the student name is present for the non-anonymous email
6. Verify the student name is absent for the anonymous email
7. Write a strongly-worded response while singing
"If I Could Turn Back Time"
D. Test Plan for Twitter
1. Set your "Late Grading" notification preferences for Twitter
2. Perform the Submission Steps above
3. As the teacher, check your Twitter
4. Verify the student name is present for the non-anonymous message
5. Verify the student name is absent for the anonymous message
6. Block the presidental Twitter account
E. Test Plan for SMS
1. Set your "Late Grading" notification preferences for Twitter
2. Perform the Submission Steps above
3. As the teacher, fumble with your phone while using the bathroom
If you drop it in the toilet, you MUST repeat all steps above.
4. Verify the student name is present for the non-anonymous text
5. Verify the student name is absent for the anonymous text
6. Report the texts to the FCC
Requires published course with student/teacher enrollments and 'Anonymous Grading' feature option
As a teacher in the course, set your 'Late Grading' notification preferences to daily/weekly summary
Create an assignment with a due date in the past
As a student, submit to the assignment
Wait a day/week
Note notification was sent to course instructor containing the name of the student who submitted
Change-Id: I36b711d965c38281dc200dcafd253af192218637
Reviewed-on: https://gerrit.instructure.com/178349
Tested-by: Jenkins
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Gary Mei <gmei@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
When an peer review-based assignment is muted, show peer reviewers'
comments to the student.
fixes GRADE-1678
Test plan:
- Have a course with some students
- Create an assignment with online submissions and enable peer review
- Assign some peer reviews
- At least one student (S1) should be reviewed by multiple peers
- Mute the assignment
- Logged in as S1:
- Submit something
- Leave a comment
- As a teacher, comment on S1's submission without unmuting
- As the peer-reviewing students, comment on S1's submission
- The following should hold:
- Peer reviewers should see their own comments and no one else's
- The student being reviewed should see their own comments and all
peer reviewers' comments
- Teachers should see all comments
- Unmute the assignment
- The student should now additionally see comments from the teacher
- Peer reviewers should still only see their own comments
- Smoke test comment visibility with some other assignment types to
make sure nothing has broken:
- Moderated (with some comments by provisional graders)
- Anonymous (muted and unmuted)
- Non-anonymous (muted and unmuted)
Change-Id: I121bce0aef199729215704016edff44f162bf919
Reviewed-on: https://gerrit.instructure.com/175078
Tested-by: Jenkins
Reviewed-by: Keith Garner <kgarner@instructure.com>
Reviewed-by: Gary Mei <gmei@instructure.com>
QA-Review: Gary Mei <gmei@instructure.com>
Product-Review: Jonathan Fenton <jfenton@instructure.com>
fixes GRADE-1630
When an assignment is anonymous and still muted, students submitting
late will not have their names exposed in the email notification.
Test Plan
- Check your teacher's notification settings for late assignment
submissions and verify that they are set to send immediately.
- Create a plain assignment, due yesterday.
- Create an anonymous assignment, due yesterday.
- For each assignment:
- As a student, submit to that assignment. Have the submission
uniquely identify the student somehow.
- As another student, repeat the previous step.
- As the teacher, check your email for the notifications generated by
the submissions.
- The plain assignment email notification should show the name of
the student who submitted late. There should be a link to the
submission details page. Verify this for both html and plain text.
- The anonymous assignment email notification should _not_ show the
name of the student who submitted late. There should be a link to
the speed grader page of that submission. Verify this for both html
and plain text.
Change-Id: I3e0f07f392dc653dcc67a3cff7da409960d6a96a
Reviewed-on: https://gerrit.instructure.com/168528
Tested-by: Jenkins
QA-Review: Gary Mei <gmei@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Keith Garner <kgarner@instructure.com>
fixes GRADE-1500
SpeedGrader would load submission comments with one set of rules, but
on creation of a new comment, would get submission comments from a
different set of rules. This lead to different submission comments
being shown after submitting a comment that should not be shown,
impacting moderated assignments.
Test Plan
Setup
- Have three graders (Grader 1, Grader 2, Final Grader).
- Have two students (Student 1, Student 2).
- Create a moderated assignment with a grader count of 2 and graders
CANNOT view other graders' comments.
- Have both students submit and leave unique comments.
(As Grader 1 for Student 1)
- Navigate to Student 1's submission in SpeedGrader.
- Leave a grade and unique comment.
(As Grader 2 for Student 1)
- Navigate to the assignment in SpeedGrader.
- Verify you do not see Grader 1's comments.
- Leave a grade and unique comment.
- Verify only Grader 2 and Student 1 comments are visible.
- Reload the page and verify you still only see Grader 2's and
Student 1's comments.
(As Grader 1 for Student 1)
- Reload the assignment in SpeedGrader.
- Verify you still only see Grader 1's and Student 1's comments.
- Submit another comment.
- Verify you still only see Grader 1's and Student 1's comments.
- Repeat the above, minus the setup, substituting Student 1 with
Student 2.
(As Final Grader)
- Navigate to the assignment in SpeedGrader.
- Verify you see all comments submitted by all graders and students.
- Submit a new comment.
- Verify that you see all comments plus the newly created one.
- Navigate to the Moderate Grades page.
- Select a provisional grade from Grader 1 for Student 1.
- Select a provisional grade from Grader 2 for Student 2.
- Post grades.
- Navigate to the assignment in SpeedGrader.
- Verify you see all comments.
(Grader 1)
- Navigate to the assignment in SpeedGrader for Student 1.
- Verify you see Grader 1, Student 1, and Final Grader's comments.
- Navigate to Student 2's submission in SpeedGrader.
- Verify you see Grader 1, Grader 2, Student 2, and Final Grader's
comments.
(Grader 2)
- Navigate to the assignment in SpeedGrader for Student 1.
- Verify you see Grader 1, Grader 2, Student 1, and Final Grader's
comments.
- Navigate to Student 2's submission in SpeedGrader.
- Verify you see Grader 2, Student 2, and Final Grader's comments.
* Verify comments still work as expected for non-moderated
assignments as well.
not moderated. not muted
Students see everything
Graders see everything
Admins see everything
not moderated, muted
Students see students' own comments
Graders see everything
Admins see everything
Change-Id: If045947b17fe47a5c0c1301d003e77198d4b947f
Reviewed-on: https://gerrit.instructure.com/164500
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
QA-Review: Jeremy Neander <jneander@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
changes checks for :moderate_grades permissions to instead call
Assignment#permits_moderation?
closes GRADE-1227
Test Plan:
1. Verify only the final grader or an admin with select_final_grade
permission can give final provisional grades.
2. General smoke test on the Grade Summary page (logged in as final
grader and logged in as admin) and in SpeedGrader (logged in as
final grader, logged in as admin, and logged in as provisional
grader) for moderated assignments.
Change-Id: If039cc36c373097bab81993335b5f2306f90b17e
Reviewed-on: https://gerrit.instructure.com/155973
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Gary Mei <gmei@instructure.com>
Tested-by: Jenkins
QA-Review: Adrian Packel <apackel@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
closes: GRADE-1312
test plan: specs pass
Change-Id: I274ae211ab55d7c0a135c609f9917df5ccc2c716
Reviewed-on: https://gerrit.instructure.com/157760
Tested-by: Jenkins
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Gary Mei <gmei@instructure.com>
QA-Review: Derek Bender <djbender@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
closes: GRADE-1266
Test Plan:
enroll two students and two TAs and the teacher is the final grader (it
shouldn't matter if the final grader is a TA or a teacher, in fact feel
free to rotate them for more possibilities). If you're short on time the
following could be done on one assignment and for each test case toggle the
settings on and off, but then it would be difficult to quickly pull of the
correct configuration, if problems arise.
The titles of each feature are how they are found in the Assignment form.
This can cause some confusion due to some rules being enabling or disabling
a phrase with a 'not' present so be careful!
/------------+---------------------------+-----------+-----------------------+---------------------+-----------------------\
| assignment | anonymous (graders cannot | moderated | graders can view | graders cannot view | final grader can view |
| | view student names) | grading | each other's comments | each other's names | other grader names |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| I (basic) | | | | | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| II | | on | on | | on |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| III | | on | on | | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| IV | | on | | | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| V | on | on | on | on | on |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| VI | on | on | on | on | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| VII | on | on | on | | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| VIII | on | on | | | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| IX | on | | | | |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
Note: if a cell is empty, it means `off`,
For assignments with Moderated Grading enabled the `Number of graders` will
always be `2` (the final grader makes three enrollments we'll use for
Speed Grader)
for each assignment do the following:
have the first student (Student A) submit their homework
- As the first TA (TA1), create a published comment and draft comment on
Student A's submission
- As the second TA (TA2), create a published comment and draft comment on
Student A's submission
- As the final grader (the teacher), create a published comment and draft
comment on Student A's submission
For the follow instructions, negatives are presented in uppercase (`CANNOT`)
for enhanced clarity. Ensure for each grader (unless final grader is
specified) in each assignment referenced via the parens:
(I)
1. can view student names
2. can view each other's comments
(II)
1. can view student names
2. can view each other's comments
3. final graders can view other graders' names
(III)
1. can view student names
2. can view each other's comments
3. final grader CANNOT view other graders' names
(IV)
1. can view student names
2. CANNOT view each other's comments
3. final grader can view each others' comments
(V)
1. CANNOT view student names
2. can view each other's comments
3. CANNOT view each other's names
4. final grader view other graders' names
(VI)
1. CANNOT view student names
2. can view each other's comments
3. CANNOT each other's names
4. final grader CANNOT view other graders' names
(VII)
1. CANNOT view student names
2. can view each other's comments
3. can view each other's names
4. final grader CANNOT view other graders' names
(VIII)
1. CANNOT view student names
2. CANNOT each other's comments
3. final grader can view each others' comments
(IX)
1. CANNOT view student names
Change-Id: I3e9a8787f04cf03a38ea651aa85b3eaa98f41f9c
Reviewed-on: https://gerrit.instructure.com/154391
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
fixes GRADE-976
test plan:
* Make sure the AMM flag is off
* All AMM features should be visible and work
* The Anonymous Marking and Moderated feature flags should be visible
* Toggling the AMM feature flag should do nothing
Change-Id: Ie0c52c23748389c6f5df5b85e8580bdf474c0a52
Reviewed-on: https://gerrit.instructure.com/152067
Reviewed-by: Adrian Packel <apackel@instructure.com>
Tested-by: Jenkins
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
closes: GRADE-1125
test plan:
- enable the anonymous moderated marking feature flag
- create an anonymously graded assignment
- create a text submission for this assignment
- in speedgrader, score the submission
- the score should update on the page (not revert back!)
- the response object should not contain user_id (including
in the submission_history)
- toggle off the anonymoud grading for the assignment
- in speedgrader, rescore the submission
- the score should update
- the response object should not contain anonymous_id anywhere
Change-Id: I2911d5e09a25be4a7ab58404eed209002b6cfbce
Reviewed-on: https://gerrit.instructure.com/148896
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Adrian Packel <apackel@instructure.com>
Tested-by: Jenkins
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
Add a component in SpeedGrader to allow the moderator to select among
provisional grades or enter a custom grade. Update the grade input to
match the selected grade and indicate which grader is responsible.
closes GRADE-1069
Test plan:
NOTE: you only need to test this with points-based assignments at the
moment. Other grading types will probably work but the display will be
screwy. Those will be addressed more fully in a future ticket.
* Turn on Anonymous Moderated Marking if the feature flag still exists
* Have a course with multiple teachers and students
* Create a moderated assignment and designate one of the teachers to
be the final grader.
* [If the old moderation page still exists when you read this]
On the existing moderation page, add all the students to the
assignment's moderation set.
* As one or more non-final-grader teachers, hand out some grades for
the assignment in SpeedGrader (no need to go through the moderation
page; you can just use the SpeedGrader link on the assignment page).
Make sure there is at least one student who does *not* receive any
provisional grades for the assignment.
* As the final grader, open the assignment in SpeedGrader.
* For any student who HAS received provisional grades, there should
be a "Show/Hide Details" link that toggles a set of radio buttons
showing the existing provisional grades.
* Do some testing with these and make sure they adhere to the
behavior described in the next section.
* For the student who has NOT received provisional grades, the grade
selector should not appear, but you should be able to assign a
grade and submit comments as usual.
Provisional grade selector behavior:
* The top radio button, corresponding to the grade assigned by the
moderator, should always be labeled "Custom." Below that, one
radio button should appear for each provisional grade handed out,
showing the grader and the assigned grade.
* For assignments where grader names are visible to the final grader,
the each button's label should show that grader's name.
* For assignments where grader names are NOT visible to the final
grader, the labels should be "Grader 1", "Grader 2" and so on,
listed in that order.
* When you select a radio button other than "Custom", the value
associated with that button should appear in the grade text input
and the selected grader should be shown to the right of the input.
* When you select the "Custom" button, the last custom value you
entered should appear in the text input, and "Custom" should appear
as the grader name.
* If you directly enter a value in the grade input and tab out,
the "Custom" button should be selected (and the label changed).
* Your selections should persist in moving back/forward between
students and refreshing the page.
Change-Id: I3696f9e0edbbe1aa81aa85fa6e51e229fc2136b5
Reviewed-on: https://gerrit.instructure.com/151472
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Jeremy Neander <jneander@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
When loading or selecting a student in SpeedGrader, an ajax call is made
to obtain the provisional grade status for that student. This provides a
way to perform this request anonymously.
closes GRADE-1128
test plan
- given an anonymously graded and moderated assignment
- given some students assigned to said assignment
- when visiting speed grader
- then the page loads provisional grades endpoint which can be viewed in
the dev tools on the network tab. The URL looks like:
/api/v1/courses/1/assignments/1/anonymous_provisional_grades/status
Change-Id: Ib3d3a7b58fc8fa044d240dee0c1bef08b80384d0
Reviewed-on: https://gerrit.instructure.com/151607
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
closes OUT-1892
Test plan:
1. Create an account with a subaccount
2. Add outcomes to the account and subaccount
3. Add a course to the subaccount
4. Go to the course outcomes page
5. Open the Find dialog to find account outcomes
Verify that you see the account and subaccount
names when navigating the dialog. Do not add
outcomes.
6. Go to the subaccounts page and update the
names of the account and the subaccount
7. Go back to the course outcomes page
8. Open the Find dialog to find account outcomes
Verify that you see the updated names
when navigating the dialog
Change-Id: Ib80010208d9e1f792239720bb8f7b79de6a795b9
Reviewed-on: https://gerrit.instructure.com/140430
Tested-by: Jenkins
Reviewed-by: Matt Berns <mberns@instructure.com>
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
QA-Review: Andrew Porter <hporter-c@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
This changeset will add the workflow_state column to score_metadata, add
a concurrent index to this column, and backfill nulls with 'active'. A
followup commit will add a not null constraint.
Other features include Score#destroy, Score#destroy_permanently!,
Score#undestroy all calling correspoding methods on the associated
ScoreMetadata, if present.
The shared examples for Soft::Deletion have been finished.
closes: GRADE-746
Test Plan
Part One: Verifying Migrations:
- after running the predeploy and before running the postdeploy,
create some score_metadata with workflow states that are nil,
'active', and 'deleted'. then, run the postdeploy.
- verify there are no null values for workflow_state in the
score_metadata table.
- verify that null values have been changed to 'active'.
- verify that all other values remain unchanged.
Part Two: Verifying Soft Deletion and new APIs
1. given an active score object
course = Course.create!
user = User.create!
enrollment = StudentEnrollment.create!(course: course, user: user)
score = enrollment.scores.create!
metadata = score.create_score_metadata!(
calculation_details: {foo: :bar}
)
2. When destroying a score
score.destroy
3. Then metadata is soft-deleted
metadata.reload.deleted? # => true
4. When undestroying score
score.undestroy
5. Then metadata is also active
metadata.reload.active? # => true
6. When destroying a metadata
metadata.destroy
7. Then metadata is soft-deleted
metadata.deleted? # => true
8. When undestroying metadata
metadata.undestroy
9. Then metadata is active
metadata.active? # => true
10. When permanently destroying a metadata
metadata.destroy_permanently!
11. Then metadata is for real dog gone
metadata.destroyed? # => true
12. Given a score with a metadata
metadata = score.create_score_metadata!(
calculation_details: {foo: :bar}
)
13. When permanently destroying a score
score.destroy_permanently!
14. Then metadata is for real dog gone
metadata.destroyed? # => true
15. Given a score with no associated metadata
score = enrollment.scores.create!
16. When destroying a score
score.destroy
17. Then the score is soft-deleted
score.deleted? # => true
18. When undestroying a score
score.undestroy
19. Then the score is active
score.active? # => true
20. When permanently destroying a score
score.destroy_permanently!
21. Then score is for real dog destroyed
score.destroyed? # => true
Change-Id: I251c621c679ae9f3b4e0784367e596c28266faaf
Reviewed-on: https://gerrit.instructure.com/139061
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
Reviewed-by: Jeremy Neander <jneander@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
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>
closes CNVS-30896
test plan:
when creating and editing assignments, quizzes, and
discussion topics in a course with multiple grading
periods enabled, teachers should not be able to change
the effective due date for anyone who already has
the assignment due in a closed grading period.
Change-Id: I2befe4a7431d4020843013041360b8d7b38c15ec
Reviewed-on: https://gerrit.instructure.com/91671
Tested-by: Jenkins
Reviewed-by: Derek Bender <djbender@instructure.com>
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Christi Wruck
destroy! is now a method in rails
refs #CNVS-26056
Change-Id: I66e512265ff5cda6a12d7820e3cf69c77ef9e746
Reviewed-on: https://gerrit.instructure.com/69721
Tested-by: Jenkins
Reviewed-by: Cody Cutrer <cody@instructure.com>
Product-Review: James Williams <jamesw@instructure.com>
QA-Review: James Williams <jamesw@instructure.com>
Grading Periods previously could overlap in arbitrary ways.
This adds a server side validation to ensure that when a Grading
Period is persisted it will not overlap with existing Grading
Periods in the same Grading Period Group. Grading Periods in
different groups are not validated in this way. The front end will
report errors if attempting to save a grading period that overlaps.
Our definition of overlapping is any two grading periods
intersecting each other except if the end date of an earlier
grading period is equal to the start date of a later grading period
These two grading periods would be considered overlapping
(when in the same group):
GradingPeriod.new(
start_date: 0.months.ago, end_date: 2.months.from_now
)
GradingPeriod.new(
start_date: 1.months.from_now, end_date: 3.months.from_now
)
These two grading periods do *NOT* overlap, even thought the
end_date of the first is the same as the start date of the
second (again, these would need to be in the same group):
GradingPeriod.new(
start_date: 0.months.from_now, end_date: 2.months.from_now
)
GradingPeriod.new(
start_date: 2.months.from_now, end_date: 3.months.from_now
)
Fixes CNVS-19858
Change-Id: I0c901fa35f3225186948bbd8d61ef368cd15c939
Reviewed-on: https://gerrit.instructure.com/53953
Tested-by: Jenkins
Reviewed-by: Dylan Ross <dross@instructure.com>
QA-Review: Michael Hargiss <mhargiss@instructure.com>
Product-Review: Derek Bender <dbender@instructure.com>
fixes CNVS-20361
This is the first step in extracting soft deletion and
only touches grading period models. I audited other models
to see if this extraction would work for them, but no other
models met my criteria which are as follows
- [ ] defines workflow state of _only_ active and deleted
- [ ] active scope where state is active
(not `workflow_state<>'deleted'`)
In `def destroy`:
- [ ] state set to deleted
- [ ] then save
- [ ] runs callbacks
Many variants of soft deletion exist, including scoping
active to `workflow_state<>'deleted'`, not running
callbacks after save, and wrapping the state change in a
transaction block.
This is the first step in making soft deletion behave
consistently. There are approximately 30 models that have
an implementation of soft deletion.
Change-Id: I6cb48571377a4bb403285f95c058020b46ca3a30
Reviewed-on: https://gerrit.instructure.com/53821
Reviewed-by: Derek Bender <dbender@instructure.com>
Product-Review: Strand McCutchen <smccutchen@instructure.com>
QA-Review: Strand McCutchen <smccutchen@instructure.com>
Tested-by: Jenkins