moodle2cc 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog +7 -0
  3. data/lib/moodle2cc.rb +3 -0
  4. data/lib/moodle2cc/canvas_cc/calculated_question_writer.rb +11 -0
  5. data/lib/moodle2cc/canvas_cc/matching_question_writer.rb +6 -4
  6. data/lib/moodle2cc/canvas_cc/models/assessment.rb +1 -1
  7. data/lib/moodle2cc/canvas_cc/models/calculated_question.rb +13 -1
  8. data/lib/moodle2cc/canvas_cc/models/course.rb +2 -2
  9. data/lib/moodle2cc/canvas_cc/models/multiple_dropdowns_question.rb +7 -0
  10. data/lib/moodle2cc/canvas_cc/models/page.rb +7 -1
  11. data/lib/moodle2cc/canvas_cc/models/question.rb +1 -0
  12. data/lib/moodle2cc/canvas_cc/multiple_answers_question_writer.rb +7 -6
  13. data/lib/moodle2cc/canvas_cc/multiple_dropdowns_question_writer.rb +30 -0
  14. data/lib/moodle2cc/canvas_cc/question_writer.rb +2 -1
  15. data/lib/moodle2cc/moodle2/extractor.rb +7 -0
  16. data/lib/moodle2cc/moodle2/models.rb +1 -1
  17. data/lib/moodle2cc/moodle2/models/course.rb +3 -2
  18. data/lib/moodle2cc/moodle2/models/label.rb +5 -5
  19. data/lib/moodle2cc/moodle2/models/questionnaire.rb +1 -1
  20. data/lib/moodle2cc/moodle2/models/quizzes.rb +1 -0
  21. data/lib/moodle2cc/moodle2/models/quizzes/calculated_question.rb +2 -1
  22. data/lib/moodle2cc/moodle2/models/quizzes/multichoice_question.rb +6 -0
  23. data/lib/moodle2cc/moodle2/models/quizzes/question.rb +1 -1
  24. data/lib/moodle2cc/moodle2/models/wiki.rb +10 -0
  25. data/lib/moodle2cc/moodle2/parsers.rb +1 -0
  26. data/lib/moodle2cc/moodle2/parsers/course_parser.rb +5 -5
  27. data/lib/moodle2cc/moodle2/parsers/parser_helper.rb +7 -2
  28. data/lib/moodle2cc/moodle2/parsers/question_parsers/calculated_parser.rb +11 -1
  29. data/lib/moodle2cc/moodle2/parsers/question_parsers/match_parser.rb +2 -1
  30. data/lib/moodle2cc/moodle2/parsers/question_parsers/multichoice_parser.rb +2 -0
  31. data/lib/moodle2cc/moodle2/parsers/questionnaire_parser.rb +5 -0
  32. data/lib/moodle2cc/moodle2/parsers/quiz_parser.rb +5 -0
  33. data/lib/moodle2cc/moodle2/parsers/section_parser.rb +5 -1
  34. data/lib/moodle2cc/moodle2/parsers/wiki_parser.rb +47 -0
  35. data/lib/moodle2cc/moodle2converter/assessment_converter.rb +6 -4
  36. data/lib/moodle2cc/moodle2converter/assignment_converter.rb +1 -1
  37. data/lib/moodle2cc/moodle2converter/book_converter.rb +4 -4
  38. data/lib/moodle2cc/moodle2converter/converter_helper.rb +14 -0
  39. data/lib/moodle2cc/moodle2converter/discussion_converter.rb +1 -1
  40. data/lib/moodle2cc/moodle2converter/feedback_converter.rb +3 -3
  41. data/lib/moodle2cc/moodle2converter/html_converter.rb +16 -1
  42. data/lib/moodle2cc/moodle2converter/label_converter.rb +2 -2
  43. data/lib/moodle2cc/moodle2converter/migrator.rb +70 -2
  44. data/lib/moodle2cc/moodle2converter/question_bank_converter.rb +1 -1
  45. data/lib/moodle2cc/moodle2converter/question_converters.rb +1 -0
  46. data/lib/moodle2cc/moodle2converter/question_converters/calculated_converter.rb +1 -0
  47. data/lib/moodle2cc/moodle2converter/question_converters/matching_converter.rb +3 -0
  48. data/lib/moodle2cc/moodle2converter/question_converters/multichoice_converter.rb +15 -0
  49. data/lib/moodle2cc/moodle2converter/question_converters/multiple_blanks_converter.rb +1 -1
  50. data/lib/moodle2cc/moodle2converter/question_converters/question_converter.rb +3 -5
  51. data/lib/moodle2cc/moodle2converter/questionnaire_converter.rb +44 -8
  52. data/lib/moodle2cc/moodle2converter/section_converter.rb +3 -3
  53. data/lib/moodle2cc/moodle2converter/wiki_converter.rb +37 -0
  54. data/lib/moodle2cc/version.rb +1 -1
  55. data/spec/moodle2cc/canvas_cc/calculated_question_writer_spec.rb +7 -0
  56. data/spec/moodle2cc/canvas_cc/matching_question_writer_spec.rb +2 -2
  57. data/spec/moodle2cc/canvas_cc/models/assessment_spec.rb +1 -1
  58. data/spec/moodle2cc/canvas_cc/models/calculated_question_spec.rb +25 -0
  59. data/spec/moodle2cc/canvas_cc/models/page_spec.rb +6 -0
  60. data/spec/moodle2cc/canvas_cc/multiple_answers_question_writer_spec.rb +4 -1
  61. data/spec/moodle2cc/canvas_cc/multiple_blanks_question_writer_spec.rb +1 -1
  62. data/spec/moodle2cc/canvas_cc/multiple_dropdowns_question_writer_spec.rb +46 -0
  63. data/spec/moodle2cc/moodle2/extractor_spec.rb +8 -0
  64. data/spec/moodle2cc/moodle2/models/label_spec.rb +4 -4
  65. data/spec/moodle2cc/moodle2/parsers/parser_helper_spec.rb +10 -0
  66. data/spec/moodle2cc/moodle2/parsers/question_parsers/calculated_parser_spec.rb +17 -0
  67. data/spec/moodle2cc/moodle2/parsers/questionnaire_parser_spec.rb +4 -0
  68. data/spec/moodle2cc/moodle2/parsers/quiz_parser_spec.rb +1 -1
  69. data/spec/moodle2cc/moodle2/parsers/wiki_parser_spec.rb +23 -0
  70. data/spec/moodle2cc/moodle2converter/assessment_converter_spec.rb +12 -7
  71. data/spec/moodle2cc/moodle2converter/converter_helper_spec.rb +5 -0
  72. data/spec/moodle2cc/moodle2converter/html_converter_spec.rb +7 -2
  73. data/spec/moodle2cc/moodle2converter/label_converter_spec.rb +17 -0
  74. data/spec/moodle2cc/moodle2converter/migrator_spec.rb +83 -2
  75. data/spec/moodle2cc/moodle2converter/question_converters/calculated_converter_spec.rb +2 -0
  76. data/spec/moodle2cc/moodle2converter/question_converters/matching_converter_spec.rb +2 -3
  77. data/spec/moodle2cc/moodle2converter/question_converters/multichoice_converter_spec.rb +26 -0
  78. data/spec/moodle2cc/moodle2converter/question_converters/question_converter_spec.rb +0 -3
  79. data/spec/moodle2cc/moodle2converter/wiki_converter_spec.rb +36 -0
  80. data/test/fixtures/moodle2/backup/activities/quiz_5/quiz.xml +1 -1
  81. data/test/fixtures/moodle2/backup/activities/wiki_58541/calendar.xml +3 -0
  82. data/test/fixtures/moodle2/backup/activities/wiki_58541/completion.xml +3 -0
  83. data/test/fixtures/moodle2/backup/activities/wiki_58541/grades.xml +7 -0
  84. data/test/fixtures/moodle2/backup/activities/wiki_58541/inforef.xml +47 -0
  85. data/test/fixtures/moodle2/backup/activities/wiki_58541/module.xml +28 -0
  86. data/test/fixtures/moodle2/backup/activities/wiki_58541/roles.xml +7 -0
  87. data/test/fixtures/moodle2/backup/activities/wiki_58541/wiki.xml +70 -0
  88. data/test/fixtures/moodle2/backup/moodle_backup.xml +7 -0
  89. 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 ("a" * 70)
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 truncate the intro text if it is too long' do
41
+ it 'should convert to page if the intro text is too long' do
42
42
  subject.name = '<hr>'
43
- subject.intro = ("a" * 90)
43
+ subject.intro = ("a" * (Moodle2CC::Moodle2Converter::ConverterHelper::MAX_TITLE_LENGTH + 20))
44
44
 
45
- expect(subject.converted_title).to eq (("a" * 80) + '...')
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', '2', '3', '4', '10', '11', '12', '13', '14', '15', '17']
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 = "100"
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 100
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 'multiple_choice_question'
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 2
134
+ expect(canvas_question2.answers.count).to eq 0
133
135
 
134
- expect(canvas_question2.answers.map(&:id)).to eq (question2.choices.map{|c| c[:id]})
135
- expect(canvas_question2.answers.map(&:answer_text)).to eq (question2.choices.map{|c| c[:content]})
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
@@ -168,6 +168,11 @@ module Moodle2CC
168
168
 
169
169
  end
170
170
 
171
+ describe '#truncate_text' do
172
+ it 'should truncate text' do
173
+ expect(subject.truncate_text('truncate me', 8)).to eq 'trunc...'
174
+ end
175
+ end
171
176
 
172
177
  end
173
178
  end
@@ -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 cavans url' do
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
- end
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 **bold** and this is _italic_",
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 = "<p>This is <strong>bold</strong> and this is <em>italic</em></p>\n"
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