moodle2cc 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
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