moodle2cc 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog +7 -0
- data/lib/moodle2cc.rb +3 -0
- data/lib/moodle2cc/canvas_cc/calculated_question_writer.rb +11 -0
- data/lib/moodle2cc/canvas_cc/matching_question_writer.rb +6 -4
- data/lib/moodle2cc/canvas_cc/models/assessment.rb +1 -1
- data/lib/moodle2cc/canvas_cc/models/calculated_question.rb +13 -1
- data/lib/moodle2cc/canvas_cc/models/course.rb +2 -2
- data/lib/moodle2cc/canvas_cc/models/multiple_dropdowns_question.rb +7 -0
- data/lib/moodle2cc/canvas_cc/models/page.rb +7 -1
- data/lib/moodle2cc/canvas_cc/models/question.rb +1 -0
- data/lib/moodle2cc/canvas_cc/multiple_answers_question_writer.rb +7 -6
- data/lib/moodle2cc/canvas_cc/multiple_dropdowns_question_writer.rb +30 -0
- data/lib/moodle2cc/canvas_cc/question_writer.rb +2 -1
- data/lib/moodle2cc/moodle2/extractor.rb +7 -0
- data/lib/moodle2cc/moodle2/models.rb +1 -1
- data/lib/moodle2cc/moodle2/models/course.rb +3 -2
- data/lib/moodle2cc/moodle2/models/label.rb +5 -5
- data/lib/moodle2cc/moodle2/models/questionnaire.rb +1 -1
- data/lib/moodle2cc/moodle2/models/quizzes.rb +1 -0
- data/lib/moodle2cc/moodle2/models/quizzes/calculated_question.rb +2 -1
- data/lib/moodle2cc/moodle2/models/quizzes/multichoice_question.rb +6 -0
- data/lib/moodle2cc/moodle2/models/quizzes/question.rb +1 -1
- data/lib/moodle2cc/moodle2/models/wiki.rb +10 -0
- data/lib/moodle2cc/moodle2/parsers.rb +1 -0
- data/lib/moodle2cc/moodle2/parsers/course_parser.rb +5 -5
- data/lib/moodle2cc/moodle2/parsers/parser_helper.rb +7 -2
- data/lib/moodle2cc/moodle2/parsers/question_parsers/calculated_parser.rb +11 -1
- data/lib/moodle2cc/moodle2/parsers/question_parsers/match_parser.rb +2 -1
- data/lib/moodle2cc/moodle2/parsers/question_parsers/multichoice_parser.rb +2 -0
- data/lib/moodle2cc/moodle2/parsers/questionnaire_parser.rb +5 -0
- data/lib/moodle2cc/moodle2/parsers/quiz_parser.rb +5 -0
- data/lib/moodle2cc/moodle2/parsers/section_parser.rb +5 -1
- data/lib/moodle2cc/moodle2/parsers/wiki_parser.rb +47 -0
- data/lib/moodle2cc/moodle2converter/assessment_converter.rb +6 -4
- data/lib/moodle2cc/moodle2converter/assignment_converter.rb +1 -1
- data/lib/moodle2cc/moodle2converter/book_converter.rb +4 -4
- data/lib/moodle2cc/moodle2converter/converter_helper.rb +14 -0
- data/lib/moodle2cc/moodle2converter/discussion_converter.rb +1 -1
- data/lib/moodle2cc/moodle2converter/feedback_converter.rb +3 -3
- data/lib/moodle2cc/moodle2converter/html_converter.rb +16 -1
- data/lib/moodle2cc/moodle2converter/label_converter.rb +2 -2
- data/lib/moodle2cc/moodle2converter/migrator.rb +70 -2
- data/lib/moodle2cc/moodle2converter/question_bank_converter.rb +1 -1
- data/lib/moodle2cc/moodle2converter/question_converters.rb +1 -0
- data/lib/moodle2cc/moodle2converter/question_converters/calculated_converter.rb +1 -0
- data/lib/moodle2cc/moodle2converter/question_converters/matching_converter.rb +3 -0
- data/lib/moodle2cc/moodle2converter/question_converters/multichoice_converter.rb +15 -0
- data/lib/moodle2cc/moodle2converter/question_converters/multiple_blanks_converter.rb +1 -1
- data/lib/moodle2cc/moodle2converter/question_converters/question_converter.rb +3 -5
- data/lib/moodle2cc/moodle2converter/questionnaire_converter.rb +44 -8
- data/lib/moodle2cc/moodle2converter/section_converter.rb +3 -3
- data/lib/moodle2cc/moodle2converter/wiki_converter.rb +37 -0
- data/lib/moodle2cc/version.rb +1 -1
- data/spec/moodle2cc/canvas_cc/calculated_question_writer_spec.rb +7 -0
- data/spec/moodle2cc/canvas_cc/matching_question_writer_spec.rb +2 -2
- data/spec/moodle2cc/canvas_cc/models/assessment_spec.rb +1 -1
- data/spec/moodle2cc/canvas_cc/models/calculated_question_spec.rb +25 -0
- data/spec/moodle2cc/canvas_cc/models/page_spec.rb +6 -0
- data/spec/moodle2cc/canvas_cc/multiple_answers_question_writer_spec.rb +4 -1
- data/spec/moodle2cc/canvas_cc/multiple_blanks_question_writer_spec.rb +1 -1
- data/spec/moodle2cc/canvas_cc/multiple_dropdowns_question_writer_spec.rb +46 -0
- data/spec/moodle2cc/moodle2/extractor_spec.rb +8 -0
- data/spec/moodle2cc/moodle2/models/label_spec.rb +4 -4
- data/spec/moodle2cc/moodle2/parsers/parser_helper_spec.rb +10 -0
- data/spec/moodle2cc/moodle2/parsers/question_parsers/calculated_parser_spec.rb +17 -0
- data/spec/moodle2cc/moodle2/parsers/questionnaire_parser_spec.rb +4 -0
- data/spec/moodle2cc/moodle2/parsers/quiz_parser_spec.rb +1 -1
- data/spec/moodle2cc/moodle2/parsers/wiki_parser_spec.rb +23 -0
- data/spec/moodle2cc/moodle2converter/assessment_converter_spec.rb +12 -7
- data/spec/moodle2cc/moodle2converter/converter_helper_spec.rb +5 -0
- data/spec/moodle2cc/moodle2converter/html_converter_spec.rb +7 -2
- data/spec/moodle2cc/moodle2converter/label_converter_spec.rb +17 -0
- data/spec/moodle2cc/moodle2converter/migrator_spec.rb +83 -2
- data/spec/moodle2cc/moodle2converter/question_converters/calculated_converter_spec.rb +2 -0
- data/spec/moodle2cc/moodle2converter/question_converters/matching_converter_spec.rb +2 -3
- data/spec/moodle2cc/moodle2converter/question_converters/multichoice_converter_spec.rb +26 -0
- data/spec/moodle2cc/moodle2converter/question_converters/question_converter_spec.rb +0 -3
- data/spec/moodle2cc/moodle2converter/wiki_converter_spec.rb +36 -0
- data/test/fixtures/moodle2/backup/activities/quiz_5/quiz.xml +1 -1
- data/test/fixtures/moodle2/backup/activities/wiki_58541/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/wiki_58541/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/wiki_58541/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/wiki_58541/inforef.xml +47 -0
- data/test/fixtures/moodle2/backup/activities/wiki_58541/module.xml +28 -0
- data/test/fixtures/moodle2/backup/activities/wiki_58541/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/wiki_58541/wiki.xml +70 -0
- data/test/fixtures/moodle2/backup/moodle_backup.xml +7 -0
- metadata +33 -2
@@ -33,16 +33,16 @@ module Moodle2CC::Moodle2::Models
|
|
33
33
|
subject.name = ("a" * 50) + "..."
|
34
34
|
subject.intro = ("a" * 70)
|
35
35
|
|
36
|
-
expect(subject.converted_title).to eq
|
36
|
+
expect(subject.converted_title).to eq subject.intro
|
37
37
|
expect(subject.convert_to_page?).to eq false
|
38
38
|
expect(subject.convert_to_header?).to eq true
|
39
39
|
end
|
40
40
|
|
41
|
-
it 'should
|
41
|
+
it 'should convert to page if the intro text is too long' do
|
42
42
|
subject.name = '<hr>'
|
43
|
-
subject.intro = ("a" *
|
43
|
+
subject.intro = ("a" * (Moodle2CC::Moodle2Converter::ConverterHelper::MAX_TITLE_LENGTH + 20))
|
44
44
|
|
45
|
-
expect(subject.converted_title).to eq
|
45
|
+
expect(subject.converted_title).to eq subject.intro
|
46
46
|
expect(subject.convert_to_page?).to eq true
|
47
47
|
expect(subject.convert_to_header?).to eq false
|
48
48
|
end
|
@@ -44,6 +44,16 @@ describe Moodle2CC::Moodle2::Parsers::ParserHelper do
|
|
44
44
|
expect(subject.parse_text(parent_node, 'path')).to eq nil
|
45
45
|
end
|
46
46
|
|
47
|
+
it "replaces the @$FILEPHP$@ token with $IMS_CC_FILEBASE$" do
|
48
|
+
child_node.stub(:text) { "<a href=\"$@FILEPHP@$/somefile\">linkylink</a>" }
|
49
|
+
expect(subject.parse_text(parent_node, 'path')).to eq "<a href=\"$IMS_CC_FILEBASE$/somefile\">linkylink</a>"
|
50
|
+
end
|
51
|
+
|
52
|
+
it "replaces the @$SLASH$@ token with a slash" do
|
53
|
+
child_node.stub(:text) { "<a href=\"something$@SLASH@$somefile\">linkylink</a>" }
|
54
|
+
expect(subject.parse_text(parent_node, 'path')).to eq "<a href=\"something/somefile\">linkylink</a>"
|
55
|
+
end
|
56
|
+
|
47
57
|
it "uses #at_xpath when ns is true" do
|
48
58
|
expect(subject.parse_text(parent_node, 'path', true)).to eq 'value'
|
49
59
|
expect(parent_node).to have_received(:at_xpath).with('path')
|
@@ -36,6 +36,12 @@ module Moodle2CC::Moodle2
|
|
36
36
|
var2 = question.dataset_definitions[1]
|
37
37
|
expect(var2[:name]).to eq 'B'
|
38
38
|
expect(var2[:options]).to eq 'uniform:1:10:1'
|
39
|
+
|
40
|
+
expect(question.var_sets.count).to eq 1
|
41
|
+
set = question.var_sets.first
|
42
|
+
expect(set[:ident]).to eq '1'
|
43
|
+
expect(set[:vars]["A"]).to eq "3.5"
|
44
|
+
expect(set[:vars]["B"]).to eq "3.1"
|
39
45
|
end
|
40
46
|
|
41
47
|
it 'parses a calculated multiple choice question into a standard calculated question' do
|
@@ -58,6 +64,12 @@ module Moodle2CC::Moodle2
|
|
58
64
|
var2 = question.dataset_definitions[1]
|
59
65
|
expect(var2[:name]).to eq 'B'
|
60
66
|
expect(var2[:options]).to eq 'uniform:1:10:1'
|
67
|
+
|
68
|
+
expect(question.var_sets.count).to eq 1
|
69
|
+
set = question.var_sets.first
|
70
|
+
expect(set[:ident]).to eq '1'
|
71
|
+
expect(set[:vars]["A"]).to eq "5.1"
|
72
|
+
expect(set[:vars]["B"]).to eq "7.1"
|
61
73
|
end
|
62
74
|
|
63
75
|
it 'parses a calculated simple question' do
|
@@ -78,6 +90,11 @@ module Moodle2CC::Moodle2
|
|
78
90
|
var = question.dataset_definitions.first
|
79
91
|
expect(var[:name]).to eq 'A'
|
80
92
|
expect(var[:options]).to eq 'uniform:1.0:10.0:1'
|
93
|
+
|
94
|
+
expect(question.var_sets.count).to eq 1
|
95
|
+
set = question.var_sets.first
|
96
|
+
expect(set[:ident]).to eq '1'
|
97
|
+
expect(set[:vars]["A"]).to eq "3.6"
|
81
98
|
end
|
82
99
|
end
|
83
100
|
end
|
@@ -27,6 +27,10 @@ describe Moodle2CC::Moodle2::Parsers::QuestionnaireParser do
|
|
27
27
|
|
28
28
|
expect(question.choices.count).to eq 3
|
29
29
|
expect(question.choices.first).to eq ({:id => '1', :content => 'possible answer 1'})
|
30
|
+
|
31
|
+
rating_question = questionnaire.questions.detect{|q| q.id == "8"}
|
32
|
+
rating_question.length.should == "5"
|
33
|
+
rating_question.precise.should == "0"
|
30
34
|
end
|
31
35
|
|
32
36
|
end
|
@@ -52,7 +52,7 @@ describe Moodle2CC::Moodle2::Parsers::QuizParser do
|
|
52
52
|
expect(quiz.visible).to eq true
|
53
53
|
|
54
54
|
expect(quiz.question_instances.map{|q| q[:question]}).to eq (
|
55
|
-
['1', '
|
55
|
+
['1', '3', '2', '4', '10', '11', '12', '13', '14', '15', '17']
|
56
56
|
)
|
57
57
|
expect(quiz.question_instances.map{|q| q[:grade]}).to eq (
|
58
58
|
["1.0000000", "1.0000000", "1.0000000", "5.0000000", "1.0000000",
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Moodle2CC::Moodle2::Parsers::WikiParser do
|
4
|
+
subject(:parser) {Moodle2CC::Moodle2::Parsers::WikiParser.new(fixture_path(File.join('moodle2', 'backup')))}
|
5
|
+
|
6
|
+
it 'parses a moodle2 wiki' do
|
7
|
+
wikis = parser.parse
|
8
|
+
expect(wikis.count).to eq 1
|
9
|
+
wiki = wikis.first
|
10
|
+
|
11
|
+
expect(wiki.module_id).to eq '58541'
|
12
|
+
expect(wiki.id).to eq '19'
|
13
|
+
expect(wiki.name).to eq 'wiki name'
|
14
|
+
expect(wiki.intro).to eq "<p>wiki page description.</p>"
|
15
|
+
expect(wiki.intro_format).to eq '1'
|
16
|
+
expect(wiki.visible).to eq true
|
17
|
+
expect(wiki.first_page_title).to eq 'Main Page'
|
18
|
+
pages = [{:id => '27', :title => "Main Page", :content => "<p>front page content</p>"},
|
19
|
+
{:id => '28', :title => "other page", :content => "<p>other page content</p>"}]
|
20
|
+
expect(wiki.pages).to eq pages
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -16,7 +16,7 @@ describe Moodle2CC::Moodle2Converter::AssessmentConverter do
|
|
16
16
|
moodle_quiz.password = "password"
|
17
17
|
moodle_quiz.subnet = "255.255.255.0"
|
18
18
|
moodle_quiz.shuffle_answers = false
|
19
|
-
moodle_quiz.time_limit = "
|
19
|
+
moodle_quiz.time_limit = "120"
|
20
20
|
moodle_quiz.visible = false
|
21
21
|
|
22
22
|
canvas_assessment = subject.convert_quiz(moodle_quiz)
|
@@ -33,7 +33,7 @@ describe Moodle2CC::Moodle2Converter::AssessmentConverter do
|
|
33
33
|
expect(canvas_assessment.access_code).to eq moodle_quiz.password
|
34
34
|
expect(canvas_assessment.ip_filter).to eq moodle_quiz.subnet
|
35
35
|
expect(canvas_assessment.shuffle_answers).to eq moodle_quiz.shuffle_answers
|
36
|
-
expect(canvas_assessment.time_limit).to eq
|
36
|
+
expect(canvas_assessment.time_limit).to eq 2 # moodle time limit is in seconds
|
37
37
|
expect(canvas_assessment.quiz_type).to eq 'practice_quiz'
|
38
38
|
expect(canvas_assessment.question_references).to eq moodle_quiz.question_instances
|
39
39
|
expect(canvas_assessment.workflow_state).to eq Moodle2CC::CanvasCC::Models::WorkflowState::UNPUBLISHED
|
@@ -101,6 +101,8 @@ describe Moodle2CC::Moodle2Converter::AssessmentConverter do
|
|
101
101
|
question2.name = 'q name 2'
|
102
102
|
question2.content = 'question2 text'
|
103
103
|
question2.type_id = '8'
|
104
|
+
question2.length = '3'
|
105
|
+
question2.precise = '1'
|
104
106
|
question2.choices = [{:id => '4', :content => 'choice3'}, {:id => '5', :content => 'choice4'}]
|
105
107
|
|
106
108
|
moodle_questionnaire.questions = [question1, question2]
|
@@ -126,13 +128,16 @@ describe Moodle2CC::Moodle2Converter::AssessmentConverter do
|
|
126
128
|
expect(canvas_question1.answers).to eq []
|
127
129
|
|
128
130
|
canvas_question2 = canvas_assessment.items[1]
|
129
|
-
expect(canvas_question2.question_type).to eq '
|
130
|
-
expect(canvas_question2.material).to eq question2.content
|
131
|
+
expect(canvas_question2.question_type).to eq 'multiple_dropdowns_question'
|
132
|
+
expect(canvas_question2.material).to eq question2.content + "<p>choice3 [response1]</p><p>choice4 [response2]</p>"
|
131
133
|
expect(canvas_question2.title).to eq question2.name
|
132
|
-
expect(canvas_question2.answers.count).to eq
|
134
|
+
expect(canvas_question2.answers.count).to eq 0
|
133
135
|
|
134
|
-
expect(canvas_question2.
|
135
|
-
expect(canvas_question2.
|
136
|
+
expect(canvas_question2.responses.count).to eq 2
|
137
|
+
expect(canvas_question2.responses.map{|r| r[:id]}).to eq ["response1", "response2"]
|
138
|
+
canvas_question2.responses.each do |response|
|
139
|
+
expect(response[:choices].map{|c| c[:text]}).to eq ["1", "2", "3", "N/A"]
|
140
|
+
end
|
136
141
|
end
|
137
142
|
|
138
143
|
it "should convert a moodle2 feedback activity to an ungraded assessment" do
|
@@ -38,7 +38,7 @@ module Moodle2CC
|
|
38
38
|
expect(html.css('img').first.attr('src')).to eq '%24IMS_CC_FILEBASE%24/path/a'
|
39
39
|
end
|
40
40
|
|
41
|
-
it 'replaces moodle 2 url in hrefs with
|
41
|
+
it 'replaces moodle 2 url in hrefs with canvas url' do
|
42
42
|
content = '<p>a link to <a href="@@PLUGINFILE@@/a97"></p>'
|
43
43
|
html = Nokogiri::HTML.fragment(subject.convert(content))
|
44
44
|
expect(html.css('a[href]').first.attr('href')).to eq '%24IMS_CC_FILEBASE%24/path/a'
|
@@ -179,8 +179,13 @@ module Moodle2CC
|
|
179
179
|
|
180
180
|
expect(html).to eq '<audio controls="controls"><source src="/some/path/to/video.webm" type="video/webm"></source><a href="/some/path/to/video.webm">My Video</a></audio>'
|
181
181
|
end
|
182
|
-
|
182
|
+
end
|
183
183
|
|
184
|
+
it 'converts equations into canvas equations' do
|
185
|
+
content = 'stuff $$a + b$$'
|
186
|
+
html = subject.convert(content)
|
187
|
+
expect(html).to eq "stuff <img class=\"equation_image\" title=\"a + b\" alt=\"a + b\" src=\"/equation_images/a%2520%252B%2520b\">"
|
188
|
+
end
|
184
189
|
|
185
190
|
end
|
186
191
|
end
|
@@ -81,6 +81,23 @@ module Moodle2CC
|
|
81
81
|
pages = subject.convert_to_pages(moodle_label)
|
82
82
|
expect(pages.size).to eq 0
|
83
83
|
end
|
84
|
+
|
85
|
+
it 'truncates titles that are too long' do
|
86
|
+
subject.stub(:generate_unique_identifier) { 'some_random_id' }
|
87
|
+
|
88
|
+
moodle_label.id = '1'
|
89
|
+
moodle_label.name = ''
|
90
|
+
moodle_label.intro = 'a' * 500
|
91
|
+
moodle_label.visible = true
|
92
|
+
|
93
|
+
pages = subject.convert_to_pages(moodle_label)
|
94
|
+
expect(pages.size).to eq 1
|
95
|
+
|
96
|
+
page = pages.first
|
97
|
+
|
98
|
+
expect(page.title.length).to eq Moodle2CC::Moodle2Converter::ConverterHelper::MAX_TITLE_LENGTH
|
99
|
+
expect(page.body).to eq moodle_label.intro
|
100
|
+
end
|
84
101
|
end
|
85
102
|
end
|
86
103
|
end
|
@@ -21,11 +21,12 @@ module Moodle2CC
|
|
21
21
|
Moodle2Converter::SectionConverter.any_instance.stub(:convert)
|
22
22
|
Moodle2Converter::FileConverter.any_instance.stub(:convert)
|
23
23
|
Moodle2Converter::PageConverter.any_instance.stub(:convert)
|
24
|
+
Moodle2Converter::WikiConverter.any_instance.stub(:convert)
|
24
25
|
Moodle2Converter::DiscussionConverter.any_instance.stub(:convert)
|
25
26
|
Moodle2Converter::AssignmentConverter.any_instance.stub(:convert)
|
26
27
|
Moodle2Converter::FolderConverter.any_instance.stub(:convert)
|
27
28
|
Moodle2Converter::BookConverter.any_instance.stub(:convert_to_pages)
|
28
|
-
Moodle2CC::CanvasCC::Models::Assessment.any_instance.stub(:resolve_question_references)
|
29
|
+
Moodle2CC::CanvasCC::Models::Assessment.any_instance.stub(:resolve_question_references!)
|
29
30
|
Moodle2Converter::HtmlConverter.stub(:new) { double('html_converter', convert: true) }
|
30
31
|
Moodle2Converter::GlossaryConverter.any_instance.stub(:convert)
|
31
32
|
CanvasCC::CartridgeCreator.stub(:new).and_return(double(create: nil))
|
@@ -58,6 +59,13 @@ module Moodle2CC
|
|
58
59
|
expect(canvas_course.pages.compact).to eq [canvas_page, canvas_page]
|
59
60
|
end
|
60
61
|
|
62
|
+
it 'converts wikis' do
|
63
|
+
moodle_course.wikis = [:wiki1, :wiki2]
|
64
|
+
Moodle2Converter::WikiConverter.any_instance.stub(:convert).and_return([canvas_page, canvas_page])
|
65
|
+
migrator.migrate
|
66
|
+
expect(canvas_course.pages).to eq [canvas_page] * 4
|
67
|
+
end
|
68
|
+
|
61
69
|
it 'converts discussions' do
|
62
70
|
moodle_course.forums = [:discussion1, :discussion2]
|
63
71
|
Moodle2Converter::DiscussionConverter.any_instance.stub(:convert).and_return(canvas_discussion)
|
@@ -121,6 +129,37 @@ module Moodle2CC
|
|
121
129
|
end
|
122
130
|
end
|
123
131
|
|
132
|
+
context '#resolve_duplicate_page_titles!' do
|
133
|
+
it "should order renumbering of page titles according to position in index" do
|
134
|
+
page1 = Moodle2CC::CanvasCC::Models::Page.new
|
135
|
+
page2 = Moodle2CC::CanvasCC::Models::Page.new
|
136
|
+
page3 = Moodle2CC::CanvasCC::Models::Page.new
|
137
|
+
|
138
|
+
canvas_course.pages = [page1, page2, page3]
|
139
|
+
canvas_course.pages.each_with_index do |page, idx|
|
140
|
+
page.identifier = idx.to_s
|
141
|
+
page.title = 'page title'
|
142
|
+
end
|
143
|
+
|
144
|
+
module1 = Moodle2CC::CanvasCC::Models::CanvasModule.new
|
145
|
+
module_item1 = Moodle2CC::CanvasCC::Models::ModuleItem.new
|
146
|
+
module_item1.identifierref = page3.identifier
|
147
|
+
module1.module_items = [module_item1]
|
148
|
+
|
149
|
+
module2 = Moodle2CC::CanvasCC::Models::CanvasModule.new
|
150
|
+
module_item2 = Moodle2CC::CanvasCC::Models::ModuleItem.new
|
151
|
+
module_item2.identifierref = page2.identifier
|
152
|
+
module2.module_items = [module_item2]
|
153
|
+
|
154
|
+
canvas_course.canvas_modules = [module1, module2]
|
155
|
+
|
156
|
+
migrator.migrate
|
157
|
+
|
158
|
+
expect(page3.title).to eq 'page title'
|
159
|
+
expect(page2.title).to eq 'page title-2'
|
160
|
+
expect(page1.title).to eq 'page title-3'
|
161
|
+
end
|
162
|
+
end
|
124
163
|
|
125
164
|
context "html conversion" do
|
126
165
|
let(:converter){double('invitation', :convert => 'converted_html')}
|
@@ -157,11 +196,53 @@ module Moodle2CC
|
|
157
196
|
migrator.migrate
|
158
197
|
expect(converter).to have_received(:convert).exactly(2)
|
159
198
|
canvas_course.assessments.each do |assessment|
|
160
|
-
expect(assessment).to have_received(:resolve_question_references).exactly(1)
|
199
|
+
expect(assessment).to have_received(:resolve_question_references!).exactly(1)
|
161
200
|
expect(assessment.description).to eq 'converted_html'
|
162
201
|
end
|
163
202
|
end
|
164
203
|
|
204
|
+
it 'converts assessment questions' do
|
205
|
+
assmt = Moodle2CC::CanvasCC::Models::Assessment.new
|
206
|
+
q1 = Moodle2CC::CanvasCC::Models::Question.new
|
207
|
+
a1 = Moodle2CC::CanvasCC::Models::Answer.new
|
208
|
+
q1.answers = [a1]
|
209
|
+
|
210
|
+
q_group = Moodle2CC::CanvasCC::Models::QuestionGroup.new
|
211
|
+
q2 = Moodle2CC::CanvasCC::Models::Question.new
|
212
|
+
a2 = Moodle2CC::CanvasCC::Models::Answer.new
|
213
|
+
q2.answers = [a2]
|
214
|
+
q_group.questions = [q2]
|
215
|
+
|
216
|
+
assmt.items = [q1, q_group]
|
217
|
+
canvas_course.assessments = [assmt]
|
218
|
+
migrator.migrate
|
219
|
+
|
220
|
+
expect(q1.material).to eq 'converted_html'
|
221
|
+
expect(q2.material).to eq 'converted_html'
|
222
|
+
expect(a1.answer_text).to eq 'converted_html'
|
223
|
+
expect(a2.answer_text).to eq 'converted_html'
|
224
|
+
end
|
225
|
+
|
226
|
+
it 'converts question bank questions' do
|
227
|
+
qb = Moodle2CC::CanvasCC::Models::QuestionBank.new
|
228
|
+
q1 = Moodle2CC::CanvasCC::Models::CalculatedQuestion.new
|
229
|
+
q1.stub(:post_process!)
|
230
|
+
a1 = Moodle2CC::CanvasCC::Models::Answer.new
|
231
|
+
q1.general_feedback = 'a'
|
232
|
+
a1.feedback = 'a'
|
233
|
+
|
234
|
+
q1.answers = [a1]
|
235
|
+
qb.questions = [q1]
|
236
|
+
|
237
|
+
canvas_course.question_banks = [qb]
|
238
|
+
migrator.migrate
|
239
|
+
|
240
|
+
expect(q1).to have_received(:post_process!)
|
241
|
+
expect(q1.material).to eq 'converted_html'
|
242
|
+
expect(q1.general_feedback).to eq 'converted_html'
|
243
|
+
expect(a1.answer_text).to eq 'converted_html'
|
244
|
+
expect(a1.feedback).to eq 'converted_html'
|
245
|
+
end
|
165
246
|
end
|
166
247
|
end
|
167
248
|
|
@@ -11,6 +11,7 @@ module Moodle2CC::Moodle2Converter::QuestionConverters
|
|
11
11
|
answer.id = 'blah'
|
12
12
|
moodle_question.answers = [answer]
|
13
13
|
moodle_question.dataset_definitions = ['mock datasets']
|
14
|
+
moodle_question.var_sets = ['mock varsets']
|
14
15
|
moodle_question.correct_answer_format = '1'
|
15
16
|
moodle_question.correct_answer_length = '2'
|
16
17
|
moodle_question.tolerance = '3'
|
@@ -21,6 +22,7 @@ module Moodle2CC::Moodle2Converter::QuestionConverters
|
|
21
22
|
expect(converted_question.answers.count).to eq moodle_question.answers.count
|
22
23
|
expect(converted_question.answers.first.id).to eq moodle_question.answers.first.id
|
23
24
|
expect(converted_question.dataset_definitions).to eq moodle_question.dataset_definitions
|
25
|
+
expect(converted_question.var_sets).to eq moodle_question.var_sets
|
24
26
|
expect(converted_question.correct_answer_format).to eq moodle_question.correct_answer_format
|
25
27
|
expect(converted_question.correct_answer_length).to eq moodle_question.correct_answer_length
|
26
28
|
expect(converted_question.tolerance).to eq moodle_question.tolerance
|
@@ -8,8 +8,7 @@ module Moodle2CC::Moodle2Converter::QuestionConverters
|
|
8
8
|
moodle_question.id = 'something'
|
9
9
|
|
10
10
|
moodle_question.matches = [{
|
11
|
-
:question_text => "This is
|
12
|
-
:question_text_format => '4',
|
11
|
+
:question_text => "<p>This is a bunch of html</p>",
|
13
12
|
:answer_text => 'blah answer'
|
14
13
|
}]
|
15
14
|
|
@@ -17,7 +16,7 @@ module Moodle2CC::Moodle2Converter::QuestionConverters
|
|
17
16
|
|
18
17
|
expect(converted_question.original_identifier).to eq moodle_question.id
|
19
18
|
|
20
|
-
expected_text = "
|
19
|
+
expected_text = "This is a bunch of html"
|
21
20
|
expect(converted_question.matches.first[:question_text]).to eq expected_text
|
22
21
|
expect(converted_question.matches.first[:answer_text]).to eq moodle_question.matches.first[:answer_text]
|
23
22
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Moodle2CC::Moodle2Converter::QuestionConverters
|
4
|
+
describe MultichoiceConverter do
|
5
|
+
|
6
|
+
it 'converts multiple choice questions' do
|
7
|
+
moodle_question = Moodle2CC::Moodle2::Models::Quizzes::Question.create('multichoice')
|
8
|
+
moodle_question.id = 'something'
|
9
|
+
moodle_question.single = true
|
10
|
+
|
11
|
+
converted_question = QuestionConverter.new.convert(moodle_question)
|
12
|
+
|
13
|
+
expect(converted_question.question_type).to eq 'multiple_choice_question'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'converts multiple answer questions' do
|
17
|
+
moodle_question = Moodle2CC::Moodle2::Models::Quizzes::Question.create('multichoice')
|
18
|
+
moodle_question.id = 'something'
|
19
|
+
moodle_question.single = false
|
20
|
+
|
21
|
+
converted_question = QuestionConverter.new.convert(moodle_question)
|
22
|
+
|
23
|
+
expect(converted_question.question_type).to eq 'multiple_answers_question'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -73,9 +73,6 @@ module Moodle2CC::Moodle2Converter::QuestionConverters
|
|
73
73
|
|
74
74
|
converted_question = converter.convert(Moodle2CC::Moodle2::Models::Quizzes::Question.create('shortanswer'))
|
75
75
|
expect(converted_question.question_type).to eq 'short_answer_question'
|
76
|
-
|
77
|
-
converted_question = converter.convert(Moodle2CC::Moodle2::Models::Quizzes::Question.create('multichoice'))
|
78
|
-
expect(converted_question.question_type).to eq 'multiple_choice_question'
|
79
76
|
end
|
80
77
|
|
81
78
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Moodle2CC::Moodle2Converter
|
4
|
+
describe WikiConverter do
|
5
|
+
let(:moodle_wiki){Moodle2CC::Moodle2::Models::Wiki.new}
|
6
|
+
|
7
|
+
it 'converts a moodle wiki to canvas pages' do
|
8
|
+
moodle_wiki.id = 'page_id'
|
9
|
+
moodle_wiki.name = 'wiki name'
|
10
|
+
moodle_wiki.intro = '<h2>wiki description</h2>'
|
11
|
+
moodle_wiki.visible = true
|
12
|
+
moodle_wiki.first_page_title = 'first page name'
|
13
|
+
|
14
|
+
moodle_wiki.pages = [
|
15
|
+
{:id => '27', :title => "first page name", :content => "<p>front page content</p>"},
|
16
|
+
{:id => '28', :title => "other page", :content => "<p>other page content</p>"}
|
17
|
+
]
|
18
|
+
|
19
|
+
canvas_pages = subject.convert(moodle_wiki)
|
20
|
+
expect(canvas_pages.count).to eq 2
|
21
|
+
first_page = canvas_pages.detect{|page| page.title == "wiki name"}
|
22
|
+
other_page = canvas_pages.detect{|page| page.title == "other page"}
|
23
|
+
|
24
|
+
expect(first_page.identifier).not_to eq other_page.identifier
|
25
|
+
|
26
|
+
canvas_pages.each do |canvas_page|
|
27
|
+
expect(canvas_page.workflow_state).to eq 'active'
|
28
|
+
expect(canvas_page.editing_roles).to eq 'teachers'
|
29
|
+
end
|
30
|
+
|
31
|
+
expect(other_page.body).to eq '<p>other page content</p>'
|
32
|
+
expect(first_page.body).to eq '<h2>wiki description</h2><p>front page content</p>'
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|