Commit Graph

726 Commits

Author SHA1 Message Date
Jason Gillett 42dfa7ee6a Fix react inbox when a hard-deleted user is present
fixes VICE-3246
flag=react_inbox

Exclusion: Reply in threads with hard deleted users is broken
Will get fixed in VICE-3251

Test Plan
1.  Create a user
2.  Create a conversation with that user
3.  Reply with a different user
4.  Hard Delete the user
4a. Hard delete script will be placed below
5.  Open the inbox with the user that recieved the message
6.  Verify that no errors are thrown and that messages are visible

Hard delete:

userToDelete = User.find(ID)
userToDeleteId = userToDelete.id

CommunicationChannel.where(user_id:userToDeleteId).map {|mem| mem.destroy_permanently!}
Enrollment.where(user_id:userToDeleteId).map do |enrollment|
  Score.where(enrollment_id:enrollment.id).map { |participant| participant.destroy_permanently! }
  enrollment.destroy_permanently!
end
Pseudonym.where(user_id:userToDeleteId).map { |participant| participant.destroy_permanently! }
Submission.where(user_id:userToDeleteId).map { |participant| participant.destroy! }
UserAccountAssociation.where(user_id:userToDeleteId).map { |participant| participant.destroy_permanently! }
UserNote.where(user_id:userToDeleteId).map { |participant| participant.destroy_permanently! }

userToDelete.destroy_permanently!

Change-Id: Ia42cccb580f26de0579e510749ada1f539220637
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/305937
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Reviewed-by: Chawn Neal <chawn.neal@instructure.com>
Product-Review: Chawn Neal <chawn.neal@instructure.com>
2022-11-29 19:00:14 +00:00
Martin Yosifov 3c949b432d Update question bank alignment title when bank name is updated
closes OUT-5381
flag=outcome_alignment_summary

Test plan:
- Enable Improved Outcomes Management FF
- Enable Outcome Alignment Summary FF
- Go to Course > Outcomes and get course id from URL
- Open devtools > network tab
- Create an outcome then retrieve its id from the
graphql query response in network tab
- Create a question bank and align it with the outcome
- Open in browser canvas.docker/graphiql
- Execute query below replacing outcome and course ids
query MyQuery {
  learningOutcome(id: "1") {
    alignments(contextId: "2", contextType: "Course") {
      title
    }
  }
}
- Verify that the alignment title is the question bank name
- Go to http://canvas.docker/courses/{id}/question_banks,
replace id with course id, select the question bank and
update its name
- Rerun query and verify that alignment title is
the updated question bank name

Change-Id: Ic192bd0d32abbd35e7bdaaa669451f40e01fcbcc
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/305611
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
Reviewed-by: Angela Gomba <angela.gomba@instructure.com>
QA-Review: Angela Gomba <angela.gomba@instructure.com>
2022-11-28 17:00:21 +00:00
Eduardo Escobar b806c62f58 add counter of available peer reviews in modal
closes EVAL-2751
flag=assignments_2_student
flag=peer_reviews_for_a2

test plan:
- enable the FF "Assignment Enhancements - Student".
- enable the FF "Peer Review Support in Assignment
  Enhancements".
- have a published course.
- have a course with a teacher and 2 students (S1
  and S2).
- create an assignment A1 with "Peer Reviews"
  enabled and the "Peer Reviews Appear Anonymously"
  disabled.
- create an assignment A2 with "Peer Reviews"
  enabled and the "Peer Reviews Appear Anonymously"
  enabled.
- assign some peer reviews to the students for
  both assignments.

with anonymous PR disabled
- as the student S1 create a submission
  for the assignment A1.
- notice a modal is present just after hitting
  the submit button.
- check that the number of peer reviews to complete
  in the modal should match with the number of
  peer reviews associated to the assignment.
- check that the number of available peer reviews
  is zero and the "Peer Review" button is disabled.
- as the student S2 create a submission for the
  assignment A1.
- as the student S1 create a new submission for
  the assignment A1.
- notice a modal is present just after hitting
  the submit button.
- check that the number of available peer reviews
  is one and the "Peer Review" button is enabled.
- check that clicking the "Peer Review" button
  redirects you to the available submission
  to review.

with anonymous PR enabled
- as the student S1 create a submission
  for the assignment A2.
- notice a modal is present just after hitting
  the submit button.
- check that the number of peer reviews to complete
  in the modal should match with the number of
  peer reviews associated to the assignment.
- check that the number of available peer reviews
  is zero and the "Peer Review" button is disabled.
- as the student S2 create a submission for the
  assignment A2.
- as the student S1 create a new submission for
  the assignment A2.
- notice a modal is present just after hitting
  the submit button.
- check that the number of available peer reviews
  is one and the "Peer Review" button is enabled.
- check that clicking the "Peer Review" button
  redirects you to the available submission
  to review.

Change-Id: I4bf6be9c499484d225d7d91c90b11695f7a58bc3
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/305174
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Cameron Ray <cameron.ray@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
Product-Review: Jody Sailor
2022-11-28 15:09:46 +00:00
Jason Gillett 5f3d2b1eba Fix inbox.message.sent.media metric
fixes VICE-3247
flag= none

Test Plan
1. Specs Pass
2. Further testing will be done in deployed environment

Change-Id: Iaf5448b08d8bde833a0b7fa23aada9112771e1ec
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/305832
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Caleb Guanzon <cguanzon@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
2022-11-21 19:32:08 +00:00
Omar Gerardo Soto-Fortuño 01785b4037 Fix to properly display sharded users on observerEnrollmentsConnection
closes VICE-3238
flag=none

test plan:
  - Tests pass

qa risk: low

Change-Id: I2ce9ebd69085318ed1ca357ac0e8375b80b144ef
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/305614
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Drake Harper <drake.harper@instructure.com>
Product-Review: Drake Harper <drake.harper@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
2022-11-17 21:55:17 +00:00
Martin Yosifov 3afade69c7 Exclude deleted quizzes when calculating indirect alignments
closes OUT-5382
flag=outcome_alignment_summary

Test plan:
- Enable Improved Outcomes Management FF
- Enable Outcome Alignment Summary FF
- Go to Course > Outcomes and copy course id from URL
- Create an outcome and an assignment
- Create a question bank with 2 questions and
align it with the outcome
- Create a classic quiz with two questions from
the aligned question bank
- Open in browser canvas.docker/graphiql
- Execute query below replacing course id
query MyQuery {
  course (id: 1) {
    outcomeAlignmentStats {
      totalOutcomes
      alignedOutcomes
      totalAlignments
      totalArtifacts
      alignedArtifacts
      artifactAlignments
    }
  }
}
- Verify that query returns the following data:
totalOutcomes: 1, alignedOutcomes: 1, totalAlignments: 3,
totalArtifacts: 2, alignedArtifacts: 1, artifactAlignments: 2
- Delete the quiz, rerun the query and verify that it returns:
totalOutcomes: 1, alignedOutcomes: 1, totalAlignments: 3,
totalArtifacts: 1, alignedArtifacts: 0, artifactAlignments: 0

Change-Id: I8f3a14c119e427ed770e26e8d5bc322e3ca7f1fa
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/304974
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
QA-Review: Angela Gomba <angela.gomba@instructure.com>
Reviewed-by: Dave Wenzlick <david.wenzlick@instructure.com>
2022-11-17 20:56:58 +00:00
Jason Gillett 4d7fd17364 Add Depth type discussion_entry type
This property will simplify the logic behind nested limits

Refs VICE-3223
flag=split_screen_view

Test Plan
1. Create a discussion thread
2. Verify that the depth level is correct for the loaded entries

Level 1 reply ( topic reply) == Depth 1
level 2 reply == Depth 2
level 3 reply == Depth 3
etc..

Change-Id: I3f30bf59e535592e2491e7928f78c03c893b63cd
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/305330
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Drake Harper <drake.harper@instructure.com>
Product-Review: Drake Harper <drake.harper@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
2022-11-15 21:37:32 +00:00
Chawn Neal 4f7a136af8 Add graphql user.discussions_splitscreen_view and mutation
This mutation will allow us to update a
user's preference discussions_splitscreen_view?

refs VICE-3115
flag=none

Test Plan:
 1) Specs pass.

Notes:
For the FE we need this mutation.
I added the type to the user, so we can optionally return
the updated data.

Change-Id: If64fb7cf0bafbeb12f008ba6fc749026a7d7a0e9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/305162
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Reviewed-by: Jason Gillett <jason.gillett@instructure.com>
Product-Review: Jason Gillett <jason.gillett@instructure.com>
2022-11-10 22:27:07 +00:00
Caleb Guanzon 4a4b0b604a make quoting level 1 entries show quote
flag=discussion_topics_post
fixes VICE-3113

the reason it was not showing was because
the backend does not show quotes for level
0 (the topic's entry), and level 1(the replies)
to level 1 entries

this change makes it so that level 1 entries
will now show quoted replies as intended.
Level 0 entries do not have a parent entry
so they will not show quotes as expected

test plan:
- with isolated and split screen feature flags
OFF and redesign ON,
- quote a level 1 reply, and make sure to have include
quoted reply in message checked
- post your reply
- verify that the created reply shows the quoted
message

Change-Id: Ib085851b45e933f36aac840e02a3282a6968db20
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/304823
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Drake Harper <drake.harper@instructure.com>
Product-Review: Drake Harper <drake.harper@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
2022-11-07 22:09:11 +00:00
Omar Gerardo Soto-Fortuño fd13cf45ff Limit the retrieval of discussionEntryVersionsConnection
flag=none

test plan:
  - Tests pass

qa risk: low

Change-Id: I7967457ca43791362d6bd485d035824fc3046d3a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/304681
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Chawn Neal <chawn.neal@instructure.com>
Reviewed-by: Jason Gillett <jason.gillett@instructure.com>
QA-Review: Chawn Neal <chawn.neal@instructure.com>
Product-Review: Chawn Neal <chawn.neal@instructure.com>
2022-11-03 19:35:14 +00:00
Omar Gerardo Soto-Fortuño ea1e6872d1 Create DiscussionEntryVersionType and add connection
flag=none

test plan:
  - Tests pass

qa risk: low

Change-Id: Ib926fe2aed9681815cd82c66095ae1eeffc25125
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/304488
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Chawn Neal <chawn.neal@instructure.com>
QA-Review: Chawn Neal <chawn.neal@instructure.com>
Product-Review: Chawn Neal <chawn.neal@instructure.com>
2022-11-01 18:54:54 +00:00
Chawn Neal a2314df6cc Fix pagination with unread filter
fixes VICE-3170
flag = react_discussion

Test Plan:
Solution:
- any entries marked as read after selecting the unread filter,
will still return under the unread filter, until the filter changes
or a page refresh.
- note the mutation will sill update and the blue unread icon
will disappear.

Have at least 60 unread entries (3 pages).
Have some unread entries.
1. Use the unread filter.
2. Notice the unread entries can update to read,
however. If you switch pages the same set of total unread entries
will be returned.
3. Upon page refresh or switching filter, then
returning to unread the entries will no longer return.

Change-Id: I911f85ed8a23b7f8bdfa22edce5745e79b389307
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/304016
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Migration-Review: Jeremy Stanley <jeremy@instructure.com>
2022-11-01 16:01:20 +00:00
Drake Harper f85fbffc3a Add quote reply to discussion entry kebab
closes VICE-3112
flag=split_screen_view

Test Plan:
 - on a discussion entry, open the kebab menu
 - click the “Quote Reply”
 - should see reply preview when editor opens
 - should match designs

Change-Id: I40d3efc2a1bdc3541a940b750d094e0fd7e66ccd
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/304042
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
2022-10-31 15:55:51 +00:00
Martin Yosifov 6f26445b29 Display module name if aligned artifact is unpublished
closes OUT-5352
flag=outcome_alignment_summary

Test plan:
- Enable Improved Outcomes Management FF
- Enable Outcome Alignment Summary FF
- Go to Course > Outcomes
- Create an outcome and a rubric then align them
- Create unpublished assignment, graded discussion
and quiz and align them with the rubric
- Go to Course > Modules, create unpublished module and add
to it the unpublished assignment, graded discussion and quiz
- Go to Course > Outcomes > Alignments and expand the outcome
- Verify that the module name, appended with (unpublished) is
displayed for assignment, graded discussion and quiz alignments
- Go to Course > Modules and publish the assignment,
graded discussion and quiz
- Go to Course > Outcomes > Alignments and expand the outcome
- Verify that the module name, appended with
(unpublished) is displayed for the assignment,
graded discussion and quiz alignments
- Go to Course > Modules and publish the module
- Go to Course > Outcomes > Alignments and expand the outcome
- Verify that the module name is displayed for the
assignment, graded discussion and quiz alignments

Change-Id: If8a0c3001530b5085cda4b3bb2e5a80b1dbbab0a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/303843
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Martin Yosifov <martin.yosifov@instructure.com>
Reviewed-by: Wilmer Corrales <wilmer.corrales@instructure.com>
Reviewed-by: Angela Gomba <angela.gomba@instructure.com>
QA-Review: Angela Gomba <angela.gomba@instructure.com>
2022-10-28 19:31:13 +00:00
Omar Gerardo Soto-Fortuño 547cdcac07 Add observerEnrollmentsConnection to MessageableUserType
flag=none
closes VICE-3185

test plan:
  - Tests pass
  - Run query on GraphiQL and ensure correct data is returned:
{
  legacyNode(_id: "3", type: User) {
    ... on User {
      recipients(context: "course_2_observers") {
        usersConnection {
          nodes {
            observerEnrollmentsConnection(contextCode: "course_2") {
              nodes {
                associatedUser {
                  _id
                  name
                }
              }
            }
          }
        }
      }
    }
  }
}

qa risk: low

Change-Id: I43ec42004ba6eec8a058bc7b8d834403f6291a27
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/304114
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Caleb Guanzon <cguanzon@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
2022-10-27 15:16:06 +00:00
Jason Gillett c3e4d3ca64 Create method to retrieve messageable observers of a recipient list
closes VICE-3187
flag=react-inbox

Test Plan
1. Create a course with 2 observers
2. Link observers to students
3. Go to graphiql
4. As a teacher run the recipientsObservers field for the course
5. Verify that both observes are returned
6. as teacher run recipientsObservers for a single student with observer
7. verify that the correct observer is returned

Change-Id: I18f489751a98beec80eb9b3ac50e4345dc26ca07
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/303852
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
2022-10-25 03:47:41 +00:00
Jason Gillett b09b23217e Implement split screen view code if FF is on
closes VICE-3195
flag= split_screen_view

Test Plan
1. enable discussion redesign and split screen view
2. make sure isolated view is disabled
3. verify that splitScreenViewContainer is rendered when entry is opened
4. verify that splitscreenview works just like isoalted view

Change-Id: I086feadfd32bc6a6db8bb683de0083af9f0c804e
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/303619
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
2022-10-20 16:14:14 +00:00
Chawn Neal 80f02dd755 Add nil handling for graphql CP and CMP
fixes VICE-3162
flag=react_inbox

Test Plan:
1. Specs pass.
2. Passes on beta, see ticket.
3. Hard delete a user part of conversations and inbox
 shouldnt break.
 3a. My specs run through this/show how to do this;
 3b. This may be superfluous.

Notes:
For ConversationListHolder.js:
isError => useQuery.error is an object;
see documentation: https://www.apollographql.com/docs/react/data/queries/#error

Change-Id: Iaa6c0e15e5f6f325460a1f5fa14ff463d7882d67
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/303253
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
2022-10-14 20:06:36 +00:00
Cameron Ray 429e5f32ff Observers observing a student show a blue dot for unread feedback
Test plan:
  - Create teacher
  - Create student
  - Create observer observing student
  - As teacher leave a comment on a student submission
  - As student view feedback.
  - Blue dot should appear next to feedback and disappear after 1 second
  - As observer view feedback.
  - Blue dot should appear next to feedback and disappear after 1 second

Refs EVAL-2413

flag=assignment_enhancements

Change-Id: Ia52203b2ebe8c6f112c19fbcbe59269fc179b76f
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/301419
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
Product-Review: Deborah Kwak <deborah.kwak@instructure.com>
2022-10-13 15:30:49 +00:00
Caleb Guanzon 7ba029f2fa guard against nil messages
flag=discussion_topics_post
fixes VICE-3155

test plan:
- see the test, i verified
that the test 500's out if you
remove the & from message&.include

Change-Id: I7dd43706912a16a7baea5ec28f690cc667ccec66
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/302802
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Jeffrey Johnson <jeffrey.johnson@instructure.com>
2022-10-10 18:14:27 +00:00
Kai Bjorkman c756094974 allow setting visibility of originality report
flag=assignments_2_student
closes EVAL-2646

Test Plan:
    - You do not need to have turnitin set up
    - have a course with a teacher and some students
    - create a 'online_text_entry' assignment
    - submit to the assignment as a student
    - In the rails console:
        submission.update!(turnitin_data:
                {:eula_agreement_timestamp=>"1579233651431",
                :last_processed_attempt=>1,
                "submission_*<insert submission id>*"=>
                {:status=>"scored",
                :object_id=>"1242926909",
                :similarity_score=>75.0,
                :web_overlap=>0.0,
                :publication_overlap=>0.0,
                :report_url=>"www.example.com",
                :student_overlap=>0.0,
                :state=>"warning"}})
    - ensure when the student views their assignment they can see their
    originality report
    - In the rails console:
        assignment.update!(turnitin_settings:{:originality_report_visibility=>"after_due_date"}, due_at: 2.days.ago)
    - check that it is still visible
    - In the rails console:
        assignment.update!(turnitin_settings:{:originality_report_visibility=>"after_due_date"}, due_at: 2.days.from_now)
    - check that it is now NOT visible
    - In the rails console:
        assignment.update!(turnitin_settings:{:originality_report_visibility=>"after_grading"})
    - ensure that it is still NOT visible
    - In the rails console:
        submission.update!(score: 10, workflow_state: 'graded')
    - ensure that it is visible now
    - In the rails console:
        assignment.update!(turnitin_settings:{:originality_report_visibility=>"immediate"})
    - ensure that it is still visible
    - assignment.update!(turnitin_settings:{:originality_report_visibility=>"never"})
    - check that it is NOT visible

Change-Id: I8b87371858a1626fd50a0213ddcaa6deefbbfd81
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/301764
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Eduardo Escobar <eduardo.escobar@instructure.com>
Product-Review: Jody Sailor
2022-09-30 15:25:25 +00:00
Martin Yosifov 9390dd8b4e Restrict access to graphql alignments data
closes OUT-5302
flag=outcome_alignment_summary

Test plan:
- Enable Improved Outcomes Management FF
- Enable Outcome Alignment Summary FF
- Go to Course > Outcomes
- Create a course outcome, an assignment, a clasic quiz and
two rubrics; align the outcome with one of the rubrics and
align that rubric with the assignment
- Add a global outcome to the course, align it with the
other rubric and align that rubric with the quiz
- Open devtools -> network tab and reload the outcomes page;
get outcome ids from graphql response and course id from URL
- Create teacher and student in course and masquerade as teacher
- Go to canvas.docker/graphiql
- Execute query below replacing id with the course id
query Stats {
  course (id: "1") {
    outcomeAlignmentStats {
      totalOutcomes
      alignedOutcomes
      totalAlignments
      totalArtifacts
      alignedArtifacts
    }
  }
}
- Verify that the query returns the following data
totalOutcomes: 2, alignedOutcomes: 2, totalAlignments: 4,
totalArtifacts: 2, alignedArtifacts: 2
- Execute query below replacing id with the course outcome id
and contextId with the course id
query Alignments {
  learningOutcome(id: "1") {
    alignments(contextId: "1", contextType: "Course") {
      title
      contentType
    }
  }
}
- Verify that query returns two alignments - to the assignment
and to the first rubric
- Rerun the query replacing id with the global outcome id
- Verify that query returns two alignments - to the quiz
and to the second rubric
- Masquerade as student
- Rerun the Stats query and verify that outcomeAlignmentStats
is null
- Rerun the Alignments query for both the course and global
outcomes and verify that alignments are null in both cases

Change-Id: I277e17be088a75c0e1ad329d4ce78d1e4ce7e08d
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/301768
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Angela Gomba <angela.gomba@instructure.com>
Reviewed-by: Chrystal Langston <chrystal.langston@instructure.com>
QA-Review: Angela Gomba <angela.gomba@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
2022-09-28 23:01:53 +00:00
Kai Bjorkman 4c1b963dad make tii graphql type aware of error/status keys
This tii graphql interface was first implemented 3 years ago and has
sat stale for a few years until recently when we allowed for
orignality reports to be viewed within assignment enhancements. It was
not written to be aware of either 'status' of 'student_error' as
possible keys set by the plagiarism service. (these are only set when
the turnitin product for this account has expired) This was causing us
to try to load an object via an asset string that did not exist.

flag=assignments_2_student
refs EVAL-2610

Test Plan:
    -specs pass

Change-Id: I7c9b622db9c3ea73c472f66bef26def044c9a37e
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/301568
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Reviewed-by: Eduardo Escobar <eduardo.escobar@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Spencer Olson <solson@instructure.com>
2022-09-21 21:31:13 +00:00
Eduardo Escobar fdf00b346a complete peer review when a new comment is added
closes EVAL-2636
flag=assignments_2_student
flag=peer_reviews_for_a2

test plan:
- enable the FF "Assignment Enhancements - Student".
- enable the FF "Peer Review Support in Assignment
  Enhancements".
- have a published course.
- have a course with a teacher and 2 students (S1
  and S2).
- create an assignment A1 with "Peer Reviews"
  enabled.
- create an assignment A2 with "Peer Reviews"
  enabled and add a rubric to it.
- create an assignment A3 with "Peer Reviews"
  disabled.
- assign a peer review to the student S1 for the
  assignments A1 and A2.

PR enabled without rubrics
- as the student S1 click on the "Required Peer
  Review 1" for the assignment A1.
- add a comment using the comments tray in the
  assignment view.
- check using a rails console that the
  corresponding assessment request has it's
  workflow_state value is "completed".
* there is a script in the ticket description
  to get the assessment request object in the
  rails console.

PR enabled with rubrics
- as the student S1 click on the "Required Peer
  Review 1" for the assignment A2.
- add a comment using the comments tray in the
  assignment view.
- check using a rails console that the
  corresponding assessment request has it's
  workflow_state value is "assigned".
* there is a script in the ticket description
  to get the assessment request object in the
  rails console.

normal assignment
- as the student S1 click on the assignment A3.
- add a comment using the comments tray in the
  assignment view.
- check that the comments are created as
  expected with no errors.

Change-Id: I281ebf25c4e18e3e8a36ebe44c116dbcadd8bc28
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/301084
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
Product-Review: Deborah Kwak <deborah.kwak@instructure.com>
2022-09-21 19:39:57 +00:00
Drake Harper 0ef8f787f2 Add metric count messages sent in react inbox
closes VICE-2884
flag=none

Test Plan:
 - metric gathering will be verifeid post merge
 - tests pass and make sense

Change-Id: Idc6b510a24b8de807be0dc35c63aa72e9e749950
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/301132
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
QA-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
2022-09-20 19:55:04 +00:00
Drake Harper ddaa87e79a Add inbox attachment sent react
closes VICE-2888
flag=none

Test Plan:
 - metrics will be verified post merge
 - tests pass and make sense

Change-Id: I23172a923e0cd398fafea6a56b587b0d5998ae39
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/301238
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
2022-09-20 19:54:49 +00:00
Drake Harper 33a347fe96 Add mark unarchived react inbox metric
closes VICE-3025
flag=none

Test Plan:
 - metric gathering will be verified post merge
 - tests pass and make sense

Change-Id: I9414ef1fe3d9348ea2928e9fe7866a3d37af84ca
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/301108
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
QA-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
2022-09-20 14:09:42 +00:00
Angela Gomba c93ee5ad73 Include indirect alignments in alignment summary stats
closes OUT-5273
flag=outcome_alignment_summary

Test Plan:
- Enable Improved Outcomes Management FF
- Enable Outcome Alignment Summary FF
- Create a new course
- Go to Course > Outcomes
- Create outcome and course question bank (with at least 2
  questions) and align the outcome
  with the bank
- Create a quiz and add 1 question from the question bank to it
- Go to Course > Outcome > Alignments tab
- Observe that the stats reflect:
  - Left side:
    - 1 outcome
    - 100% coverage
    - 3.0 avg alignments per outcome
  - Right side:
    - 1 alignable artifact
    - 100% with alignments
    - 1 avg alignments per artifact
- Edit the quiz and remove the question
- Go to Course > Outcome > Alignments tab
- Observe that the Right side updated to:
  - 0% with alignments
  - 0 avg alignments per artifact
- Edit the question bank and remove one of the questions
- Go to Course > Outcome > Alignments tab
- Observe that the Left side updated to:
  - 2.0 avg alignmnest per outcome

Change-Id: Ie6c461fb9e059e370f3e6c2868680b07ca6d8e49
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/300811
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
Reviewed-by: Martin Yosifov <martin.yosifov@instructure.com>
QA-Review: Martin Yosifov <martin.yosifov@instructure.com>
2022-09-16 16:59:56 +00:00
Martin Yosifov b987312c89 Add indirect outcome alignments via question banks to graphql
closes OUT-5272
flag=outcome_alignment_summary

Test plan:
- Enable Improved Outcomes Management FF
- Enable Outcome Alignment Summary FF
- Go to Course > Outcomes
- Create one outcome, one rubric, one assignment, one graded
discussion and one quiz
- Align the outcome to the rubric and align the rubric to the
assignment, graded discussion and quiz
- Create a module and add to it the assignment and the quiz
- Go to Course > Outcomes > Alignments tab and expand outcome
- Verify that the following alignments are displayed:
rubric, assignment, graded dicussion and quiz
- Verify that the alignments are sorted alphabetically by title
- Click on each of the alignment titles/links and verify that
each opens the corresponding alignment in a new tab
- Click on the module name/link for the assignment and the quiz
and verify that each loads the modules page in a new tab
- Go to /courses/{id}/question_banks and create a question bank
(replace id with the course id)
- Align the question bank with the outcome, create one question
and add it to the quiz via quiz > edit > questions > find
- Go to Course > Outcomes > Alignments tab and expand outcome
- Verify that the following alignments are displayed:
rubric, assignment, graded dicussion, question bank and quiz
- Verify that the quiz alignment is displayed only once
- Click on the question bank title/link and verify that it
loads the question bank in a new tab
- Click on the quiz title/link and verify that it loads
the quiz in a new tab
- Click on the module name/link for the quiz and verify that
it loads the modules page in a new tab
- Go to Course -> Quizzes, select the quiz and remove rubric
via quiz -> show rubric (from menu) -> delete
- Go to Course > Outcomes > Alignments tab and expand outcome
- Verify that the following alignments are displayed:
rubric, assignment, graded dicussion, question bank and quiz
- Click on the quiz title/link and verify that it loads
the quiz in a new tab
- Go to Course -> Quizzes, select the quiz and remove the
questions from the quiz via quiz > edit > questions
- Go to Course > Outcomes > Alignments tab and expand outcome
- Verify that the following alignments are displayed:
rubric, assignment, graded dicussion and question bank
- Click on Course -> Quizzes, select Manage Question Banks from
menu, select the question bank and remove outcome alignment
- Go to /courses/{id}/question_banks, select the question bank
and remove the outcome alignment (replace id with the course id)
- Go to Course > Outcomes > Alignments tab and expand outcome
- Verify that the following alignments are displayed:
rubric, assignment and graded dicussion

Change-Id: I66cec340d63eec0a26eeff319754e4bfc0a48492
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/300792
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Angela Gomba <angela.gomba@instructure.com>
Reviewed-by: Dave Wenzlick <david.wenzlick@instructure.com>
QA-Review: Angela Gomba <angela.gomba@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
2022-09-16 16:59:29 +00:00
Evan Battaglia 332d40fa4f CMC all_tools_for I: refactor into class
refs INTEROP-7565
flag=none

This commit should have no effect. This class will be extended in future
commits to provide support for cross-shard CMC parent accounts.

Test plan:
- smoke test a couple usages of all_tools_for to make sure they still
  work, such as:
  - external apps page -- from a course, make sure both course and
    account tools are shown
  - creating an LTI assignment -- list of external tools

Change-Id: I7aad8cf059a9946dd9261cc51b46a7c22fd36d48
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/300780
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Xander Moffatt <xmoffatt@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
Product-Review: Evan Battaglia <ebattaglia@instructure.com>
2022-09-15 21:40:59 +00:00
Kai Bjorkman d011235a10 originality reports in A2 *updated*
flag=originality_reports_for_a2
flag=assignments_2_student
closes EVAL-2602

Local Test Plan:
    -You do not need to have turnitin set up locally
    -have a course with a teacher and students
    -create a 'online_text_entry' assignment
    -create 2 'online_upload' assignments
    - submit to each assignment as the student
    - one online upload with three files and the other with just one
    - submit to the online upload with two files and ensure that the
    files are displayed above the upload field instead of below
    -in the rails console:
        -find each of those submissions and save them in a variable
        - set TII data for each submission with the commands below
        - you will need to replace the attachment asset string to the
        correct attachment_id for your environment
        - online_upload w/ three files sub: $ sub1.update!(turnitin_data:
            {:eula_agreement_timestamp=>"1579233651431",
            :last_processed_attempt=>1,
            "attachment_1"=>
                {:status=>"scored",
                :object_id=>"1242926909",
                :similarity_score=>35.0,
                :web_overlap=>0.0,
                :publication_overlap=>0.0,
                :student_overlap=>0.0,
                :state=>"warning"},
            "attachment_2"=>
                {:status=>"error",
                :object_id=>"1242926909",
                :similarity_score=>0.0,
                :web_overlap=>0.0,
                :publication_overlap=>0.0,
                :student_overlap=>0.0,
                :state=>"error"},
            "attachment_3"=>
                {:status=>"scored",
                :object_id=>"1242926909",
                :similarity_score=>10.0,
                :web_overlap=>0.0,
                :publication_overlap=>0.0,
                :student_overlap=>0.0,
                :state=>"acceptable"}})
        - online_upload w/ one file sub: $ sub2.update!(turnitin_data:
            {:eula_agreement_timestamp=>"1579233651431",
            :last_processed_attempt=>1,
            "attachment_1"=>
                {:status=>"scored",
                :object_id=>"1242926909",
                :similarity_score=>35.0,
                :web_overlap=>0.0,
                :publication_overlap=>0.0,
                :student_overlap=>0.0,
                :state=>"warning"}})
        - online_text_entry sub: $ sub3.update!(turnitin_data:
            {:eula_agreement_timestamp=>"1579233651431",
            :last_processed_attempt=>1,
            "submission_1100"=>
            {:status=>"scored",
            :object_id=>"1242926909",
            :similarity_score=>75.0,
            :web_overlap=>0.0,
            :publication_overlap=>0.0,
            :student_overlap=>0.0,
            :state=>"warning"}})
    - visit the each assignment again as the student
    - ensure on the online_text_entry with sub has the originality report
    rendered next to the progress_tracker in the header with the
    appropriate similarity score and color
    - ensure on the online_upload sub has the originality reports
    listed along with the files names and sizes that were uploaded
    and the 2nd file in the list does not have a report shown due to
    the error status
    - ensure the online_upload that only has one attachment has
    the originality report shown in the header
    - all reports should have a tool tip when hovering over them

Deployed Test Plan:
    - Have a deployed version of canvas with TII setup
    - have a course with a teacher and students
    - create an assignment with 'online_text_entry' and 'online_upload'
    options
    - submit to the assignment with each submission type
    - ensure the originality report is shown for each submission and
    file upload correctly w/ files that cannot be scored
    - ensure the report_url is reachable when the originality report tab
    is selected
    - smoke test with a few different submissions and attempts and
    ensure the same originality report info is shown with the
    'assignments_2_student` flag enabled and disabled

Change-Id: Ieecae7deedc7f25b83c1ff29576b394e81bbc1ea
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/300116
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Aaron Shafovaloff <ashafovaloff@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>
2022-09-14 19:19:58 +00:00
Drake Harper 58308df1c6 Add react submission comment page load metric
closes VICE-2903
flag=none

Test Plan:
 - metric gathering will be verified post merge
 - tests pass and make sense

Change-Id: I69cef6cd56526e3fc8d335d1ea0042f76738f369
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/300323
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Caleb Guanzon <cguanzon@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
2022-09-07 15:55:38 +00:00
Drake Harper 3f5d4ed336 Add page load metrics react
closes VICE-2892
closes VICE-2895
closes VICE-2901

flag=none

Test Plan:
 - metrics will be verified post merge
 - test pass and make sense

Change-Id: I76b359f17273cf0d765bef47c2bdbd0264d366c0
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/300101
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
2022-09-01 18:42:22 +00:00
Martin Yosifov 792a7ae127 Add alignments to artifacts to graphql stats endpoint
closes OUT-5268
flag=outcome_alignment_summary

Test plan:
- Enable Improved Outcomes Management FF
- Enable Outcome Alignment Summary FF
- Go to Course > Outcomes and copy course id from URL
- Create two outcomes, one rubric, one assignment, one
graded discussion and one classic quiz
- Align one outcome to the rubric and align the
rubric to the graded discussion and the quiz
- Open in browser canvas.docker/graphiql
- Execute query below replacing course id
query MyQuery {
  course (id: 1) {
    outcomeAlignmentStats {
      totalOutcomes
      alignedOutcomes
      totalAlignments
      totalArtifacts
      alignedArtifacts
      artifactAlignments
    }
  }
}
- Verify that query returns the following data
totalOutcomes: 2, alignedOutcomes: 1, totalAlignments: 3,
totalArtifacts: 3, alignedArtifacts: 2, artifactAlignments: 2
- Create a new rubric and align it with the second outcome
and with the assignment
- Rerun query and verify that it returns the following data
totalOutcomes: 2, alignedOutcomes: 2, totalAlignments: 5,
totalArtifacts: 3, alignedArtifacts: 3, artifactAlignments: 3

Change-Id: Ia082bf6679f99993e7a18f390b20af40d8c68a8b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/299476
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Chrystal Langston <chrystal.langston@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
Reviewed-by: Angela Gomba <angela.gomba@instructure.com>
Reviewed-by: Dave Wenzlick <david.wenzlick@instructure.com>
2022-08-31 13:46:20 +00:00
Luke Krikorian 1477e50d5d Add syllabus body field to course graphql schema
closes gh-2071
closes DEMO-224
flag=none

Test Plan
- Create a new course
- Add a syllabus to the course
- Navigate to https://<canvas_host>/graphiql and enter the following query:
    query MyQuery {
        course(id:COURSE_ID_HERE) {
            syllabusBody
        }
    }
- Ensure that the result returns the syllabus body HTML.

Change-Id: I3215a7126a6b5140063163ae92608fe6f15d76e9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298986
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Xander Moffatt <xmoffatt@instructure.com>
Reviewed-by: Dustin Cowles <dustin.cowles@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
Product-Review: Dustin Cowles <dustin.cowles@instructure.com>
2022-08-24 20:37:35 +00:00
Caleb Guanzon 3406b38593 add starred pages loaded react stat
flag=react_inbox
fixes VICE-2899

test plan:
none

Change-Id: I534a044e4782a52ebe21f07be412b0306e2641e3
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/299202
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jason Gillett <jason.gillett@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
Product-Review: Jason Gillett <jason.gillett@instructure.com>
2022-08-22 16:17:48 +00:00
Nic Nolan bec4b2c834 show last activity and total activity columns if permitted
Use the ENV permission 'read_reports' to determine if columns
should be shown to the user. Update GraphQL types to prevent
data from being exposed when user does not have permissions.

closes VICE-3014
flag=react_people_page

Test Plan:
- Tests pass
- With FF off, visit a course people page as user with teacher role
- Ensure course has at least one user with data in the
  Last Activity and Total Activity columns of the roster table
- In a new tab, turn on the 'People Page Upgrade' FF
- Visit the same course people page using the new tab
- Last Activity and Total Activity columns should be present
  and data should be the same between legacy and upgrade pages
- Enter student view
- Last Activity and Total Activity columns should not be present

Change-Id: Id185303c4dce2dd884706fa83d699b058be2ed8c
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298949
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
2022-08-18 16:24:05 +00:00
Kai Bjorkman 451011302c show originality report in A2
closes EVAL-1690
flag=assignments_2_student

Local Test Plan:
    -You do not need to have turnitiin set up locally
    -have a course with a teacher and students
    -create a 'online_text_entry' assignment
    -create a 'online_upload' assignment
    -submit to each assignment as the student
    - submit to the online upload with two files and ensure that the
    files are displayed above the upload field instead of below
    -in the rails console:
        -find each of those submissions and save them in a variable
        - set TII data for each submission with the commands below
        - online_upload sub: $ sub.update!(turnitin_data:
            {:eula_agreement_timestamp=>"1579233651431",
            :last_processed_attempt=>2,
            "attachment_1"=>
                {:status=>"scored",
                :object_id=>"1242926909",
                :similarity_score=>35.0,
                :web_overlap=>0.0,
                :publication_overlap=>0.0,
                :student_overlap=>0.0,
                :state=>"warning"},
            "attachment_2"=>
                {:status=>"scored",
                :object_id=>"1242926909",
                :similarity_score=>10.0,
                :web_overlap=>0.0,
                :publication_overlap=>0.0,
                :student_overlap=>0.0,
                :state=>"acceptable"}})
        - online_text_entry sub: $ sub.update!(turnitin_data:
            {:eula_agreement_timestamp=>"1579233651431",
            :last_processed_attempt=>1,
            "submission_1100"=>
            {:status=>"scored",
            :object_id=>"1242926909",
            :similarity_score=>75.0,
            :web_overlap=>0.0,
            :publication_overlap=>0.0,
            :student_overlap=>0.0,
            :state=>"warning"}})
    - visit the each assignment again as the student
    - ensure on the online_text_entry sub has the originality report
    rendered next to the progress_tracker in the header with the
    appropriate similarity score and color
    - ensure on the online_upload sub has the originality reports
    listed along with the files names and sizes that were uploaded
    -ensure when you select the file link or file icon in the file list,
    the file preview is shown in docviewer or the preview should be
    displayed as unavailable

Deployed Test Plan:
    - Have a deployed version of canvas with TII setup
    - have a course with a teacher and students
    - create an assignment with 'online_text_entry' and 'online_upload'
    options
    - submit to the assignment with each submission type
    - ensure the originality report is shown for each submission and
    file upload correctly
    - ensure the report_url is reachable when the originality report tab
    is selected
    - smoke test with a few different submissions and attempts and
    ensure the same originality report info is shown with the
    'assignments_2_student` flag enabled and disabled

Change-Id: I3e53276743295ee7217ceb53486038747e58ddfc
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/292206
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Spencer Olson <solson@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
2022-08-17 22:48:52 +00:00
Eduardo Escobar 563c759cb0 get list of assessment requests via graphql
closes EVAL-2456
flag=assignments_2_student
flag=peer_reviews_for_a2

test plan:
- enable the FF "Assignment Enhancements - Student".
- enable the FF "Peer Review Support in Assignment
  Enhancements".
- have a published course.
- have a course with a teacher and 2 students (S1
  and S2).
- create an assignment A1 with "Peer Reviews"
  enabled and the "Peer Reviews Appear Anonymously"
  disabled.
- create an assignment A2 with "Peer Reviews"
  enabled and the "Peer Reviews Appear Anonymously"
  enabled.
- create an assignment A3 with "Peer Reviews"
  disabled.
- add a rubric to both assignments.
- add both assignments to a module.
- assign some peer reviews to the students for
  both assignments.
- as the student S1 go to the modules view.

with anonymous PR disabled
- as the student S1 click on the "Required Peer
  Review" for the assignment A1.
- use the network tab in the web browser to
  intercept the "GetAssignment" grahQL query.
- notice the response contains the
  data.submission.assignedAssessments attribute.
- notice the assigned assessment object has
  anonymousId as null.
- notice the assigned assessment object has
  value for anonymizedUser.
- notice the assigned assessment object has
  value for workflowState.

with anonymous PR enabled
- as the student S1 click on the "Required Peer
  Review" for the assignment A2.
- use the network tab in the web browser to
  intercept the "GetAssignment" grahQL query.
- notice the response contains the
  data.submission.assignedAssessments attribute.
- notice the assigned assessment object has
  value for anonymousId.
- notice the assigned assessment object has
  anonymizedUser as null.
- notice the assigned assessment object has
  value for workflowState.

Change-Id: Ie8761a02eca6cbcbc300f8f351f570fea591cce4
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/296096
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Spencer Olson <solson@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
2022-08-17 19:46:34 +00:00
Nic Nolan ff92971e03 show custom roles in course roster table
fixes VICE-3050
flag=react_people_page

Test Plan:
- Tests pass
- With FF off, create a custom role
- Visit a course people page as user with teacher role
- Assign the custom role to a user in the course
- Turn 'People Page Upgrade' FF on and view course roster
- User's custom role should be visible in the roster table

Change-Id: I18651dae6666f71a870d20e3465e0df2f71f241f
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298769
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
2022-08-17 13:41:12 +00:00
Ryan Hawkins ea90e32223 Remove rover as dependency for schema checks
Rover was originally added as a devDependency so that Apollo Studio
schema checks could be performed. However, Rover does not build under
linux/arm64, so developers with newer M1 Macs were unable to get Canvas
running. Instead, the schema checks will be run inside of a separate
rover specific container, removing the dependency.

[canvas-builds-refspec=1b94202e657e6899de6629afd85b628a1e27b66c]
[force-graphql-schema-check]

closes INTEROP-7174

flag=none

test-plan:
- the simulated post-merge build succeeds
- M1 users can run yarn install without issue
- devx is happy :P

Change-Id: I92f8862b580b4300b14ee98bc9e9826c8d649e96
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298396
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Aaron Ogata <aogata@instructure.com>
Build-Review: Aaron Ogata <aogata@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
Product-Review: Ryan Hawkins <ryan.hawkins@instructure.com>
2022-08-16 21:04:38 +00:00
Nic Nolan da42b092a0 add UserConnection filter by enrollmentType
This commit allows StudentViewEnrollments to be filtered
from course roster tables via a GraphQL query filter.

fixes VICE-3043
flag=react_people_page

Test Plan:
- Tests pass
- With FF turned off, visit a course people page as a user
  with the teacher role
- In a new tab, turn on 'People Page Upgrade' FF and visit
  the same course people page as the same user
- The same number of users should be visible in
  the legacy and upgraded roster tables
- With the FF turned on, click the Student View button
- Exit student view and ensure the same number of users
  are visible in the upgraded course roster table as
  before entering student view

Change-Id: I754442bb2310dcf2ce312835b1679ca589799a0b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298576
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Drake Harper <drake.harper@instructure.com>
2022-08-16 16:55:12 +00:00
Nic Nolan c62a32194e remove concluded enrollments from course roster table
fixes VICE-3051
flag=react_people_page

Test Plan:
- Tests pass
- With FF turned off, visit a course people page as a user
  with the teacher role
- For an existing user, add a new enrollment (role and/or
  section) that is distinct from its existing enrollments
- Visit the user's user detail page and conclude the
  enrollment that you just added
- Turn on 'People Page Upgrade' FF
- Visit the course people page and verify that the concluded
  enrollment is not visible in the roster table

Change-Id: I0f9ce2f7d2c065f47215d2c0187d5b8856e58c6e
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298420
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
2022-08-15 17:19:49 +00:00
Martin Yosifov b52722a1ae Update alignment id to include module id
closes OUT-5219
flag=outcome_alignment_summary

Test plan:
- Enable Improved Outcomes Management FF
- Enable Outcome Alignment Summary FF
- Go to Course > Outcomes
- Create an outcome and a rubric and align them
- Create an assignment and align with the rubric
- Create two modules - one of them published the other one
unpublished and add the assignment to both modules
- Open in browser canvas.docker/graphiql
- Execute query below replacing outcome id and context id
query MyQuery {
  learningOutcome(id: "1") {
    alignments(contextId: "1", contextType: "Course") {
      _id
      title
      moduleName
      moduleUrl
      moduleWorkflowState
    }
  }
}
- Verify that the outcome alignments include two records for
the same assignment but with different values for _id,
moduleName, moduleUrl and moduleWorkflowState
- Verify that the _id value for the assignments consists of
two numbers concatenated with underscore
- Verify taht the _id for the rubric does not contain underscore
- Go to Course > Outcomes and open Devtools -> console
- Reload the Alignments tab and expand the aligned outcome
- Verify that the assignment appears two times in the list of
alignments with but with different module names
- Verify that there are no errors in the console

Change-Id: Ie8617f0499fe59590f3c1547c792f77b87ba05bb
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298429
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Angela Gomba <angela.gomba@instructure.com>
Reviewed-by: Dave Wenzlick <david.wenzlick@instructure.com>
QA-Review: Angela Gomba <angela.gomba@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
2022-08-12 22:05:56 +00:00
Ryan Hawkins 5fdaac076d Add GraphQL Post-Merge Schema Check
why:
- Schema checks ensure that any change to the Canvas GraphQL Schema
  don't impact existing queries as well as ensuring we don't break
  supergraph composition.
- We're starting with a post-merge build to see how common of an issue
  this is for now. We'll move it into the deploy and pre-merge steps
  once we're sure we like it.

flag=none

[canvas-builds-refspec=0e2b75ca09d79fe85fdb749b9288dabbbfc86012]
[change-merged]
[build-registry-path=jenkins/canvas-lms/interop-7174]

closes INTEROP-7174

test-plan:
- the simulated post-merge build reports to the appropriate Slack
  channel and we *don't* get a message about a schema check failure.
- we'll get eyes from devx and our SET to make sure everything looks
  A-OK.

Change-Id: Ibdb55c1f50d0ab71d809bb06a5f0d01a5b7fbc02
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/296771
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Aaron Ogata <aogata@instructure.com>
Build-Review: Aaron Ogata <aogata@instructure.com>
QA-Review: Ryan Hawkins <ryan.hawkins@instructure.com>
Product-Review: Ryan Hawkins <ryan.hawkins@instructure.com>
2022-08-10 21:31:58 +00:00
Omar Gerardo Soto-Fortuño 34a9150dae Add increment to inbox.visit.scope.unread.pages_loaded.react
flag=none
closes VICE-2897

test plan:
  - Tests pass

qa risk: low

Change-Id: I5680da7cca83a15b80d766e716e8a449a14b58e4
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298254
Reviewed-by: Drake Harper <drake.harper@instructure.com>
Product-Review: Drake Harper <drake.harper@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
2022-08-10 18:28:14 +00:00
Drake Harper d98d104f04 Add search by user to discussion entry connection on discussion
refs VICE-3049
flag=none

Test Plan:
 - go to graphiql
 - set up a query for a discussion
 - for discussionEntryConnection add parameter for userSearchId
 > should get entries for specified user

Change-Id: I54ff5a401eaca4d7c4bfa4d6b58bd9ccc905ab64
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/297834
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
2022-08-09 18:01:36 +00:00
Drake Harper 7923a89d71 Create mutation for grading submission by submission id
refs VICE-3049
flag=none

Test Plan:
 - in graphiql
 - set up a mutation to update a submission score by id
 > should allow for updating score by submission id

Example:
mutation MyMutation {
  __typename
  updateSubmissionGrade(input: {submissionId: "37", score: "10"}) {
    submission {
      _id
      id
      grade
      score
      user {
        _id
        id
        name
      }
    }
  }
}

Change-Id: I0f405be21c54b5725e900b66ae3326ffa4418797
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/297998
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
2022-08-09 17:21:47 +00:00
Jason Gillett 8790e214fd Count number of individual conversations sent - react
flag=react-inbox
closes VICE-2869

Test Plan
1. Test passes
2. Further testing will be done in Deployed environment

Change-Id: I716aa9e949a994f42a318f741264069f13853bd9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298095
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Drake Harper <drake.harper@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
2022-08-09 15:11:24 +00:00
Drake Harper 407ebeeede Add metric for react inbox mark as unread
closes VICE-2880
flag=none

Test Plan:
 - specs make sense and pass
 - will validate metric gathering post merge

Change-Id: I7eff70d2629c94e8aa99dedab7911b66f95eaabf
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/298089
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jason Gillett <jason.gillett@instructure.com>
QA-Review: Jason Gillett <jason.gillett@instructure.com>
Product-Review: Jason Gillett <jason.gillett@instructure.com>
2022-08-09 00:40:10 +00:00