Add Discussion anonymous state to Course Importer
flag=none closes VICE-2774 Test Plan: - Tests pass - Go to course A - Create an Anonymous Discussion Topic - Go to course B - Go to Settings - On the right side, click on Import Course Content - On Content Type select Copy a Canvas Course - Search for the course A (whatever name it has) - On Content choose: "Select specific content" - Click on Import - Then on the Current Jobs table click on Select Content - Expand Discussion Topics (clicking on the arrow) - Select the discussion topic to import - Click on Select Content. - Once the job is completed, verify that the Discussion Topic was added to the course as anonymous. Change-Id: I0ce26478c3f3fea3a7fb3c305ef8985390ab606a Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/295548 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> QA-Review: Caleb Guanzon <cguanzon@instructure.com> Reviewed-by: Jeffrey Johnson <jeffrey.johnson@instructure.com> Product-Review: Jeffrey Johnson <jeffrey.johnson@instructure.com>
This commit is contained in:
parent
dfe44da16f
commit
efb3347b0a
|
@ -181,11 +181,15 @@ module Types
|
|||
def anonymous_author
|
||||
if object.anonymous_state == "full_anonymity" || (object.anonymous_state == "partial_anonymity" && object.is_anonymous_author)
|
||||
Loaders::DiscussionTopicParticipantLoader.for(object.id).load(object.user_id).then do |participant|
|
||||
{
|
||||
id: participant.id.to_s(36),
|
||||
short_name: object.user_id == current_user.id ? "current_user" : participant.id.to_s(36),
|
||||
avatar_url: nil
|
||||
}
|
||||
if participant.nil?
|
||||
nil
|
||||
else
|
||||
{
|
||||
id: participant.id.to_s(36),
|
||||
short_name: object.user_id == current_user.id ? "current_user" : participant.id.to_s(36),
|
||||
avatar_url: nil
|
||||
}
|
||||
end
|
||||
end
|
||||
else
|
||||
nil
|
||||
|
|
|
@ -101,7 +101,7 @@ module Importers
|
|||
|
||||
%i[migration_id title discussion_type position pinned
|
||||
require_initial_post allow_rating only_graders_can_rate
|
||||
sort_by_rating].each do |attr|
|
||||
sort_by_rating anonymous_state is_anonymous_author].each do |attr|
|
||||
next if options[attr].nil? && item.class.columns_hash[attr.to_s].type == :boolean
|
||||
|
||||
item.send("#{attr}=", options[attr])
|
||||
|
@ -197,7 +197,7 @@ module Importers
|
|||
class DiscussionTopicOptions
|
||||
attr_reader :options
|
||||
|
||||
BOOLEAN_KEYS = %i[pinned require_initial_post locked].freeze
|
||||
BOOLEAN_KEYS = %i[pinned require_initial_post locked is_anonymous_author].freeze
|
||||
|
||||
def initialize(options = {})
|
||||
@options = options.with_indifferent_access
|
||||
|
|
|
@ -70,12 +70,13 @@ module CC::Importer::Canvas
|
|||
topic["workflow_state"] = wf_state if wf_state.present?
|
||||
topic["group_category"] = get_node_val(meta_doc, "group_category")
|
||||
topic["todo_date"] = get_time_val(meta_doc, "todo_date")
|
||||
%w[has_group_category allow_rating only_graders_can_rate sort_by_rating locked].each do |setting|
|
||||
%w[has_group_category allow_rating only_graders_can_rate sort_by_rating locked is_anonymous_author].each do |setting|
|
||||
get_bool_val(meta_doc, setting).tap { |val| topic[setting] = val unless val.nil? }
|
||||
end
|
||||
if (asmnt_node = meta_doc.at_css("assignment"))
|
||||
topic["assignment"] = parse_canvas_assignment_data(asmnt_node)
|
||||
end
|
||||
topic["anonymous_state"] = get_node_val(meta_doc, "anonymous_state")
|
||||
end
|
||||
|
||||
topic
|
||||
|
|
|
@ -138,6 +138,8 @@ module CC
|
|||
AssignmentResources.create_canvas_assignment(a, topic.assignment, @manifest)
|
||||
end
|
||||
end
|
||||
doc.anonymous_state topic.anonymous_state unless topic.anonymous_state.nil?
|
||||
doc.is_anonymous_author "true" if topic.is_anonymous_author
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -48,6 +48,29 @@ describe ContentMigration do
|
|||
expect(new_topic.todo_date.to_i).to eq todo_date.to_i
|
||||
end
|
||||
|
||||
it "copies discussion topic full_anonymity anonymous_state" do
|
||||
topic = @copy_from.discussion_topics.create!(title: "full_anonymity topic", message: "<p>bloop</p>",
|
||||
anonymous_state: "full_anonymity")
|
||||
|
||||
run_course_copy
|
||||
|
||||
new_topic = @copy_to.discussion_topics.where(migration_id: mig_id(topic)).first
|
||||
|
||||
expect(topic.anonymous_state).to eq new_topic.anonymous_state
|
||||
expect(topic.is_anonymous_author).to eq new_topic.is_anonymous_author
|
||||
end
|
||||
|
||||
it "copies discussion topic without anonymous_state" do
|
||||
topic = @copy_from.discussion_topics.create!(title: "regular topic", message: "<p>bloop</p>")
|
||||
|
||||
run_course_copy
|
||||
|
||||
new_topic = @copy_to.discussion_topics.where(migration_id: mig_id(topic)).first
|
||||
|
||||
expect(new_topic.anonymous_state).to eq nil
|
||||
expect(new_topic.is_anonymous_author).to eq false
|
||||
end
|
||||
|
||||
it "copies locked state for announcements" do
|
||||
@copy_from.announcements.create!(title: "topic", message: "<p>bloop</p>", locked: true)
|
||||
|
||||
|
|
Loading…
Reference in New Issue