create tests for assign to on assignment edit page
Test plan: tests are unskipped and they pass jenkins Closes LX-1876 [fsc-max-nodes=25] [fsc-timeout=45] Change-Id: I673e99e31e1a9fd1cba48464a06a3df498a7327a Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/354310 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Sarah Gerard <sarah.gerard@instructure.com> QA-Review: Sarah Gerard <sarah.gerard@instructure.com> Product-Review: Robin Kuss <rkuss@instructure.com>
This commit is contained in:
parent
69fb714087
commit
39c98dd4da
|
@ -0,0 +1,398 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Copyright (C) 2024 - present Instructure, Inc.
|
||||
#
|
||||
# This file is part of Canvas.
|
||||
#
|
||||
# Canvas is free software: you can redistribute it and/or modify it under
|
||||
# the terms of the GNU Affero General Public License as published by the Free
|
||||
# Software Foundation, version 3 of the License.
|
||||
#
|
||||
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||
# details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
require_relative "../common"
|
||||
require_relative "../../spec_helper"
|
||||
require_relative "page_objects/assignments_index_page"
|
||||
require_relative "page_objects/assignment_create_edit_page"
|
||||
require_relative "page_objects/assignment_page"
|
||||
require_relative "../helpers/items_assign_to_tray"
|
||||
require_relative "../helpers/context_modules_common"
|
||||
require_relative "../helpers/groups_common"
|
||||
require_relative "../../helpers/selective_release_common"
|
||||
|
||||
shared_examples_for "item assign to on page during assignment creation/update" do
|
||||
include AssignmentsIndexPage
|
||||
include ItemsAssignToTray
|
||||
include ContextModulesCommon
|
||||
include SelectiveReleaseCommon
|
||||
|
||||
it "assigns student and saves assignment" do
|
||||
AssignmentCreateEditPage.replace_assignment_name("new test assignment")
|
||||
AssignmentCreateEditPage.enter_points_possible("100")
|
||||
AssignmentCreateEditPage.select_text_entry_submission_type
|
||||
click_add_assign_to_card
|
||||
select_module_item_assignee(1, @student1.name)
|
||||
update_due_date(1, "12/31/2022")
|
||||
update_due_time(1, "5:00 PM")
|
||||
update_available_date(1, "12/27/2022")
|
||||
update_available_time(1, "8:00 AM")
|
||||
update_until_date(1, "1/7/2023")
|
||||
update_until_time(1, "9:00 PM")
|
||||
|
||||
AssignmentCreateEditPage.save_assignment
|
||||
|
||||
assignment = Assignment.last
|
||||
expect(assignment.assignment_overrides.last.assignment_override_students.count).to eq(1)
|
||||
|
||||
due_at_row = AssignmentPage.retrieve_due_date_table_row("1 student")
|
||||
expect(due_at_row).not_to be_nil
|
||||
expect(due_at_row.text.split("\n").first).to include("Dec 31, 2022")
|
||||
expect(due_at_row.text.split("\n").third).to include("Dec 27, 2022")
|
||||
expect(due_at_row.text.split("\n").last).to include("Jan 7, 2023")
|
||||
|
||||
due_at_row = AssignmentPage.retrieve_due_date_table_row("Everyone else")
|
||||
expect(due_at_row).not_to be_nil
|
||||
expect(due_at_row.text.count("-")).to eq(3)
|
||||
end
|
||||
|
||||
it "assigns a section and saves assignment" do
|
||||
AssignmentCreateEditPage.replace_assignment_name("new test assignment")
|
||||
AssignmentCreateEditPage.enter_points_possible("100")
|
||||
AssignmentCreateEditPage.select_text_entry_submission_type
|
||||
|
||||
click_add_assign_to_card
|
||||
select_module_item_assignee(1, @section1.name)
|
||||
update_due_date(1, "12/31/2022")
|
||||
update_due_time(1, "5:00 PM")
|
||||
update_available_date(1, "12/27/2022")
|
||||
update_available_time(1, "8:00 AM")
|
||||
update_until_date(1, "1/7/2023")
|
||||
update_until_time(1, "9:00 PM")
|
||||
|
||||
AssignmentCreateEditPage.save_assignment
|
||||
assignment = Assignment.last
|
||||
|
||||
expect(assignment.assignment_overrides.count).to eq(1)
|
||||
expect(assignment.assignment_overrides.last.set_type).to eq("CourseSection")
|
||||
|
||||
due_at_row = AssignmentPage.retrieve_due_date_table_row(@section1.name)
|
||||
expect(due_at_row).not_to be_nil
|
||||
expect(due_at_row.text.split("\n").first).to include("Dec 31, 2022")
|
||||
expect(due_at_row.text.split("\n").third).to include("Dec 27, 2022")
|
||||
expect(due_at_row.text.split("\n").last).to include("Jan 7, 2023")
|
||||
|
||||
due_at_row = AssignmentPage.retrieve_due_date_table_row("Everyone else")
|
||||
expect(due_at_row).not_to be_nil
|
||||
expect(due_at_row.text.count("-")).to eq(3)
|
||||
end
|
||||
|
||||
it "does not recover a deleted card when adding an assignee" do
|
||||
skip("needs a jira ticket for fixing")
|
||||
# Bug fix of LX-1619
|
||||
click_add_assign_to_card
|
||||
click_delete_assign_to_card(0)
|
||||
select_module_item_assignee(0, @section1.name)
|
||||
|
||||
expect(selected_assignee_options.count).to be(1)
|
||||
end
|
||||
|
||||
context "Module overrides" do
|
||||
before do
|
||||
@context_module = @course.context_modules.create! name: "Mod"
|
||||
new_override = @context_module.assignment_overrides.build
|
||||
new_override.course_section = @course.course_sections.first
|
||||
new_override.save!
|
||||
@assignment = Assignment.create!(context: @course, title: "Assignment")
|
||||
@context_module.add_item(type: "assignment", id: @assignment.id)
|
||||
AssignmentCreateEditPage.visit_assignment_edit_page(@course.id, @assignment.id)
|
||||
end
|
||||
|
||||
it "shows module cards if they are not overridden" do
|
||||
expect(AssignmentCreateEditPage.assignment_inherited_from.last.text).to eq("Inherited from #{@context_module.name}")
|
||||
expect(element_exists?(assign_to_in_tray_selector("Remove Everyone else"))).to be_falsey
|
||||
|
||||
AssignmentCreateEditPage.save_assignment
|
||||
|
||||
assignment = Assignment.last
|
||||
assignment.reload
|
||||
expect(assignment.only_visible_to_overrides).to be_falsey
|
||||
end
|
||||
|
||||
it "does not show module override if an unassigned override exists" do
|
||||
@assignment.assignment_overrides.create!(set: @course, unassign_item: false)
|
||||
@assignment.assignment_overrides.create!(set: @course.course_sections.first, unassign_item: true)
|
||||
AssignmentCreateEditPage.visit_assignment_edit_page(@course.id, @assignment.id)
|
||||
|
||||
expect(module_item_assign_to_card.last).not_to contain_css(AssignmentCreateEditPage.assignment_inherited_from_selector)
|
||||
end
|
||||
|
||||
it "shows everyone card if there are course overrides" do
|
||||
@assignment.assignment_overrides.create!(set: @course, due_at: 1.day.from_now)
|
||||
AssignmentCreateEditPage.visit_assignment_edit_page(@course.id, @assignment.id)
|
||||
|
||||
expect(AssignmentCreateEditPage.assignment_inherited_from.last.text).to eq("Inherited from #{@context_module.name}")
|
||||
expect(assign_to_in_tray("Remove Everyone else")[0]).to be_displayed
|
||||
end
|
||||
|
||||
it "does not show the inherited module override if there is an assignment override" do
|
||||
update_due_date(0, "12/31/2022")
|
||||
update_due_time(0, "5:00 PM")
|
||||
|
||||
expect(module_item_assign_to_card.last).not_to contain_css(AssignmentCreateEditPage.assignment_inherited_from_selector)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "override assignees" do
|
||||
include_context "in-process server selenium tests"
|
||||
include ItemsAssignToTray
|
||||
include ContextModulesCommon
|
||||
include GroupsCommon
|
||||
include SelectiveReleaseCommon
|
||||
|
||||
context "basic assignee overrides" do
|
||||
before :once do
|
||||
Account.site_admin.enable_feature!(:selective_release_edit_page)
|
||||
course_with_teacher(active_all: true)
|
||||
@assignment = Assignment.create!(context: @course, title: "Test Assignment", only_visible_to_overrides: true)
|
||||
@assignment.assignment_overrides.create!(set_type: "ADHOC")
|
||||
@students = create_users_in_course @course, 20
|
||||
@students.each do |student|
|
||||
user = User.find(student)
|
||||
@assignment.assignment_overrides.first.assignment_override_students.create!(user:)
|
||||
end
|
||||
end
|
||||
|
||||
before do
|
||||
user_session(@teacher)
|
||||
@page_size = 5
|
||||
stub_const("Api::MAX_PER_PAGE", @page_size)
|
||||
end
|
||||
|
||||
it "renders all the override assignees" do
|
||||
AssignmentCreateEditPage.visit_assignment_edit_page(@course.id, @assignment.id)
|
||||
|
||||
# 20 students
|
||||
expect(selected_assignee_options.count).to eq @students.length
|
||||
end
|
||||
end
|
||||
|
||||
context "group assignments", :ignore_js_errors do
|
||||
before :once do
|
||||
Account.site_admin.enable_feature!(:selective_release_edit_page)
|
||||
course_with_teacher(active_all: true)
|
||||
group_test_setup(3, 3, 1, true)
|
||||
@normal_assignment = Assignment.create!(context: @course, title: "Normal Assignment")
|
||||
@group_assignment = Assignment.create!(context: @course, title: "Group Assignment", group_category_id: @group_category[0].id)
|
||||
override = @group_assignment.assignment_overrides.build
|
||||
override.set = @testgroup[0]
|
||||
override.save!
|
||||
end
|
||||
|
||||
before do
|
||||
user_session(@teacher)
|
||||
end
|
||||
|
||||
it "creates group assignment overrides" do
|
||||
skip("LX-1877 -- group assignment updats on edit/create page")
|
||||
AssignmentCreateEditPage.visit_assignment_edit_page(@course.id, @normal_assignment.id)
|
||||
AssignmentCreateEditPage.click_group_category_assignment_check
|
||||
AssignmentCreateEditPage.select_assignment_group_category(-3)
|
||||
|
||||
click_add_assign_to_card
|
||||
select_module_item_assignee(1, @testgroup[0].name)
|
||||
update_due_date(1, "12/31/2024")
|
||||
|
||||
AssignmentCreateEditPage.save_assignment
|
||||
expect(@normal_assignment.assignment_overrides.active.count).to eq(1)
|
||||
expect(@normal_assignment.assignment_overrides.active.last.set_type).to eq("Group")
|
||||
expect(@normal_assignment.assignment_overrides.active.last.title).to eq(@testgroup[0].name)
|
||||
end
|
||||
|
||||
it "deletes existing group assignment overrides if the group set is changed" do
|
||||
skip("LX-1877 -- group assignment updats on edit/create page")
|
||||
AssignmentCreateEditPage.visit_assignment_edit_page(@course.id, @group_assignment.id)
|
||||
|
||||
expect(@group_assignment.assignment_overrides.active.count).to eq(1)
|
||||
expect(@group_assignment.assignment_overrides.active.last.title).to eq(@testgroup[0].name)
|
||||
|
||||
AssignmentCreateEditPage.select_assignment_group_category(-2)
|
||||
|
||||
click_add_assign_to_card
|
||||
select_module_item_assignee(1, @testgroup[1].name)
|
||||
update_due_date(1, "12/31/2024")
|
||||
AssignmentCreateEditPage.save_assignment
|
||||
|
||||
expect(@group_assignment.assignment_overrides.active.count).to eq(1)
|
||||
expect(@group_assignment.assignment_overrides.active.last.title).to eq(@testgroup[1].name)
|
||||
end
|
||||
|
||||
it "shows error if there is no group category selected when opening the tray" do
|
||||
skip("LX-1877 -- group assignment updats on edit/create page")
|
||||
AssignmentCreateEditPage.visit_assignment_edit_page(@course.id, @group_assignment.id)
|
||||
|
||||
AssignmentCreateEditPage.select_assignment_group_category({})
|
||||
error_boxes = AssignmentCreateEditPage.error_boxes
|
||||
|
||||
expect(error_boxes.any? { |errorbox| errorbox.text.include?("Please select a group set for this assignment") }).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context "assignments show page assign to", :ignore_js_errors do
|
||||
before :once do
|
||||
Account.site_admin.enable_feature!(:selective_release_edit_page)
|
||||
|
||||
course_with_teacher(active_all: true)
|
||||
@assignment1 = @course.assignments.create(name: "test assignment", submission_types: "online_url")
|
||||
@section1 = @course.course_sections.create!(name: "section1")
|
||||
|
||||
@student1 = student_in_course(course: @course, active_all: true, name: "Student 1").user
|
||||
@student2 = student_in_course(course: @course, active_all: true, name: "Student 2").user
|
||||
|
||||
@course.enroll_user(@student1, "StudentEnrollment", section: @section1, enrollment_state: "active")
|
||||
end
|
||||
|
||||
before do
|
||||
user_session(@teacher)
|
||||
end
|
||||
|
||||
context "manage assign to from assignment create page" do
|
||||
before do
|
||||
AssignmentCreateEditPage.visit_new_assignment_create_page(@course.id)
|
||||
end
|
||||
|
||||
include_examples "item assign to on page during assignment creation/update"
|
||||
end
|
||||
|
||||
context "manage assign to from assignment edit page" do
|
||||
before do
|
||||
AssignmentCreateEditPage.visit_assignment_edit_page(@course.id, @assignment1.id)
|
||||
end
|
||||
|
||||
include_examples "item assign to on page during assignment creation/update"
|
||||
|
||||
it "assigns student and cancels assignment edit" do
|
||||
AssignmentCreateEditPage.replace_assignment_name("new test assignment")
|
||||
AssignmentCreateEditPage.enter_points_possible("100")
|
||||
AssignmentCreateEditPage.select_text_entry_submission_type
|
||||
|
||||
click_add_assign_to_card
|
||||
select_module_item_assignee(1, @student1.name)
|
||||
|
||||
AssignmentCreateEditPage.cancel_assignment
|
||||
|
||||
expect(@assignment1.assignment_overrides.count).to eq(0)
|
||||
end
|
||||
end
|
||||
|
||||
context "manage assign to from New Quizzes assignment edit page" do
|
||||
before :once do
|
||||
@course.enable_feature! :quizzes_next
|
||||
@course.context_external_tools.create!(
|
||||
name: "Quizzes.Next",
|
||||
consumer_key: "test_key",
|
||||
shared_secret: "test_secret",
|
||||
tool_id: "Quizzes 2",
|
||||
url: "http://example.com/launch"
|
||||
)
|
||||
@course.root_account.settings[:provision] = { "lti" => "lti url" }
|
||||
@course.root_account.save!
|
||||
|
||||
@nq_assignment = @course.assignments.create(name: "NQ assignment")
|
||||
@nq_assignment.quiz_lti!
|
||||
@nq_assignment.save!
|
||||
|
||||
@student1 = student_in_course(course: @course, active_all: true, name: "Student 1").user
|
||||
@student2 = student_in_course(course: @course, active_all: true, name: "Student 2").user
|
||||
end
|
||||
|
||||
it "assigns student to NQ assignment and saves", :ignore_js_errors do
|
||||
AssignmentCreateEditPage.visit_assignment_edit_page(@course.id, @nq_assignment.id)
|
||||
|
||||
click_add_assign_to_card
|
||||
select_module_item_assignee(1, @student1.name)
|
||||
update_due_date(1, "12/31/2022")
|
||||
update_due_time(1, "5:00 PM")
|
||||
update_available_date(1, "12/27/2022")
|
||||
update_available_time(1, "8:00 AM")
|
||||
update_until_date(1, "1/7/2023")
|
||||
update_until_time(1, "9:00 PM")
|
||||
|
||||
AssignmentCreateEditPage.save_assignment
|
||||
|
||||
expect(@nq_assignment.assignment_overrides.last.assignment_override_students.count).to eq(1)
|
||||
end
|
||||
end
|
||||
|
||||
context "post to sis" do
|
||||
before do
|
||||
@course.account.set_feature_flag! "post_grades", "on"
|
||||
@course.account.set_feature_flag! :new_sis_integrations, "on"
|
||||
@course.account.settings[:sis_syncing] = { value: true, locked: false }
|
||||
@course.account.settings[:sis_require_assignment_due_date] = { value: true }
|
||||
@course.account.save!
|
||||
|
||||
@assignment_ = @course.assignments.create(name: "assignment")
|
||||
end
|
||||
|
||||
it "blocks saving empty due dates when enabled", :ignore_js_errors do
|
||||
skip("LX-1878 - post to sis on create/edit page directly")
|
||||
|
||||
AssignmentCreateEditPage.visit_assignment_edit_page(@course.id, @assignment_.id)
|
||||
|
||||
AssignmentCreateEditPage.click_post_to_sis_checkbox
|
||||
|
||||
wait_for_ajaximations
|
||||
|
||||
expect(driver.current_url).to include("edit")
|
||||
|
||||
AssignmentCreateEditPage.save_assignment
|
||||
|
||||
expect_instui_flash_message("Please set a due date or change your selection for the “Sync to SIS” option.")
|
||||
|
||||
expect(assign_to_date_and_time[0].text).to include("Please add a due date")
|
||||
|
||||
update_due_date(0, format_date_for_view(Time.zone.now, "%-m/%-d/%Y"))
|
||||
update_due_time(0, "11:59 PM")
|
||||
|
||||
expect(is_checked(AssignmentCreateEditPage.post_to_sis_checkbox_selector)).to be_truthy
|
||||
end
|
||||
|
||||
it "does not block empty due dates when disabled" do
|
||||
skip("LX-1878 - post to sis on create/edit page directly")
|
||||
|
||||
AssignmentCreateEditPage.visit_assignment_edit_page(@course.id, @assignment_.id)
|
||||
|
||||
AssignmentCreateEditPage.save_assignment
|
||||
expect(driver.current_url).not_to include("edit")
|
||||
expect(@assignment_.post_to_sis).to be_falsey
|
||||
|
||||
AssignmentCreateEditPage.visit_assignment_edit_page(@course.id, @assignment_.id)
|
||||
expect(is_checked(AssignmentCreateEditPage.post_to_sis_checkbox_selector)).to be_falsey
|
||||
end
|
||||
|
||||
it "validates due date when user checks/unchecks the option", :ignore_js_errors do
|
||||
skip("LX-1878 - post to sis on create/edit page directly")
|
||||
|
||||
AssignmentCreateEditPage.visit_assignment_edit_page(@course.id, @assignment_.id)
|
||||
|
||||
expect(assign_to_date_and_time[0].text).not_to include("Please add a due date")
|
||||
|
||||
AssignmentCreateEditPage.click_post_to_sis_checkbox
|
||||
|
||||
expect(assign_to_date_and_time[0].text).to include("Please add a due date")
|
||||
|
||||
update_due_date(0, format_date_for_view(Time.zone.now, "%-m/%-d/%Y"))
|
||||
update_due_time(0, "11:59 PM")
|
||||
|
||||
AssignmentCreateEditPage.save_assignment
|
||||
expect(driver.current_url).not_to include("edit")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -22,6 +22,9 @@ class AssignmentCreateEditPage
|
|||
include SeleniumDependencies
|
||||
|
||||
# CSS Selectors
|
||||
def assignment_inherited_from_selector
|
||||
"#overrides-wrapper [data-testid='context-module-text']"
|
||||
end
|
||||
|
||||
def manage_assign_to_button_selector
|
||||
"[data-testid='manage-assign-to']"
|
||||
|
@ -64,6 +67,10 @@ class AssignmentCreateEditPage
|
|||
f("#assignment_name")
|
||||
end
|
||||
|
||||
def assignment_inherited_from
|
||||
ff(assignment_inherited_from_selector)
|
||||
end
|
||||
|
||||
def assignment_save_button
|
||||
find_button("Save")
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue