moodle2cc 0.2.4 → 0.2.5

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 (76) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog +37 -29
  3. data/lib/moodle2cc.rb +2 -0
  4. data/lib/moodle2cc/canvas_cc/assignment_writer.rb +2 -1
  5. data/lib/moodle2cc/canvas_cc/models/assessment.rb +14 -4
  6. data/lib/moodle2cc/canvas_cc/models/assignment.rb +1 -1
  7. data/lib/moodle2cc/canvas_cc/models/course.rb +7 -1
  8. data/lib/moodle2cc/canvas_cc/models/page.rb +5 -1
  9. data/lib/moodle2cc/canvas_cc/models/question.rb +3 -3
  10. data/lib/moodle2cc/canvas_cc/multiple_answers_question_writer.rb +40 -0
  11. data/lib/moodle2cc/canvas_cc/question_writer.rb +1 -0
  12. data/lib/moodle2cc/moodle2/extractor.rb +23 -0
  13. data/lib/moodle2cc/moodle2/models.rb +5 -1
  14. data/lib/moodle2cc/moodle2/models/choice.rb +12 -0
  15. data/lib/moodle2cc/moodle2/models/course.rb +8 -3
  16. data/lib/moodle2cc/moodle2/models/feedback.rb +15 -0
  17. data/lib/moodle2cc/moodle2/models/label.rb +66 -0
  18. data/lib/moodle2cc/moodle2/models/questionnaire.rb +19 -0
  19. data/lib/moodle2cc/moodle2/parsers.rb +3 -0
  20. data/lib/moodle2cc/moodle2/parsers/choice_parser.rb +52 -0
  21. data/lib/moodle2cc/moodle2/parsers/course_parser.rb +2 -0
  22. data/lib/moodle2cc/moodle2/parsers/feedback_parser.rb +54 -0
  23. data/lib/moodle2cc/moodle2/parsers/questionnaire_parser.rb +58 -0
  24. data/lib/moodle2cc/moodle2converter/assessment_converter.rb +37 -1
  25. data/lib/moodle2cc/moodle2converter/assignment_converter.rb +1 -1
  26. data/lib/moodle2cc/moodle2converter/book_converter.rb +1 -0
  27. data/lib/moodle2cc/moodle2converter/converter_helper.rb +7 -1
  28. data/lib/moodle2cc/moodle2converter/feedback_converter.rb +70 -0
  29. data/lib/moodle2cc/moodle2converter/folder_converter.rb +2 -1
  30. data/lib/moodle2cc/moodle2converter/glossary_converter.rb +3 -3
  31. data/lib/moodle2cc/moodle2converter/label_converter.rb +39 -0
  32. data/lib/moodle2cc/moodle2converter/migrator.rb +17 -3
  33. data/lib/moodle2cc/moodle2converter/question_converters/question_converter.rb +4 -1
  34. data/lib/moodle2cc/moodle2converter/questionnaire_converter.rb +58 -0
  35. data/lib/moodle2cc/moodle2converter/section_converter.rb +4 -3
  36. data/lib/moodle2cc/version.rb +1 -1
  37. data/spec/moodle2cc/canvas_cc/assignment_writer_spec.rb +2 -0
  38. data/spec/moodle2cc/canvas_cc/models/assessment_spec.rb +25 -18
  39. data/spec/moodle2cc/canvas_cc/multiple_answers_question_writer_spec.rb +47 -0
  40. data/spec/moodle2cc/moodle2/extractor_spec.rb +24 -0
  41. data/spec/moodle2cc/moodle2/models/label_spec.rb +71 -0
  42. data/spec/moodle2cc/moodle2/parsers/choice_parser_spec.rb +32 -0
  43. data/spec/moodle2cc/moodle2/parsers/course_parser_spec.rb +1 -0
  44. data/spec/moodle2cc/moodle2/parsers/feedback_parser_spec.rb +31 -0
  45. data/spec/moodle2cc/moodle2/parsers/questionnaire_parser_spec.rb +32 -0
  46. data/spec/moodle2cc/moodle2converter/assessment_converter_spec.rb +158 -3
  47. data/spec/moodle2cc/moodle2converter/converter_helper_spec.rb +24 -0
  48. data/spec/moodle2cc/moodle2converter/folder_converter_spec.rb +2 -0
  49. data/spec/moodle2cc/moodle2converter/glossary_converter_spec.rb +2 -3
  50. data/spec/moodle2cc/moodle2converter/label_converter_spec.rb +86 -0
  51. data/spec/moodle2cc/moodle2converter/migrator_spec.rb +2 -0
  52. data/spec/moodle2cc/moodle2converter/question_bank_converter_spec.rb +2 -2
  53. data/spec/moodle2cc/moodle2converter/question_converters/calculated_converter_spec.rb +1 -1
  54. data/spec/moodle2cc/moodle2converter/question_converters/matching_converter_spec.rb +1 -1
  55. data/spec/moodle2cc/moodle2converter/question_converters/multiple_blanks_converter_spec.rb +1 -1
  56. data/spec/moodle2cc/moodle2converter/question_converters/numerical_converter_spec.rb +1 -1
  57. data/spec/moodle2cc/moodle2converter/question_converters/question_converter_spec.rb +1 -1
  58. data/spec/moodle2cc/moodle2converter/question_converters/true_false_converter_spec.rb +1 -1
  59. data/spec/moodle2cc/moodle2converter/section_converter_spec.rb +7 -22
  60. data/test/fixtures/moodle2/backup/activities/choice_56547/calendar.xml +3 -0
  61. data/test/fixtures/moodle2/backup/activities/choice_56547/choice.xml +32 -0
  62. data/test/fixtures/moodle2/backup/activities/choice_56547/comments.xml +3 -0
  63. data/test/fixtures/moodle2/backup/activities/choice_56547/completion.xml +3 -0
  64. data/test/fixtures/moodle2/backup/activities/choice_56547/filters.xml +7 -0
  65. data/test/fixtures/moodle2/backup/activities/choice_56547/grades.xml +7 -0
  66. data/test/fixtures/moodle2/backup/activities/choice_56547/inforef.xml +3 -0
  67. data/test/fixtures/moodle2/backup/activities/choice_56547/module.xml +28 -0
  68. data/test/fixtures/moodle2/backup/activities/choice_56547/roles.xml +7 -0
  69. data/test/fixtures/moodle2/backup/activities/feedback_58588/feedback.xml +147 -0
  70. data/test/fixtures/moodle2/backup/activities/feedback_58588/filters.xml +7 -0
  71. data/test/fixtures/moodle2/backup/activities/feedback_58588/grades.xml +7 -0
  72. data/test/fixtures/moodle2/backup/activities/feedback_58588/inforef.xml +3 -0
  73. data/test/fixtures/moodle2/backup/activities/feedback_58588/module.xml +28 -0
  74. data/test/fixtures/moodle2/backup/activities/feedback_58588/roles.xml +7 -0
  75. data/test/fixtures/moodle2/backup/moodle_backup.xml +14 -0
  76. metadata +52 -2
@@ -14,13 +14,17 @@ module Moodle2CC::Moodle2Converter
14
14
  cc_course.discussions += convert_discussions(moodle_course.forums)
15
15
  cc_course.assignments += convert_assignments(moodle_course.assignments)
16
16
 
17
- cc_course.assessments += convert_assessments(moodle_course.quizzes)
17
+ cc_course.mute_assignments! unless moodle_course.show_grades
18
+
19
+ cc_course.assessments += convert_assessments(moodle_course.quizzes, moodle_course.choices,
20
+ moodle_course.feedbacks, moodle_course.questionnaires)
18
21
  cc_course.question_banks += convert_question_banks(moodle_course.question_categories)
19
22
  cc_course.resolve_question_references
20
23
 
21
24
  cc_course.pages += convert_sections_to_pages(moodle_course.sections)
22
25
  cc_course.pages += convert_folders(moodle_course)
23
26
  cc_course.pages += convert_books(moodle_course.books)
27
+ cc_course.pages += convert_labels(moodle_course.labels)
24
28
  cc_course.pages += convert_glossaries(moodle_course)
25
29
 
26
30
  cc_course.canvas_modules += convert_sections(moodle_course.sections)
@@ -82,15 +86,25 @@ module Moodle2CC::Moodle2Converter
82
86
  books.map { |book| book_converter.convert_to_pages(book) }.flatten
83
87
  end
84
88
 
89
+ def convert_labels(labels)
90
+ label_converter = Moodle2CC::Moodle2Converter::LabelConverter.new
91
+ labels.map { |label| label_converter.convert_to_pages(label) }.flatten
92
+ end
93
+
85
94
  def convert_glossaries(moodle_course)
86
95
  glossary_converter = Moodle2CC::Moodle2Converter::GlossaryConverter.new(moodle_course)
87
96
  moodle_course.glossaries.map { |glossary| glossary_converter.convert(glossary) }
88
97
  end
89
98
 
90
99
  # convert quizzes to assessments
91
- def convert_assessments(quizzes)
100
+ def convert_assessments(quizzes, choices, feedbacks, questionnaires)
92
101
  assessment_converter = Moodle2CC::Moodle2Converter::AssessmentConverter.new
93
- quizzes.map { |quiz| assessment_converter.convert(quiz) }
102
+ assessments = []
103
+ assessments += quizzes.map { |quiz| assessment_converter.convert_quiz(quiz) }
104
+ assessments += choices.map { |choice| assessment_converter.convert_choice(choice) }
105
+ assessments += feedbacks.map { |feedback| assessment_converter.convert_feedback(feedback) }
106
+ assessments += questionnaires.map { |questionnaire| assessment_converter.convert_questionnaire(questionnaire) }
107
+ assessments
94
108
  end
95
109
 
96
110
  # convert question categories to question banks
@@ -1,6 +1,8 @@
1
1
  module Moodle2CC::Moodle2Converter
2
2
  module QuestionConverters
3
3
  class QuestionConverter
4
+ include ConverterHelper
5
+
4
6
  class << self
5
7
  attr_accessor :canvas_question_type
6
8
  end
@@ -30,7 +32,8 @@ module Moodle2CC::Moodle2Converter
30
32
 
31
33
  def convert_question(moodle_question, question_type = nil)
32
34
  canvas_question = create_canvas_question(question_type)
33
- canvas_question.identifier = moodle_question.id
35
+ canvas_question.identifier = generate_unique_identifier_for(moodle_question.id, '_quiz_question')
36
+ canvas_question.original_identifier = moodle_question.id
34
37
  canvas_question.title = moodle_question.name
35
38
  canvas_question.general_feedback = moodle_question.general_feedback
36
39
  canvas_question.answers = moodle_question.answers.map do |moodle_answer|
@@ -0,0 +1,58 @@
1
+ module Moodle2CC::Moodle2Converter
2
+ module QuestionnaireConverter
3
+ include ConverterHelper
4
+
5
+ def convert_questionnaire(moodle_questionnaire)
6
+ canvas_assessment = Moodle2CC::CanvasCC::Models::Assessment.new
7
+ canvas_assessment.identifier = generate_unique_identifier_for(moodle_questionnaire.id, QUESTIONNAIRE_ASSESSMENT_SUFFIX)
8
+ canvas_assessment.title = moodle_questionnaire.name
9
+ canvas_assessment.description = moodle_questionnaire.intro
10
+ canvas_assessment.workflow_state = workflow_state(moodle_questionnaire.visible)
11
+
12
+ canvas_assessment.lock_at = Time.at(Integer(moodle_questionnaire.close_date)) if moodle_questionnaire.close_date
13
+ canvas_assessment.unlock_at = Time.at(Integer(moodle_questionnaire.open_date)) if moodle_questionnaire.open_date
14
+
15
+ canvas_assessment.scoring_policy = 'keep_latest'
16
+ canvas_assessment.quiz_type = 'survey'
17
+
18
+ canvas_assessment.items = []
19
+ moodle_questionnaire.questions.each do |question|
20
+ if canvas_question = convert_questionnaire_question(question)
21
+ canvas_assessment.items << canvas_question
22
+ end
23
+ end
24
+
25
+ canvas_assessment
26
+ end
27
+
28
+ QUESTION_TYPE_ID_MAP = {
29
+ 1 => 'true_false_question', # yes/no question
30
+ 2 => 'essay_question', # text box question
31
+ 3 => 'essay_question', # essay box question
32
+ 4 => 'multiple_choice_question', # radio buttons question
33
+ 5 => 'multiple_answers_question', # check boxes question
34
+ 6 => 'multiple_choice_question', # dropdown box question
35
+ 8 => 'multiple_choice_question', # rate 1..5 question
36
+ 9 => 'essay_question', # date question
37
+ 10 => 'numerical_question', # numeric question
38
+ 100 => 'text_only_question', # label question
39
+ }
40
+
41
+ def convert_questionnaire_question(moodle_question)
42
+ return unless canvas_type = QUESTION_TYPE_ID_MAP[moodle_question.type_id.to_i]
43
+
44
+ canvas_question = Moodle2CC::CanvasCC::Models::Question.create(canvas_type)
45
+ canvas_question.identifier = generate_unique_identifier_for(moodle_question.id, "_questionnaire_question")
46
+ canvas_question.title = moodle_question.name
47
+ canvas_question.material = moodle_question.content
48
+ canvas_question.answers = []
49
+ moodle_question.choices.each do |choice|
50
+ answer = Moodle2CC::CanvasCC::Models::Answer.new
51
+ answer.id = choice[:id]
52
+ answer.answer_text = choice[:content]
53
+ canvas_question.answers << answer
54
+ end
55
+ canvas_question
56
+ end
57
+ end
58
+ end
@@ -3,7 +3,8 @@ module Moodle2CC
3
3
  include Moodle2Converter::ConverterHelper
4
4
 
5
5
  ACTIVITY_CONVERTERS = {
6
- Moodle2::Models::Book => Moodle2Converter::BookConverter
6
+ Moodle2::Models::Book => Moodle2Converter::BookConverter,
7
+ Moodle2::Models::Label => Moodle2Converter::LabelConverter,
7
8
  }
8
9
 
9
10
  def initialize
@@ -30,7 +31,7 @@ module Moodle2CC
30
31
  canvas_page.workflow_state = workflow_state(moodle_section.visible)
31
32
  canvas_page.editing_roles = CanvasCC::Models::Page::EDITING_ROLE_TEACHER
32
33
  canvas_page.body = moodle_section.summary
33
- canvas_page.href = generate_unique_resource_path(CanvasCC::Models::Page::WIKI_CONTENT, CGI::escape("#{moodle_section.name}-summary"))
34
+ canvas_page.href = generate_unique_resource_path(CanvasCC::Models::Page::WIKI_CONTENT, Moodle2CC::CanvasCC::Models::Page.convert_name_to_url("#{moodle_section.name}-summary"))
34
35
 
35
36
  canvas_page
36
37
  end
@@ -49,7 +50,7 @@ module Moodle2CC
49
50
  module_item.workflow_state = workflow_state(moodle_activity.visible)
50
51
  module_item.title = moodle_activity.name
51
52
  unless moodle_activity.is_a? Moodle2::Models::Label
52
- if moodle_activity.is_a? Moodle2::Models::ExternalUrl
53
+ if moodle_activity.is_a? Moodle2::Models::ExternalUrl
53
54
  module_item.identifierref = module_item.identifier
54
55
  module_item.url = moodle_activity.external_url.gsub(/\s/, '%20')
55
56
  elsif moodle_activity.is_a? Moodle2::Models::Resource
@@ -1,3 +1,3 @@
1
1
  module Moodle2CC
2
- VERSION = "0.2.4"
2
+ VERSION = "0.2.5"
3
3
  end
@@ -29,6 +29,7 @@ describe Moodle2CC::CanvasCC::AssignmentWriter do
29
29
  assignment.peer_reviews = 'false'
30
30
  assignment.automatic_peer_reviews = 'true'
31
31
  assignment.grade_group_students_individually = 'false'
32
+ assignment.muted = true
32
33
 
33
34
  subject.write
34
35
  xml = Nokogiri::XML(File.read(File.join(work_dir, assignment.assignment_resource.files.select{ |f| f.split(//).last(4).join("").to_s == '.xml'}.first)))
@@ -51,6 +52,7 @@ describe Moodle2CC::CanvasCC::AssignmentWriter do
51
52
  expect(xml.%('assignment/peer_reviews').text).to eq 'false'
52
53
  expect(xml.%('assignment/automatic_peer_reviews').text).to eq 'true'
53
54
  expect(xml.%('assignment/grade_group_students_individually').text).to eq 'false'
55
+ expect(xml.%('assignment/muted').text).to eq 'true'
54
56
 
55
57
  end
56
58
 
@@ -19,23 +19,30 @@ describe Moodle2CC::CanvasCC::Models::Assessment do
19
19
  it_behaves_like 'it has an attribute for', :question_references, []
20
20
  it_behaves_like 'it has an attribute for', :items
21
21
 
22
- it 'creates a resource' do
23
- subject.stub(:assessment_resource) {:assessment_resource}
24
- expect(subject.resources).to eq [:assessment_resource]
22
+ it 'returns both resources' do
23
+ subject.stub(:cc_assessment_resource) {:cc_resource}
24
+ subject.stub(:canvas_assessment_resource) {:canvas_resource}
25
+ expect(subject.resources).to eq [:cc_resource, :canvas_resource]
25
26
  end
26
27
 
27
- it 'generates an assessment resource' do
28
+ it 'creates resources' do
28
29
  subject.identifier = 'assessment_id'
29
30
  subject.title = 'My Assessment'
30
31
 
31
- resource = subject.assessment_resource
32
- expect(resource).to be_a_kind_of Moodle2CC::CanvasCC::Models::Resource
33
- expect(resource.files.count).to eq 2
34
- expect(resource.identifier).to eq 'assessment_id'
35
- expect(resource.type).to eq 'associatedcontent/imscc_xmlv1p1/learning-application-resource'
36
- expect(resource.href).to eq 'assessment_id/assessment_meta.xml'
37
- expect(resource.files).to include 'assessment_id/assessment_meta.xml'
38
- expect(resource.files).to include 'non_cc_assessments/assessment_id.xml.qti'
32
+ cc_resource = subject.cc_assessment_resource
33
+ expect(cc_resource).to be_a_kind_of Moodle2CC::CanvasCC::Models::Resource
34
+ expect(cc_resource.type).to eq 'imsqti_xmlv1p2/imscc_xmlv1p1/assessment'
35
+ expect(cc_resource.identifier).to eq 'assessment_id'
36
+ expect(cc_resource.dependencies).to include 'assessment_id_meta'
37
+
38
+ canvas_resource = subject.canvas_assessment_resource
39
+ expect(canvas_resource).to be_a_kind_of Moodle2CC::CanvasCC::Models::Resource
40
+ expect(canvas_resource.files.count).to eq 2
41
+ expect(canvas_resource.identifier).to eq 'assessment_id_meta'
42
+ expect(canvas_resource.type).to eq 'associatedcontent/imscc_xmlv1p1/learning-application-resource'
43
+ expect(canvas_resource.href).to eq 'assessment_id/assessment_meta.xml'
44
+ expect(canvas_resource.files).to include 'assessment_id/assessment_meta.xml'
45
+ expect(canvas_resource.files).to include 'non_cc_assessments/assessment_id.xml.qti'
39
46
  end
40
47
 
41
48
  it 'resolves assessment questions' do
@@ -49,14 +56,14 @@ describe Moodle2CC::CanvasCC::Models::Assessment do
49
56
 
50
57
  qb1 = Moodle2CC::CanvasCC::Models::QuestionBank.new
51
58
  q1 = Moodle2CC::CanvasCC::Models::Question.new
52
- q1.identifier = '1'
59
+ q1.original_identifier = '1'
53
60
  q2 = Moodle2CC::CanvasCC::Models::Question.new
54
- q2.identifier = '3'
61
+ q2.original_identifier = '3'
55
62
  qb1.questions = [q1, q2]
56
63
 
57
64
  qb2 = Moodle2CC::CanvasCC::Models::QuestionBank.new
58
65
  q3 = Moodle2CC::CanvasCC::Models::Question.new
59
- q3.identifier = '2'
66
+ q3.original_identifier = '2'
60
67
  qb2.questions = [q3]
61
68
 
62
69
  group = Moodle2CC::CanvasCC::Models::QuestionGroup.new
@@ -68,10 +75,10 @@ describe Moodle2CC::CanvasCC::Models::Assessment do
68
75
  subject.resolve_question_references([qb1, qb2])
69
76
 
70
77
  expect(subject.items.count).to eq 3
71
- expect(subject.items.detect{|q| q.identifier == '1'}.points_possible).to eq '2'
72
- expect(subject.items.detect{|q| q.identifier == '2'}.points_possible).to eq '3'
78
+ expect(subject.items[0].points_possible).to eq '2'
79
+ expect(subject.items[1].points_possible).to eq '3'
73
80
  # should not include q2 because it's already part of the group
74
- expect(subject.items.detect{|q| q.identifier == group.identifier}.points_per_item).to eq 2
81
+ expect(subject.items[2].points_per_item).to eq 2
75
82
  end
76
83
 
77
84
 
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ module Moodle2CC::CanvasCC
4
+ describe MultipleAnswersQuestionWriter do
5
+
6
+ let(:question) { Moodle2CC::CanvasCC::Models::Question.create('multiple_answers_question')}
7
+
8
+ it 'creates the question item xml for a multiple_choice_question' do
9
+ question.identifier = 420
10
+ question.title = 'hello'
11
+ question.general_feedback = 'feedbacks'
12
+ question.material = 'materiaru'
13
+
14
+ answer1 = Moodle2CC::CanvasCC::Models::Answer.new
15
+ answer1.id = '1'
16
+ answer1.answer_text = 'something'
17
+ answer2 = Moodle2CC::CanvasCC::Models::Answer.new
18
+ answer2.id = '2'
19
+ answer2.answer_text = 'something else'
20
+ answer3 = Moodle2CC::CanvasCC::Models::Answer.new
21
+ answer3.id = '3'
22
+ answer3.answer_text = 'something something else'
23
+ question.answers = [answer1, answer2, answer3]
24
+
25
+ xml = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |node|
26
+ QuestionWriter.write_question(node, question)
27
+ end.doc
28
+
29
+ expect(xml.at_xpath('item/@ident').value).to eq question.identifier.to_s
30
+ expect(xml.at_xpath('item/@title').value).to eq question.title
31
+ expect(xml.at_xpath("item/itemmetadata/qtimetadata/qtimetadatafield[fieldlabel=\"question_type\" and fieldentry=\"#{question.question_type}\"]")).to_not be_nil
32
+
33
+ response = xml.at_xpath('item/presentation/response_lid')
34
+ expect(response.attributes['rcardinality'].value).to eq 'Multiple'
35
+ expect(response.attributes['ident'].value).to eq 'response1'
36
+
37
+ expect(response.at_xpath("render_choice/response_label[@ident=\"#{answer1.id}\"]/material/mattext[@texttype=\"text/html\" and text()=\"#{answer1.answer_text}\"]")).not_to be_nil
38
+ expect(response.at_xpath("render_choice/response_label[@ident=\"#{answer2.id}\"]/material/mattext[@texttype=\"text/html\" and text()=\"#{answer2.answer_text}\"]")).not_to be_nil
39
+ expect(response.at_xpath("render_choice/response_label[@ident=\"#{answer3.id}\"]/material/mattext[@texttype=\"text/html\" and text()=\"#{answer3.answer_text}\"]")).not_to be_nil
40
+
41
+ condition = xml.at_xpath("item/resprocessing/respcondition[@continue=\"No\"]")
42
+ expect(condition.at_xpath("conditionvar/and/varequal[@respident=\"response1\" and text()=\"#{answer1.id}\"]")).not_to be_nil
43
+ expect(condition.at_xpath("conditionvar/and/not/varequal[@respident=\"response1\" and text()=\"#{answer2.id}\"]")).not_to be_nil
44
+ expect(condition.at_xpath("conditionvar/and/not/varequal[@respident=\"response1\" and text()=\"#{answer3.id}\"]")).not_to be_nil
45
+ end
46
+ end
47
+ end
@@ -17,6 +17,9 @@ module Moodle2CC::Moodle2
17
17
  Parsers::FolderParser.any_instance.stub(:parse)
18
18
  Parsers::QuestionCategoryParser.any_instance.stub(:parse)
19
19
  Parsers::QuizParser.any_instance.stub(:parse)
20
+ Parsers::ChoiceParser.any_instance.stub(:parse)
21
+ Parsers::FeedbackParser.any_instance.stub(:parse)
22
+ Parsers::QuestionnaireParser.any_instance.stub(:parse)
20
23
  Parsers::GlossaryParser.any_instance.stub(:parse)
21
24
  Parsers::LabelParser.any_instance.stub(:parse)
22
25
  Parsers::ExternalUrlParser.any_instance.stub(:parse)
@@ -144,6 +147,27 @@ module Moodle2CC::Moodle2
144
147
  expect(course.quizzes).to eq [quiz]
145
148
  end
146
149
 
150
+ it 'parses choices' do
151
+ choice = Models::Choice.new
152
+ Parsers::ChoiceParser.any_instance.stub(:parse).and_return([choice])
153
+ extractor.extract {}
154
+ expect(course.choices).to eq [choice]
155
+ end
156
+
157
+ it 'parses feedbacks' do
158
+ feedback = Models::Feedback.new
159
+ Parsers::FeedbackParser.any_instance.stub(:parse).and_return([feedback])
160
+ extractor.extract {}
161
+ expect(course.feedbacks).to eq [feedback]
162
+ end
163
+
164
+ it 'parses questionnaires' do
165
+ questionnaire = Models::Questionnaire.new
166
+ Parsers::QuestionnaireParser.any_instance.stub(:parse).and_return([questionnaire])
167
+ extractor.extract {}
168
+ expect(course.questionnaires).to eq [questionnaire]
169
+ end
170
+
147
171
  it 'parses glossaries' do
148
172
  glossary = Models::Glossary.new
149
173
  Parsers::GlossaryParser.any_instance.stub(:parse).and_return([glossary])
@@ -9,5 +9,76 @@ module Moodle2CC::Moodle2::Models
9
9
  it_behaves_like 'it has an attribute for', :intro_format
10
10
  it_behaves_like 'it has an attribute for', :visible
11
11
 
12
+
13
+ describe '#process_for_conversion!' do
14
+ it 'should use the intro text if the name has no text' do
15
+ subject.name = '<hr>'
16
+ subject.intro = 'use me'
17
+
18
+ expect(subject.converted_title).to eq 'use me'
19
+ expect(subject.convert_to_page?).to eq false
20
+ expect(subject.convert_to_header?).to eq true
21
+ end
22
+
23
+ it 'should use the intro text if the name is just "Label"' do
24
+ subject.name = 'Label'
25
+ subject.intro = 'use me'
26
+
27
+ expect(subject.converted_title).to eq 'use me'
28
+ expect(subject.convert_to_page?).to eq false
29
+ expect(subject.convert_to_header?).to eq true
30
+ end
31
+
32
+ it 'should use the intro text if the name was truncated' do
33
+ subject.name = ("a" * 50) + "..."
34
+ subject.intro = ("a" * 70)
35
+
36
+ expect(subject.converted_title).to eq ("a" * 70)
37
+ expect(subject.convert_to_page?).to eq false
38
+ expect(subject.convert_to_header?).to eq true
39
+ end
40
+
41
+ it 'should truncate the intro text if it is too long' do
42
+ subject.name = '<hr>'
43
+ subject.intro = ("a" * 90)
44
+
45
+ expect(subject.converted_title).to eq (("a" * 80) + '...')
46
+ expect(subject.convert_to_page?).to eq true
47
+ expect(subject.convert_to_header?).to eq false
48
+ end
49
+
50
+ it 'should come up with a label if there is nothing else' do
51
+ subject.name = '<hr>'
52
+ subject.intro = '<img src="somelinky">'
53
+
54
+ expect(subject.converted_title).to eq Moodle2CC::Moodle2::Models::Label::DEFAULT_PAGE_TITLE
55
+ expect(subject.convert_to_page?).to eq true
56
+ expect(subject.convert_to_header?).to eq false
57
+ end
58
+
59
+ it 'should not convert to anything if there is no content' do
60
+ subject.name = '<hr>'
61
+ subject.intro = '<br>'
62
+
63
+ expect(subject.convert_to_page?).to eq false
64
+ expect(subject.convert_to_header?).to eq false
65
+ end
66
+
67
+ it 'should not convert to page if the name and intro have the same text' do
68
+ subject.name = 'blah'
69
+ subject.intro = '<p>blah</p>'
70
+
71
+ expect(subject.convert_to_page?).to eq false
72
+ expect(subject.convert_to_header?).to eq true
73
+ end
74
+
75
+ it 'should convert to page if the intro has different text' do
76
+ subject.name = 'blah'
77
+ subject.intro = '<p>blah blah</p>'
78
+
79
+ expect(subject.convert_to_page?).to eq true
80
+ expect(subject.convert_to_header?).to eq false
81
+ end
82
+ end
12
83
  end
13
84
  end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Moodle2CC::Moodle2::Parsers::ChoiceParser do
4
+ subject { Moodle2CC::Moodle2::Parsers::ChoiceParser.new(fixture_path(File.join('moodle2', 'backup'))) }
5
+
6
+ it 'should parse a choice activity' do
7
+ choices = subject.parse
8
+ expect(choices.count).to eq 1
9
+ choice = choices.first
10
+
11
+ expect(choice.id).to eq '1'
12
+
13
+ expect(choice.module_id).to eq '56547'
14
+ expect(choice.name).to eq 'Example Choice Activity'
15
+ expect(choice.intro).to eq 'Choice activity description'
16
+ expect(choice.intro_format).to eq '1'
17
+ expect(choice.time_open).to eq '0'
18
+ expect(choice.time_close).to eq '0'
19
+ expect(choice.time_modified).to eq '1376437841'
20
+
21
+ expect(choice.publish).to eq '0'
22
+ expect(choice.show_results).to eq '0'
23
+ expect(choice.display).to eq '1'
24
+ expect(choice.allow_update).to eq '1'
25
+ expect(choice.show_unanswered).to eq '1'
26
+ expect(choice.limit_answers).to eq '1'
27
+ expect(choice.completion_submit).to eq '0'
28
+
29
+ expect(choice.options).to eq ['Option 1', 'Option 2']
30
+ end
31
+
32
+ end