add test structure for canvas for elementary with selective release
Closes LF-810 Test Plan: passes Jenkins Change-Id: I49207143082ccc876a372bff27819c8a34d3cb1d Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/328631 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
8708e837b1
commit
aa1d607373
|
@ -60,7 +60,7 @@ module ModulesIndexPage
|
||||||
end
|
end
|
||||||
|
|
||||||
def manage_module_button(context_module)
|
def manage_module_button(context_module)
|
||||||
f("#context_module_#{context_module.id} button[aria-label='Manage #{context_module.name}']")
|
f("#context_module_#{context_module.id} .module_header_items button[aria-label='Manage #{context_module.name}']")
|
||||||
end
|
end
|
||||||
|
|
||||||
def manage_module_item_button(module_item)
|
def manage_module_item_button(module_item)
|
||||||
|
@ -85,4 +85,12 @@ module ModulesIndexPage
|
||||||
fj(".add_item_button:visible").click
|
fj(".add_item_button:visible").click
|
||||||
wait_for_ajax_requests
|
wait_for_ajax_requests
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# method to scroll to the top of the modules page, especially for the canvas for elementary pages that
|
||||||
|
# have a collapsing head that hides content.
|
||||||
|
def scroll_to_the_top_of_modules_page
|
||||||
|
where_to_scroll = element_exists?("#student-view-btn") ? "#student-view-btn" : "#easy_student_view"
|
||||||
|
scroll_to(f(where_to_scroll))
|
||||||
|
wait_for_ajaximations
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,12 +20,19 @@
|
||||||
require_relative "../../helpers/context_modules_common"
|
require_relative "../../helpers/context_modules_common"
|
||||||
require_relative "../page_objects/modules_index_page"
|
require_relative "../page_objects/modules_index_page"
|
||||||
require_relative "../page_objects/modules_settings_tray"
|
require_relative "../page_objects/modules_settings_tray"
|
||||||
|
require_relative "../../dashboard/pages/k5_dashboard_page"
|
||||||
|
require_relative "../../dashboard/pages/k5_dashboard_common_page"
|
||||||
|
require_relative "../../../helpers/k5_common"
|
||||||
|
require_relative "../shared_examples/module_selective_release_shared_examples"
|
||||||
|
|
||||||
describe "selective_release module set up" do
|
describe "selective_release module set up" do
|
||||||
include_context "in-process server selenium tests"
|
include_context "in-process server selenium tests"
|
||||||
include ContextModulesCommon
|
include ContextModulesCommon
|
||||||
include ModulesIndexPage
|
include ModulesIndexPage
|
||||||
include ModulesSettingsTray
|
include ModulesSettingsTray
|
||||||
|
include K5DashboardPageObject
|
||||||
|
include K5DashboardCommonPageObject
|
||||||
|
include K5Common
|
||||||
|
|
||||||
context "using tray to update settings" do
|
context "using tray to update settings" do
|
||||||
before(:once) do
|
before(:once) do
|
||||||
|
@ -38,67 +45,7 @@ describe "selective_release module set up" do
|
||||||
user_session(@teacher)
|
user_session(@teacher)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "accesses the modules tray for a module and closes" do
|
it_behaves_like "selective_release module tray", :context_modules
|
||||||
go_to_modules
|
|
||||||
manage_module_button(@module).click
|
|
||||||
|
|
||||||
# maybe should use a settings option when available
|
|
||||||
module_index_menu_tool_link("Assign To...").click
|
|
||||||
|
|
||||||
click_settings_tray_close_button
|
|
||||||
|
|
||||||
expect(settings_tray_exists?).to be_falsey
|
|
||||||
end
|
|
||||||
|
|
||||||
it "accesses the modules tray for a module and cancels" do
|
|
||||||
go_to_modules
|
|
||||||
manage_module_button(@module).click
|
|
||||||
|
|
||||||
# maybe should use a settings option when available
|
|
||||||
module_index_menu_tool_link("Assign To...").click
|
|
||||||
|
|
||||||
click_settings_tray_cancel_button
|
|
||||||
|
|
||||||
expect(settings_tray_exists?).to be_falsey
|
|
||||||
end
|
|
||||||
|
|
||||||
it "accesses the modules tray and click between settings and assign to" do
|
|
||||||
go_to_modules
|
|
||||||
manage_module_button(@module).click
|
|
||||||
|
|
||||||
# should use a settings option when available
|
|
||||||
module_index_menu_tool_link("Assign To...").click
|
|
||||||
|
|
||||||
expect(assign_to_panel).to be_displayed
|
|
||||||
|
|
||||||
click_settings_tab
|
|
||||||
expect(settings_panel).to be_displayed
|
|
||||||
|
|
||||||
click_assign_to_tab
|
|
||||||
expect(assign_to_tab).to be_displayed
|
|
||||||
end
|
|
||||||
|
|
||||||
it "shows 'View Assign To' when a module has an assignment override" do
|
|
||||||
@module.assignment_overrides.create!
|
|
||||||
go_to_modules
|
|
||||||
|
|
||||||
expect(view_assign.text).to eq "View Assign To"
|
|
||||||
end
|
|
||||||
|
|
||||||
it "doesn't show 'View Assign To' when a module has no assignment overrides" do
|
|
||||||
go_to_modules
|
|
||||||
|
|
||||||
expect(view_assign.text).to eq ""
|
|
||||||
end
|
|
||||||
|
|
||||||
it "accesses the modules tray for a module via the 'View Assign To' button" do
|
|
||||||
@module.assignment_overrides.create!
|
|
||||||
go_to_modules
|
|
||||||
|
|
||||||
view_assign.click
|
|
||||||
|
|
||||||
expect(settings_tray_exists?).to be true
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "uses tray to update prerequisites" do
|
context "uses tray to update prerequisites" do
|
||||||
|
@ -141,26 +88,7 @@ describe "selective_release module set up" do
|
||||||
expect(prerequisite_message(@module3).text).to eq("Prerequisites: module2")
|
expect(prerequisite_message(@module3).text).to eq("Prerequisites: module2")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "adds more than one prerequisite to a module" do
|
it_behaves_like "selective_release module tray prerequisites", :context_modules
|
||||||
go_to_modules
|
|
||||||
manage_module_button(@module3).click
|
|
||||||
module_index_menu_tool_link("Assign To...").click
|
|
||||||
click_settings_tab
|
|
||||||
|
|
||||||
click_add_prerequisites_button
|
|
||||||
|
|
||||||
select_prerequisites_dropdown_option(0, "module2")
|
|
||||||
expect(prerequisites_dropdown_value(0)).to eq("module2")
|
|
||||||
|
|
||||||
click_add_prerequisites_button
|
|
||||||
|
|
||||||
select_prerequisites_dropdown_option(1, "module")
|
|
||||||
expect(prerequisites_dropdown_value(1)).to eq("module")
|
|
||||||
|
|
||||||
click_settings_tray_update_module_button
|
|
||||||
|
|
||||||
expect(prerequisite_message(@module3).text).to eq("Prerequisites: module2, module")
|
|
||||||
end
|
|
||||||
|
|
||||||
it "does not save prerequisites selected when update cancelled." do
|
it "does not save prerequisites selected when update cancelled." do
|
||||||
go_to_modules
|
go_to_modules
|
||||||
|
@ -171,9 +99,9 @@ describe "selective_release module set up" do
|
||||||
click_add_prerequisites_button
|
click_add_prerequisites_button
|
||||||
expect(prerequisites_dropdown[0]).to be_displayed
|
expect(prerequisites_dropdown[0]).to be_displayed
|
||||||
|
|
||||||
select_prerequisites_dropdown_option(0, "module")
|
select_prerequisites_dropdown_option(0, @module.name)
|
||||||
|
|
||||||
expect(prerequisites_dropdown_value(0)).to eq("module")
|
expect(prerequisites_dropdown_value(0)).to eq(@module.name)
|
||||||
|
|
||||||
click_settings_tray_cancel_button
|
click_settings_tray_cancel_button
|
||||||
|
|
||||||
|
@ -267,20 +195,7 @@ describe "selective_release module set up" do
|
||||||
expect(assignee_selection_item[0].text).to eq("section1")
|
expect(assignee_selection_item[0].text).to eq("section1")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "adds both user and section to assignee list" do
|
it_behaves_like "selective_release module tray assign to", :context_modules
|
||||||
go_to_modules
|
|
||||||
manage_module_button(@module).click
|
|
||||||
module_index_menu_tool_link("Assign To...").click
|
|
||||||
click_custom_access_radio
|
|
||||||
|
|
||||||
assignee_selection.send_keys("user")
|
|
||||||
click_option(assignee_selection, "user1")
|
|
||||||
assignee_selection.send_keys("section")
|
|
||||||
click_option(assignee_selection, "section1")
|
|
||||||
|
|
||||||
assignee_list = assignee_selection_item.map(&:text)
|
|
||||||
expect(assignee_list.sort).to eq(%w[section1 user1])
|
|
||||||
end
|
|
||||||
|
|
||||||
it "deletes added assignee by clicking on it" do
|
it "deletes added assignee by clicking on it" do
|
||||||
go_to_modules
|
go_to_modules
|
||||||
|
@ -308,4 +223,34 @@ describe "selective_release module set up" do
|
||||||
expect(element_exists?(assignee_selection_item_selector)).to be false
|
expect(element_exists?(assignee_selection_item_selector)).to be false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "Canvas for Elementary Modules Selective Release" do
|
||||||
|
before :once do
|
||||||
|
Account.site_admin.enable_feature! :differentiated_modules
|
||||||
|
teacher_setup
|
||||||
|
@module = @subject_course.context_modules.create!(name: "Module 1")
|
||||||
|
@assignment1 = @subject_course.assignments.create!(title: "first item in module")
|
||||||
|
@module.add_item type: "assignment", id: @assignment1.id
|
||||||
|
@section1 = @subject_course.course_sections.create!(name: "section1")
|
||||||
|
@section2 = @subject_course.course_sections.create!(name: "section2")
|
||||||
|
@student1 = user_factory(name: "user1", active_all: true, active_state: "active")
|
||||||
|
@student2 = user_factory(name: "user2", active_all: true, active_state: "active", section: @section2)
|
||||||
|
@subject_course.enroll_user(@student1, "StudentEnrollment", enrollment_state: "active")
|
||||||
|
@subject_course.enroll_user(@student2, "StudentEnrollment", enrollment_state: "active")
|
||||||
|
@assignment2 = @subject_course.assignments.create!(title: "first item in module 2")
|
||||||
|
@assignment3 = @subject_course.assignments.create!(title: "first item in module 3")
|
||||||
|
@module2 = @course.context_modules.create!(name: "module2")
|
||||||
|
@module2.add_item type: "assignment", id: @assignment2.id
|
||||||
|
@module3 = @course.context_modules.create!(name: "module3")
|
||||||
|
@module3.add_item type: "assignment", id: @assignment3.id
|
||||||
|
end
|
||||||
|
|
||||||
|
before do
|
||||||
|
user_session(@homeroom_teacher)
|
||||||
|
end
|
||||||
|
|
||||||
|
it_behaves_like "selective_release module tray", :canvas_for_elementary
|
||||||
|
it_behaves_like "selective_release module tray prerequisites", :canvas_for_elementary
|
||||||
|
it_behaves_like "selective_release module tray assign to", :canvas_for_elementary
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,202 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright (C) 2023 - 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 "../../helpers/context_modules_common"
|
||||||
|
require_relative "../page_objects/modules_index_page"
|
||||||
|
require_relative "../page_objects/modules_settings_tray"
|
||||||
|
require_relative "../../dashboard/pages/k5_dashboard_page"
|
||||||
|
require_relative "../../dashboard/pages/k5_dashboard_common_page"
|
||||||
|
require_relative "../../../helpers/k5_common"
|
||||||
|
|
||||||
|
shared_examples_for "selective_release module tray" do |context|
|
||||||
|
include ContextModulesCommon
|
||||||
|
include ModulesIndexPage
|
||||||
|
include ModulesSettingsTray
|
||||||
|
include K5DashboardPageObject
|
||||||
|
include K5DashboardCommonPageObject
|
||||||
|
include K5Common
|
||||||
|
|
||||||
|
before do
|
||||||
|
case context
|
||||||
|
when :context_modules
|
||||||
|
@mod_course = @course
|
||||||
|
@mod_url = "/courses/#{@mod_course.id}/modules"
|
||||||
|
when :canvas_for_elementary
|
||||||
|
@mod_course = @subject_course
|
||||||
|
@mod_url = "/courses/#{@mod_course.id}#modules"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "accesses the modules tray" do
|
||||||
|
get @mod_url
|
||||||
|
|
||||||
|
scroll_to_the_top_of_modules_page
|
||||||
|
manage_module_button(@module).click
|
||||||
|
module_index_menu_tool_link("Assign To...").click
|
||||||
|
|
||||||
|
expect(settings_tray_exists?).to be true
|
||||||
|
end
|
||||||
|
|
||||||
|
it "accesses the modules tray for a module and closes" do
|
||||||
|
get @mod_url
|
||||||
|
|
||||||
|
scroll_to_the_top_of_modules_page
|
||||||
|
manage_module_button(@module).click
|
||||||
|
|
||||||
|
# maybe should use a settings option when available
|
||||||
|
module_index_menu_tool_link("Assign To...").click
|
||||||
|
|
||||||
|
click_settings_tray_close_button
|
||||||
|
|
||||||
|
expect(settings_tray_exists?).to be_falsey
|
||||||
|
end
|
||||||
|
|
||||||
|
it "accesses the modules tray for a module and cancels" do
|
||||||
|
get @mod_url
|
||||||
|
|
||||||
|
scroll_to_the_top_of_modules_page
|
||||||
|
manage_module_button(@module).click
|
||||||
|
|
||||||
|
# maybe should use a settings option when available
|
||||||
|
module_index_menu_tool_link("Assign To...").click
|
||||||
|
|
||||||
|
click_settings_tray_cancel_button
|
||||||
|
|
||||||
|
expect(settings_tray_exists?).to be_falsey
|
||||||
|
end
|
||||||
|
|
||||||
|
it "accesses the modules tray and click between settings and assign to" do
|
||||||
|
get @mod_url
|
||||||
|
|
||||||
|
scroll_to_the_top_of_modules_page
|
||||||
|
manage_module_button(@module).click
|
||||||
|
|
||||||
|
# should use a settings option when available
|
||||||
|
module_index_menu_tool_link("Assign To...").click
|
||||||
|
|
||||||
|
expect(assign_to_panel).to be_displayed
|
||||||
|
|
||||||
|
click_settings_tab
|
||||||
|
expect(settings_panel).to be_displayed
|
||||||
|
|
||||||
|
click_assign_to_tab
|
||||||
|
expect(assign_to_tab).to be_displayed
|
||||||
|
end
|
||||||
|
|
||||||
|
it "shows 'View Assign To' when a module has an assignment override" do
|
||||||
|
@module.assignment_overrides.create!
|
||||||
|
get @mod_url
|
||||||
|
|
||||||
|
expect(view_assign.text).to eq "View Assign To"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "doesn't show 'View Assign To' when a module has no assignment overrides" do
|
||||||
|
get @mod_url
|
||||||
|
|
||||||
|
expect(view_assign.text).to eq ""
|
||||||
|
end
|
||||||
|
|
||||||
|
it "accesses the modules tray for a module via the 'View Assign To' button" do
|
||||||
|
@module.assignment_overrides.create!
|
||||||
|
get @mod_url
|
||||||
|
view_assign.click
|
||||||
|
|
||||||
|
expect(settings_tray_exists?).to be true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples_for "selective_release module tray prerequisites" do |context|
|
||||||
|
include ContextModulesCommon
|
||||||
|
include ModulesIndexPage
|
||||||
|
include ModulesSettingsTray
|
||||||
|
include K5DashboardPageObject
|
||||||
|
include K5DashboardCommonPageObject
|
||||||
|
include K5Common
|
||||||
|
|
||||||
|
before do
|
||||||
|
case context
|
||||||
|
when :context_modules
|
||||||
|
@mod_course = @course
|
||||||
|
@mod_url = "/courses/#{@mod_course.id}/modules"
|
||||||
|
when :canvas_for_elementary
|
||||||
|
@mod_course = @subject_course
|
||||||
|
@mod_url = "/courses/#{@mod_course.id}#modules"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "adds more than one prerequisite to a module" do
|
||||||
|
get @mod_url
|
||||||
|
|
||||||
|
manage_module_button(@module3).click
|
||||||
|
module_index_menu_tool_link("Assign To...").click
|
||||||
|
click_settings_tab
|
||||||
|
|
||||||
|
click_add_prerequisites_button
|
||||||
|
|
||||||
|
select_prerequisites_dropdown_option(0, @module2.name)
|
||||||
|
expect(prerequisites_dropdown_value(0)).to eq(@module2.name)
|
||||||
|
|
||||||
|
click_add_prerequisites_button
|
||||||
|
|
||||||
|
select_prerequisites_dropdown_option(1, @module.name)
|
||||||
|
expect(prerequisites_dropdown_value(1)).to eq(@module.name)
|
||||||
|
|
||||||
|
click_settings_tray_update_module_button
|
||||||
|
|
||||||
|
expect(prerequisite_message(@module3).text).to eq("Prerequisites: #{@module2.name}, #{@module.name}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples_for "selective_release module tray assign to" do |context|
|
||||||
|
include ContextModulesCommon
|
||||||
|
include ModulesIndexPage
|
||||||
|
include ModulesSettingsTray
|
||||||
|
include K5DashboardPageObject
|
||||||
|
include K5DashboardCommonPageObject
|
||||||
|
include K5Common
|
||||||
|
|
||||||
|
before do
|
||||||
|
case context
|
||||||
|
when :context_modules
|
||||||
|
@mod_course = @course
|
||||||
|
@mod_url = "/courses/#{@mod_course.id}/modules"
|
||||||
|
when :canvas_for_elementary
|
||||||
|
@mod_course = @subject_course
|
||||||
|
@mod_url = "/courses/#{@mod_course.id}#modules"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "adds both user and section to assignee list" do
|
||||||
|
get @mod_url
|
||||||
|
|
||||||
|
scroll_to_the_top_of_modules_page
|
||||||
|
|
||||||
|
manage_module_button(@module).click
|
||||||
|
module_index_menu_tool_link("Assign To...").click
|
||||||
|
click_custom_access_radio
|
||||||
|
|
||||||
|
assignee_selection.send_keys("user")
|
||||||
|
click_option(assignee_selection, "user1")
|
||||||
|
assignee_selection.send_keys("section")
|
||||||
|
click_option(assignee_selection, "section1")
|
||||||
|
|
||||||
|
assignee_list = assignee_selection_item.map(&:text)
|
||||||
|
expect(assignee_list.sort).to eq(%w[section1 user1])
|
||||||
|
end
|
||||||
|
end
|
|
@ -45,7 +45,7 @@ module ContextModulesCommon
|
||||||
end
|
end
|
||||||
|
|
||||||
def module_setup
|
def module_setup
|
||||||
@module = @course.context_modules.create!(name: "module")
|
@module = @course.context_modules.create!(name: "Module 1")
|
||||||
|
|
||||||
# create module items
|
# create module items
|
||||||
# add first and last module items to get previous and next displayed
|
# add first and last module items to get previous and next displayed
|
||||||
|
|
Loading…
Reference in New Issue