Keep rich content as-is during classic to new quiz migration
NQ can render and edit content made in Classic. Simplest way to move CQ rich content to NQ is to not touch rich content wwhen content stays in course. closes QUIZ-11030 flag=new_quizzes_migrate_without_content_rewrite test plan: - create CQ - add 1 question - add rich content: images, videos, links, docs - click on kebab, click Migrate - wait, until migration is done - check the NQ and validate that content is unchanged 2 - export CQ from the course export content menu - check zip, html fields should contain palceholders 3 - do a course copy - ContentExport.last - find the download url - unzip file and check that placeholders are in content - check target course and verify links are replaced 4 - do a copy to with the CQ - go to target course - check that links are replaced 5 - create a blueprint course - create a CQ with content - create a new course - sync bp into new course - ensure CQ has updated links Change-Id: I6ea48e78c2fd1e30c45b7639ba243b3f0d29e039 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/315752 Reviewed-by: Luis Oliveira <luis.oliveira@instructure.com> Reviewed-by: Jeremy Stanley <jeremy@instructure.com> Reviewed-by: Viktor Szpisják <viktor.szpisjak@instructure.com> QA-Review: Ferenc Marcsó <ferenc.marcso@instructure.com> Product-Review: Tamas Balogh <tamas.balogh@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
This commit is contained in:
parent
8e6da0d0f2
commit
3b1ceec840
|
@ -56,4 +56,8 @@ module NewQuizzesFeaturesHelper
|
|||
def new_quizzes_bank_migrations_enabled?(context = @context)
|
||||
context.feature_enabled?(:quizzes_next) && context.root_account.feature_enabled?(:new_quizzes_migration) && Account.site_admin.feature_enabled?(:new_quizzes_bank_migrations)
|
||||
end
|
||||
|
||||
def disable_content_rewriting?(context = @context)
|
||||
context.feature_enabled?(:quizzes_next) && Account.site_admin.feature_enabled?(:new_quizzes_migrate_without_content_rewrite)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -322,6 +322,10 @@ class ContentExport < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def disable_content_rewriting?
|
||||
quizzes_next? && NewQuizzesFeaturesHelper.disable_content_rewriting?(context)
|
||||
end
|
||||
|
||||
def export_quizzes2
|
||||
mark_exporting
|
||||
begin
|
||||
|
|
|
@ -83,3 +83,11 @@ new_quizzes_exports:
|
|||
display_name: New Quizzes Export Support
|
||||
description: Support exporting New Quizzes in QTI format
|
||||
applies_to: SiteAdmin
|
||||
new_quizzes_migrate_without_content_rewrite:
|
||||
state: hidden
|
||||
display_name: New Quizzes Migrate Without Content Rewrite
|
||||
description: Migrating a single classic quiz will leave HTML rich content fields as-is.
|
||||
applies_to: SiteAdmin
|
||||
environments:
|
||||
development:
|
||||
state: allowed_on
|
||||
|
|
|
@ -24,7 +24,7 @@ module CC
|
|||
|
||||
ZIP_DIR = "zip_dir"
|
||||
|
||||
attr_accessor :course, :user, :export_dir, :manifest, :zip_file, :for_course_copy, :for_master_migration
|
||||
attr_accessor :course, :user, :export_dir, :manifest, :zip_file, :for_course_copy, :for_master_migration, :disable_content_rewriting
|
||||
|
||||
delegate :add_error, :add_item_to_export, to: :@content_export, allow_nil: true
|
||||
|
||||
|
@ -33,6 +33,7 @@ module CC
|
|||
@course = opts[:course] || @content_export.context
|
||||
raise "CCExporter supports only Courses" unless @course.is_a?(Course) # a Course is a Course, of course, of course
|
||||
|
||||
@disable_content_rewriting = @content_export&.disable_content_rewriting?
|
||||
@user = opts[:user] || @content_export.user
|
||||
@export_dir = nil
|
||||
@manifest = nil
|
||||
|
|
|
@ -217,6 +217,7 @@ module CC
|
|||
@for_epub_export = opts[:for_epub_export]
|
||||
@key_generator = opts[:key_generator] || CC::CCHelper
|
||||
@referenced_files = {}
|
||||
@disable_content_rewriting = !!opts[:disable_content_rewriting] || false
|
||||
|
||||
@rewriter.set_handler("file_contents") do |match|
|
||||
if match.url =~ %r{/media_objects/(\d_\w+)}
|
||||
|
@ -337,6 +338,8 @@ module CC
|
|||
end
|
||||
|
||||
def html_content(html)
|
||||
return html if @disable_content_rewriting
|
||||
|
||||
html = @rewriter.translate_content(html)
|
||||
return html if html.blank? || @for_course_copy
|
||||
|
||||
|
|
|
@ -35,7 +35,8 @@ module CC
|
|||
@exporter.user,
|
||||
key_generator: @exporter,
|
||||
track_referenced_files: true,
|
||||
media_object_flavor: Setting.get("exporter_media_object_flavor", nil).presence)
|
||||
media_object_flavor: Setting.get("exporter_media_object_flavor", nil).presence,
|
||||
disable_content_rewriting: @exporter.disable_content_rewriting)
|
||||
end
|
||||
|
||||
def export_dir
|
||||
|
|
|
@ -205,4 +205,50 @@ describe NewQuizzesFeaturesHelper do
|
|||
expect(new_quizzes_by_default?).to be false
|
||||
end
|
||||
end
|
||||
|
||||
describe "#disable_content_rewriting?" do
|
||||
def flag_state(value)
|
||||
Account.site_admin.set_feature_flag!(:new_quizzes_migrate_without_content_rewrite, value)
|
||||
end
|
||||
|
||||
context "quizzes_next is true" do
|
||||
before do
|
||||
allow(@context).to receive(:feature_enabled?).with(:quizzes_next).and_return(true)
|
||||
end
|
||||
|
||||
context "flag is off" do
|
||||
it "returns false" do
|
||||
flag_state Feature::STATE_OFF
|
||||
expect(NewQuizzesFeaturesHelper.disable_content_rewriting?(@context)).to be false
|
||||
end
|
||||
end
|
||||
|
||||
context "flag is on" do
|
||||
it "returns true" do
|
||||
flag_state Feature::STATE_ON
|
||||
expect(NewQuizzesFeaturesHelper.disable_content_rewriting?(@context)).to be true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "quizzes_next is false" do
|
||||
before do
|
||||
allow(@context).to receive(:feature_enabled?).with(:quizzes_next).and_return(false)
|
||||
end
|
||||
|
||||
context "flag is off" do
|
||||
it "returns false" do
|
||||
flag_state Feature::STATE_OFF
|
||||
expect(NewQuizzesFeaturesHelper.disable_content_rewriting?(@context)).to be false
|
||||
end
|
||||
end
|
||||
|
||||
context "flag is on" do
|
||||
it "returns false" do
|
||||
flag_state Feature::STATE_ON
|
||||
expect(NewQuizzesFeaturesHelper.disable_content_rewriting?(@context)).to be false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1092,4 +1092,27 @@ describe "Common Cartridge exporting" do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#disable_content_rewriting" do
|
||||
subject { cc_exporter.disable_content_rewriting }
|
||||
|
||||
let(:content_export) { ContentExport.new(context: course_model) }
|
||||
let(:cc_exporter) { CC::CCExporter.new(content_export) }
|
||||
|
||||
context "ContentExport disable_content_rewriting is true" do
|
||||
before do
|
||||
allow(content_export).to receive(:disable_content_rewriting?).and_return true
|
||||
end
|
||||
|
||||
it { is_expected.to be true }
|
||||
end
|
||||
|
||||
context "ContentExport disable_content_rewriting is false" do
|
||||
before do
|
||||
allow(content_export).to receive(:disable_content_rewriting?).and_return false
|
||||
end
|
||||
|
||||
it { is_expected.to be false }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -319,5 +319,35 @@ describe CC::CCHelper do
|
|||
HTML
|
||||
end.not_to raise_error
|
||||
end
|
||||
|
||||
context "disable_content_rewriting is truthy" do
|
||||
let(:html) { "<p><a href=\"/courses/#{@course.id}/files\">Files tab</a></p>" }
|
||||
|
||||
it "skips html rewrite" do
|
||||
@exporter = CC::CCHelper::HtmlContentExporter.new(@course, @user, disable_content_rewriting: true)
|
||||
expect(@exporter.html_content(html)).to eq(html)
|
||||
|
||||
@exporter = CC::CCHelper::HtmlContentExporter.new(@course, @user, disable_content_rewriting: "false")
|
||||
expect(@exporter.html_content(html)).to eq(html)
|
||||
|
||||
@exporter = CC::CCHelper::HtmlContentExporter.new(@course, @user, disable_content_rewriting: "true")
|
||||
expect(@exporter.html_content(html)).to eq(html)
|
||||
|
||||
@exporter = CC::CCHelper::HtmlContentExporter.new(@course, @user, disable_content_rewriting: 5)
|
||||
expect(@exporter.html_content(html)).to eq(html)
|
||||
end
|
||||
end
|
||||
|
||||
context "disable_content_rewriting is false or unset" do
|
||||
let(:html) { "<p><a href=\"/courses/#{@course.id}/files\">Files tab</a></p>" }
|
||||
|
||||
it "does html rewrite" do
|
||||
@exporter = CC::CCHelper::HtmlContentExporter.new(@course, @user, disable_content_rewriting: false)
|
||||
expect(@exporter.html_content(html)).to not_eq(html)
|
||||
|
||||
@exporter = CC::CCHelper::HtmlContentExporter.new(@course, @user)
|
||||
expect(@exporter.html_content(html)).to not_eq(html)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -403,4 +403,54 @@ describe ContentExport do
|
|||
export.create_key(a)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#disable_content_rewriting?" do
|
||||
subject { content_export.disable_content_rewriting? }
|
||||
|
||||
def create_content_export(opts = {})
|
||||
course = course_model
|
||||
allow(course).to receive(:feature_enabled?).with(:quizzes_next).and_return(true)
|
||||
ContentExport.new({ context: course }.merge(opts))
|
||||
end
|
||||
|
||||
context "quizzes_next export" do
|
||||
let(:content_export) { create_content_export(export_type: ContentExport::QUIZZES2, settings: { quizzes2: {} }) }
|
||||
|
||||
context "content rewrite is enabled" do
|
||||
before do
|
||||
allow(NewQuizzesFeaturesHelper).to receive(:disable_content_rewriting?).and_return false
|
||||
end
|
||||
|
||||
it { is_expected.to be false }
|
||||
end
|
||||
|
||||
context "content rewrite is disabled" do
|
||||
before do
|
||||
allow(NewQuizzesFeaturesHelper).to receive(:disable_content_rewriting?).and_return true
|
||||
end
|
||||
|
||||
it { is_expected.to be true }
|
||||
end
|
||||
end
|
||||
|
||||
context "non-quizzes_next export" do
|
||||
let(:content_export) { create_content_export(export_type: ContentExport::COURSE_COPY) }
|
||||
|
||||
context "content rewrite is enabled" do
|
||||
before do
|
||||
allow(NewQuizzesFeaturesHelper).to receive(:disable_content_rewriting?).and_return false
|
||||
end
|
||||
|
||||
it { is_expected.to be false }
|
||||
end
|
||||
|
||||
context "content rewrite is disabled" do
|
||||
before do
|
||||
allow(NewQuizzesFeaturesHelper).to receive(:disable_content_rewriting?).and_return true
|
||||
end
|
||||
|
||||
it { is_expected.to be false }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue