308 lines
9.7 KiB
Ruby
308 lines
9.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Copyright (C) 2017 - 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 '../helpers/blueprint_common'
|
|
require_relative '../../apis/api_spec_helper'
|
|
|
|
shared_context "blueprint lock context" do
|
|
def blueprint_lock_icon_label
|
|
f('.bpc-lock-toggle__label')
|
|
end
|
|
|
|
def blueprint_lock_icon_button
|
|
blueprint_lock_icon_label.find_element(:xpath, '../../parent::button')
|
|
end
|
|
|
|
def associated_index_lock_icon
|
|
f('#content-wrapper.ic-Layout-contentWrapper')
|
|
end
|
|
|
|
def blueprint_index_assignment_icon
|
|
f("#assignment_#{@assignment.id}.ig-row.ig-published")
|
|
end
|
|
|
|
def blueprint_index_discussions_icon
|
|
f('.discussion-content')
|
|
end
|
|
|
|
def blueprint_index_pages_icon
|
|
f('.master-content-lock-cell')
|
|
end
|
|
|
|
def blueprint_index_quizzes_icon
|
|
f("#summary_quiz_#{@quiz.id}.ig-row")
|
|
end
|
|
|
|
def blueprint_index_quizzes_search_bar
|
|
f('input#searchTerm')
|
|
end
|
|
|
|
def verify_index_locked
|
|
element = associated_index_lock_icon
|
|
expect(element).to contain_css(@locked_button_css) # if this is present, and item is showing as locked.
|
|
end
|
|
|
|
def verify_index_unlocked
|
|
element = associated_index_lock_icon
|
|
expect(element).not_to contain_css(@locked_button_css) # the item is now unlocked.
|
|
end
|
|
|
|
def verify_show_page_locked
|
|
element = blueprint_lock_icon_label
|
|
expect(element).to include_text("Locked") # verify item is locked
|
|
end
|
|
|
|
def verify_show_page_unlocked
|
|
element = blueprint_lock_icon_label
|
|
expect(element).to include_text("Blueprint") # verify the item is unlocked
|
|
end
|
|
|
|
def lock_index_tag
|
|
@tag.update(restrictions: { content: true }) # lock the item. Does not require a migration.
|
|
end
|
|
|
|
def unlock_index_tag
|
|
@tag.update(restrictions: { content: false }) # unlock the item.
|
|
end
|
|
|
|
def verify_unlocked(element)
|
|
expect(element).not_to contain_css(@unlocked_button_css) # verify that the button is unlocked
|
|
end
|
|
end
|
|
|
|
describe "master courses - locked items" do
|
|
include_context "in-process server selenium tests"
|
|
include_context "blueprint lock context"
|
|
include BlueprintCourseCommon
|
|
|
|
before :once do
|
|
@unlocked_button_css = ".lock-icon.btn-unlocked"
|
|
@locked_button_css = ".lock-icon.lock-icon-locked"
|
|
|
|
@master = course_factory(active_all: true)
|
|
@master_teacher = @teacher
|
|
@template = MasterCourses::MasterTemplate.set_as_master_course(@master)
|
|
@minion = @template.add_child_course!(course_factory(name: "Minion", active_all: true)).child_course
|
|
|
|
# setup some stuff
|
|
@assignment = @master.assignments.create!(title: 'Blah', points_possible: 10)
|
|
@page = @master.wiki_pages.create!(title: 'Unicorn')
|
|
@quiz = @master.quizzes.create!(title: 'TestQuiz')
|
|
@discussion = @master.discussion_topics.create!(title: 'My discussion')
|
|
|
|
run_master_course_migration(@master)
|
|
@quiz_copy = @minion.quizzes.last
|
|
end
|
|
|
|
context "on the index page," do
|
|
before :once do
|
|
account_admin_user(active_all: true)
|
|
end
|
|
|
|
before do
|
|
user_session(@admin)
|
|
end
|
|
|
|
context "in the minion course" do
|
|
it "assignments show a lock icon on the index page", priority: "2" do
|
|
@tag = @template.create_content_tag_for!(@assignment)
|
|
lock_index_tag
|
|
|
|
get "/courses/#{@minion.id}/assignments"
|
|
verify_index_locked
|
|
unlock_index_tag
|
|
|
|
refresh_page
|
|
verify_index_unlocked
|
|
end
|
|
|
|
it "pages show a lock icon on the index page", priority: "2" do
|
|
@tag = @template.create_content_tag_for!(@page)
|
|
lock_index_tag
|
|
|
|
get "/courses/#{@minion.id}/pages"
|
|
verify_index_locked
|
|
unlock_index_tag
|
|
|
|
refresh_page
|
|
verify_index_unlocked
|
|
end
|
|
|
|
it "quizzes show a lock icon on the index page", priority: "2" do
|
|
@tag = @template.create_content_tag_for!(@quiz)
|
|
lock_index_tag
|
|
|
|
get "/courses/#{@minion.id}/quizzes"
|
|
verify_index_locked
|
|
unlock_index_tag
|
|
|
|
refresh_page
|
|
verify_index_unlocked
|
|
end
|
|
|
|
it "does not show wiki sidebar for locked quizzes", priority: "2" do
|
|
@tag = @template.create_content_tag_for!(@quiz)
|
|
lock_index_tag
|
|
|
|
get "/courses/#{@minion.id}/quizzes/#{@quiz_copy.id}/edit"
|
|
expect(f('#right-side')).not_to contain_css('#editor_tabs')
|
|
end
|
|
end
|
|
|
|
context "in the master course" do
|
|
it "assignments show a working lock button on the index page", priority: "2" do
|
|
get "/courses/#{@master.id}/assignments"
|
|
element = blueprint_index_assignment_icon
|
|
escape = f('input#search_term.ic-Input')
|
|
|
|
element.find_element(:css, @unlocked_button_css).click
|
|
escape.click # click away from the button due to firefox functionality
|
|
refresh_page # refresh the page to retrieve info from backend
|
|
|
|
element = blueprint_index_assignment_icon
|
|
escape = f('input#search_term.ic-Input')
|
|
|
|
verify_unlocked(element)
|
|
element.find_element(:css, @locked_button_css).click
|
|
escape.click # click away from the button due to firefox functionality
|
|
refresh_page
|
|
|
|
element = blueprint_index_assignment_icon
|
|
expect(element).not_to contain_css(@locked_button_css) # verify that the state has changed.
|
|
end
|
|
|
|
it "pages show a working lock button on the index page", priority: "2" do
|
|
get "/courses/#{@master.id}/pages"
|
|
element = blueprint_index_pages_icon
|
|
escape = f('.header-bar-outer-container')
|
|
|
|
element.find_element(:css, @unlocked_button_css).click
|
|
escape.click # click away from the button due to firefox functionality
|
|
refresh_page # refresh the page to retrieve info from backend
|
|
|
|
element = blueprint_index_pages_icon
|
|
escape = f('.header-bar-outer-container')
|
|
|
|
verify_unlocked(element)
|
|
element.find_element(:css, @locked_button_css).click
|
|
escape.click # click away from the button due to firefox functionality
|
|
refresh_page
|
|
|
|
element = blueprint_index_pages_icon
|
|
expect(element).not_to contain_css(@locked_button_css) # verify that the state has changed.
|
|
end
|
|
|
|
it "quizzes show a working lock button on the index page", priority: "2" do
|
|
get "/courses/#{@master.id}/quizzes"
|
|
element = blueprint_index_quizzes_icon
|
|
escape = blueprint_index_quizzes_search_bar
|
|
|
|
element.find_element(:css, @unlocked_button_css).click
|
|
escape.click # click away from the button due to firefox functionality
|
|
refresh_page # refresh the page to retrieve info from backend
|
|
|
|
element = blueprint_index_quizzes_icon
|
|
escape = blueprint_index_quizzes_search_bar
|
|
|
|
verify_unlocked(element)
|
|
element.find_element(:css, @locked_button_css).click
|
|
escape.click # click away from the button due to firefox functionality
|
|
refresh_page
|
|
|
|
element = blueprint_index_quizzes_icon
|
|
expect(element).not_to contain_css(@locked_button_css) # verify that the state has changed.
|
|
end
|
|
end
|
|
end
|
|
|
|
context "on the show page," do
|
|
before :once do
|
|
account_admin_user(active_all: true)
|
|
end
|
|
|
|
before do
|
|
user_session(@admin)
|
|
end
|
|
|
|
it "assignments show a lock icon on the show page", priority: "2" do
|
|
@tag = @template.create_content_tag_for!(@assignment)
|
|
@tag.update(restrictions: { content: true }) # lock the item. Does not require a migration.
|
|
get "/courses/#{@master.id}/assignments/#{@assignment.id}"
|
|
|
|
verify_show_page_locked
|
|
blueprint_lock_icon_button.click
|
|
refresh_page
|
|
|
|
verify_show_page_unlocked
|
|
blueprint_lock_icon_button.click
|
|
refresh_page
|
|
|
|
verify_show_page_locked
|
|
end
|
|
|
|
it "discussions show a lock icon on the show page", priority: "2" do
|
|
@tag = @template.create_content_tag_for!(@discussion)
|
|
@tag.update(restrictions: { content: true }) # lock the item. Does not require a migration.
|
|
get "/courses/#{@master.id}/discussion_topics/#{@discussion.id}"
|
|
|
|
verify_show_page_locked
|
|
blueprint_lock_icon_button.click
|
|
refresh_page
|
|
|
|
verify_show_page_unlocked
|
|
blueprint_lock_icon_button.click
|
|
refresh_page
|
|
|
|
verify_show_page_locked
|
|
end
|
|
|
|
it "pages show a lock icon on the show page", priority: "2" do
|
|
@tag = @template.create_content_tag_for!(@page)
|
|
@tag.update(restrictions: { content: true }) # lock the item. Does not require a migration.
|
|
get "/courses/#{@master.id}/pages/#{@page.id}"
|
|
|
|
verify_show_page_locked
|
|
blueprint_lock_icon_button.click
|
|
refresh_page
|
|
|
|
verify_show_page_unlocked
|
|
blueprint_lock_icon_button.click
|
|
refresh_page
|
|
|
|
verify_show_page_locked
|
|
end
|
|
|
|
it "quizzes show a lock icon on the show page", priority: "2" do
|
|
@tag = @template.create_content_tag_for!(@quiz)
|
|
@tag.update(restrictions: { content: true }) # lock the item. Does not require a migration.
|
|
get "/courses/#{@master.id}/quizzes/#{@quiz.id}"
|
|
|
|
verify_show_page_locked
|
|
blueprint_lock_icon_button.click
|
|
refresh_page
|
|
|
|
verify_show_page_unlocked
|
|
blueprint_lock_icon_button.click
|
|
refresh_page
|
|
|
|
verify_show_page_locked
|
|
end
|
|
end
|
|
end
|