qti 0.6.0 → 0.6.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 57886adfeb2b4f8b5361015d6e65d8e3adce4c8b
4
- data.tar.gz: c73d02a2133c28e31340396546c2ce9edf354334
3
+ metadata.gz: 32735598f7ec291fe14aab5a31757d952a17e8e2
4
+ data.tar.gz: 223ef180406750c5a26e730c90b36c0bfe9dce2f
5
5
  SHA512:
6
- metadata.gz: afc5d77b25daab496548ee48b0d2c01af504ec302e8f59ef39e7c2707d7951ee0053419b85768ac06796fee22b542f61263b2d5e88f5777f97929c91346ddc6c
7
- data.tar.gz: a34886dc856508a89116533ebd4a2552049f0d3175dcbf4ec18d02911949935654bf26d4c3ebb66738defd4a833ff8651e3bdae470fab078a05c7ec707689fb8
6
+ metadata.gz: a227d279db27d0096cb49bd4d9e714e100bbadedc9727b5def87a9a4f270aa4787e2f1c9313a61a0e39f7cbf6669467b8ad08a9a7b262f2433b130e2e836d11d
7
+ data.tar.gz: 7dd75b19053e9e751ec21c81560d3a371ba98b9f856c7821b50a985169a3eb6e30b32c409998906587cc9e0b9b32b565faf4a6f6e7f21f28426ec5fed077e6b2
@@ -121,6 +121,9 @@ module Qti
121
121
  xml.resources do
122
122
  xml.resource('href' => 'assessment.xml', 'type' => 'imsqti_test_xmlv2p2', 'identifier' => 'TEST') do
123
123
  xml.file('href' => 'assessment.xml')
124
+ assessment_test.items.each do |item|
125
+ xml.file('href' => "#{item.identifier}.xml")
126
+ end
124
127
  end
125
128
  end
126
129
  end
@@ -9,12 +9,13 @@ module Qti
9
9
  end
10
10
 
11
11
  def qti_1_href
12
- xpath_with_single_check("//xmlns:resources/xmlns:resource[@type='imsqti_xmlv1p2']/@href")&.content
12
+ xpath_with_single_check("//xmlns:resources/xmlns:resource[@type='imsqti_xmlv1p2']/@href")&.content ||
13
+ xpath_with_single_check("//xmlns:resources/xmlns:resource[@type='imsqti_xmlv1p2']/xmlns:file/@href")&.content
13
14
  end
14
15
 
15
16
  def qti_2_x_href
16
17
  xpath_with_single_check("//xmlns:resources/xmlns:resource[@type='imsqti_test_xmlv2p1']/@href")&.content ||
17
- xpath_with_single_check("//xmlns:resources/xmlns:resource[@type='imsqti_test_xmlv2p2']/@href")&.content
18
+ xpath_with_single_check("//xmlns:resources/xmlns:resource[@type='imsqti_test_xmlv2p2']/@href")&.content
18
19
  end
19
20
  end
20
21
  end
@@ -30,12 +30,6 @@ module Qti
30
30
  raise Qti::ParseError, 'Too many matches' if node_list.count > 1
31
31
  node_list.first
32
32
  end
33
-
34
- private
35
-
36
- def rcardinality
37
- @rcardinality ||= @node.at_xpath('.//response_lid/@rcardinality').value
38
- end
39
33
  end
40
34
  end
41
35
  end
@@ -0,0 +1,57 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <quiz xmlns="http://canvas.instructure.com/xsd/cccv1p0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" identifier="i00f37ac2af026e5a607e4a5d9a70b1d5" xsi:schemaLocation="http://canvas.instructure.com/xsd/cccv1p0 http://canvas.instructure.com/xsd/cccv1p0.xsd">
3
+ <title>WIJsfijdi</title>
4
+ <description>&lt;p&gt;sdvsv&lt;/p&gt;</description>
5
+ <shuffle_answers>false</shuffle_answers>
6
+ <scoring_policy>keep_highest</scoring_policy>
7
+ <quiz_type>assignment</quiz_type>
8
+ <points_possible>4.0</points_possible>
9
+ <require_lockdown_browser>false</require_lockdown_browser>
10
+ <require_lockdown_browser_for_results>false</require_lockdown_browser_for_results>
11
+ <require_lockdown_browser_monitor>false</require_lockdown_browser_monitor>
12
+ <lockdown_browser_monitor_data/>
13
+ <show_correct_answers>true</show_correct_answers>
14
+ <anonymous_submissions>false</anonymous_submissions>
15
+ <could_be_locked>false</could_be_locked>
16
+ <allowed_attempts>1</allowed_attempts>
17
+ <one_question_at_a_time>false</one_question_at_a_time>
18
+ <cant_go_back>false</cant_go_back>
19
+ <available>true</available>
20
+ <one_time_results>false</one_time_results>
21
+ <show_correct_answers_last_attempt>false</show_correct_answers_last_attempt>
22
+ <only_visible_to_overrides>false</only_visible_to_overrides>
23
+ <module_locked>false</module_locked>
24
+ <assignment identifier="if391c6d69f65c14c668b771864713cfe">
25
+ <title>WIJsfijdi</title>
26
+ <due_at/>
27
+ <lock_at/>
28
+ <unlock_at/>
29
+ <module_locked>false</module_locked>
30
+ <workflow_state>published</workflow_state>
31
+ <assignment_overrides>
32
+ </assignment_overrides>
33
+ <quiz_identifierref>i00f37ac2af026e5a607e4a5d9a70b1d5</quiz_identifierref>
34
+ <has_group_category>false</has_group_category>
35
+ <points_possible>4.0</points_possible>
36
+ <grading_type>points</grading_type>
37
+ <all_day>false</all_day>
38
+ <submission_types>online_quiz</submission_types>
39
+ <position>6</position>
40
+ <turnitin_enabled>false</turnitin_enabled>
41
+ <vericite_enabled>false</vericite_enabled>
42
+ <peer_review_count>0</peer_review_count>
43
+ <peer_reviews>false</peer_reviews>
44
+ <automatic_peer_reviews>false</automatic_peer_reviews>
45
+ <moderated_grading>false</moderated_grading>
46
+ <anonymous_peer_reviews>false</anonymous_peer_reviews>
47
+ <grade_group_students_individually>false</grade_group_students_individually>
48
+ <freeze_on_copy>false</freeze_on_copy>
49
+ <muted>false</muted>
50
+ <omit_from_final_grade>false</omit_from_final_grade>
51
+ <intra_group_peer_reviews>false</intra_group_peer_reviews>
52
+ <only_visible_to_overrides>false</only_visible_to_overrides>
53
+ </assignment>
54
+ <assignment_group_identifierref>i2fba2c8de8c85704fba9b320f17dd84f</assignment_group_identifierref>
55
+ <assignment_overrides>
56
+ </assignment_overrides>
57
+ </quiz>
@@ -0,0 +1,211 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <questestinterop xmlns="http://www.imsglobal.org/xsd/ims_qtiasiv1p2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/ims_qtiasiv1p2 http://www.imsglobal.org/xsd/ims_qtiasiv1p2p1.xsd">
3
+ <assessment ident="i00f37ac2af026e5a607e4a5d9a70b1d5" title="WIJsfijdi">
4
+ <qtimetadata>
5
+ <qtimetadatafield>
6
+ <fieldlabel>cc_maxattempts</fieldlabel>
7
+ <fieldentry>1</fieldentry>
8
+ </qtimetadatafield>
9
+ </qtimetadata>
10
+ <section ident="root_section">
11
+ <item ident="i684d5931341c096d99a050f07a8d2b15" title="Question 1">
12
+ <itemmetadata>
13
+ <qtimetadata>
14
+ <qtimetadatafield>
15
+ <fieldlabel>question_type</fieldlabel>
16
+ <fieldentry>true_false_question</fieldentry>
17
+ </qtimetadatafield>
18
+ <qtimetadatafield>
19
+ <fieldlabel>points_possible</fieldlabel>
20
+ <fieldentry>1.0</fieldentry>
21
+ </qtimetadatafield>
22
+ <qtimetadatafield>
23
+ <fieldlabel>assessment_question_identifierref</fieldlabel>
24
+ <fieldentry>i0408152cfe87bafd6293d61a2c6bbb59</fieldentry>
25
+ </qtimetadatafield>
26
+ </qtimetadata>
27
+ </itemmetadata>
28
+ <presentation>
29
+ <material>
30
+ <mattext texttype="text/html">&lt;div&gt;&lt;p&gt;afsdf&lt;/p&gt;&lt;/div&gt;</mattext>
31
+ </material>
32
+ <response_lid ident="response1" rcardinality="Single">
33
+ <render_choice>
34
+ <response_label ident="6467">
35
+ <material>
36
+ <mattext texttype="text/plain">True</mattext>
37
+ </material>
38
+ </response_label>
39
+ <response_label ident="4608">
40
+ <material>
41
+ <mattext texttype="text/plain">False</mattext>
42
+ </material>
43
+ </response_label>
44
+ </render_choice>
45
+ </response_lid>
46
+ </presentation>
47
+ <resprocessing>
48
+ <outcomes>
49
+ <decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
50
+ </outcomes>
51
+ <respcondition continue="No">
52
+ <conditionvar>
53
+ <varequal respident="response1">6467</varequal>
54
+ </conditionvar>
55
+ <setvar action="Set" varname="SCORE">100</setvar>
56
+ </respcondition>
57
+ </resprocessing>
58
+ </item>
59
+ <item ident="i3a908ae57f0e84620c9c98a7ccc207ba" title="Question">
60
+ <itemmetadata>
61
+ <qtimetadata>
62
+ <qtimetadatafield>
63
+ <fieldlabel>question_type</fieldlabel>
64
+ <fieldentry>multiple_choice_question</fieldentry>
65
+ </qtimetadatafield>
66
+ <qtimetadatafield>
67
+ <fieldlabel>points_possible</fieldlabel>
68
+ <fieldentry>1.0</fieldentry>
69
+ </qtimetadatafield>
70
+ <qtimetadatafield>
71
+ <fieldlabel>assessment_question_identifierref</fieldlabel>
72
+ <fieldentry>i3f7fa71f7152bb71cfc017c52a83424f</fieldentry>
73
+ </qtimetadatafield>
74
+ </qtimetadata>
75
+ </itemmetadata>
76
+ <presentation>
77
+ <material>
78
+ <mattext texttype="text/html">&lt;div&gt;&lt;p&gt;sdfsdfs&lt;/p&gt;&lt;/div&gt;</mattext>
79
+ </material>
80
+ <response_lid ident="response1" rcardinality="Single">
81
+ <render_choice>
82
+ <response_label ident="2031">
83
+ <material>
84
+ <mattext texttype="text/plain">True</mattext>
85
+ </material>
86
+ </response_label>
87
+ <response_label ident="1064">
88
+ <material>
89
+ <mattext texttype="text/plain">Sss</mattext>
90
+ </material>
91
+ </response_label>
92
+ <response_label ident="4656">
93
+ <material>
94
+ <mattext texttype="text/plain">False</mattext>
95
+ </material>
96
+ </response_label>
97
+ </render_choice>
98
+ </response_lid>
99
+ </presentation>
100
+ <resprocessing>
101
+ <outcomes>
102
+ <decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
103
+ </outcomes>
104
+ <respcondition continue="No">
105
+ <conditionvar>
106
+ <varequal respident="response1">2031</varequal>
107
+ </conditionvar>
108
+ <setvar action="Set" varname="SCORE">100</setvar>
109
+ </respcondition>
110
+ </resprocessing>
111
+ </item>
112
+ <item ident="ib9660eb1a61a14e7cba8be7060fbb869" title="Question">
113
+ <itemmetadata>
114
+ <qtimetadata>
115
+ <qtimetadatafield>
116
+ <fieldlabel>question_type</fieldlabel>
117
+ <fieldentry>multiple_answers_question</fieldentry>
118
+ </qtimetadatafield>
119
+ <qtimetadatafield>
120
+ <fieldlabel>points_possible</fieldlabel>
121
+ <fieldentry>1.0</fieldentry>
122
+ </qtimetadatafield>
123
+ <qtimetadatafield>
124
+ <fieldlabel>assessment_question_identifierref</fieldlabel>
125
+ <fieldentry>ia940853811e6fec4813688a1f9a48f3f</fieldentry>
126
+ </qtimetadatafield>
127
+ </qtimetadata>
128
+ </itemmetadata>
129
+ <presentation>
130
+ <material>
131
+ <mattext texttype="text/html">&lt;div&gt;&lt;p&gt;sdfsdfgs&lt;/p&gt;&lt;/div&gt;</mattext>
132
+ </material>
133
+ <response_lid ident="response1" rcardinality="Multiple">
134
+ <render_choice>
135
+ <response_label ident="5119">
136
+ <material>
137
+ <mattext texttype="text/plain">ssdsd</mattext>
138
+ </material>
139
+ </response_label>
140
+ <response_label ident="6216">
141
+ <material>
142
+ <mattext texttype="text/plain">asdsad</mattext>
143
+ </material>
144
+ </response_label>
145
+ <response_label ident="1766">
146
+ <material>
147
+ <mattext texttype="text/plain">ddsd</mattext>
148
+ </material>
149
+ </response_label>
150
+ </render_choice>
151
+ </response_lid>
152
+ </presentation>
153
+ <resprocessing>
154
+ <outcomes>
155
+ <decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
156
+ </outcomes>
157
+ <respcondition continue="No">
158
+ <conditionvar>
159
+ <and>
160
+ <varequal respident="response1">5119</varequal>
161
+ <varequal respident="response1">6216</varequal>
162
+ <not>
163
+ <varequal respident="response1">1766</varequal>
164
+ </not>
165
+ </and>
166
+ </conditionvar>
167
+ <setvar action="Set" varname="SCORE">100</setvar>
168
+ </respcondition>
169
+ </resprocessing>
170
+ </item>
171
+ <item ident="i713c2da8e263ef6492797b23ba8bb691" title="Question">
172
+ <itemmetadata>
173
+ <qtimetadata>
174
+ <qtimetadatafield>
175
+ <fieldlabel>question_type</fieldlabel>
176
+ <fieldentry>essay_question</fieldentry>
177
+ </qtimetadatafield>
178
+ <qtimetadatafield>
179
+ <fieldlabel>points_possible</fieldlabel>
180
+ <fieldentry>1.0</fieldentry>
181
+ </qtimetadatafield>
182
+ <qtimetadatafield>
183
+ <fieldlabel>assessment_question_identifierref</fieldlabel>
184
+ <fieldentry>i8781f75406455a8bb030dac714aae76f</fieldentry>
185
+ </qtimetadatafield>
186
+ </qtimetadata>
187
+ </itemmetadata>
188
+ <presentation>
189
+ <material>
190
+ <mattext texttype="text/html">&lt;div&gt;&lt;p&gt;dsfsdfsdf&lt;/p&gt;&lt;/div&gt;</mattext>
191
+ </material>
192
+ <response_str ident="response1" rcardinality="Single">
193
+ <render_fib>
194
+ <response_label ident="answer1" rshuffle="No"/>
195
+ </render_fib>
196
+ </response_str>
197
+ </presentation>
198
+ <resprocessing>
199
+ <outcomes>
200
+ <decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
201
+ </outcomes>
202
+ <respcondition continue="No">
203
+ <conditionvar>
204
+ <other/>
205
+ </conditionvar>
206
+ </respcondition>
207
+ </resprocessing>
208
+ </item>
209
+ </section>
210
+ </assessment>
211
+ </questestinterop>
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <manifest identifier="i56fa994ec2857901a029f2943f33a328" xmlns="http://www.imsglobal.org/xsd/imsccv1p1/imscp_v1p1" xmlns:lom="http://ltsc.ieee.org/xsd/imsccv1p1/LOM/resource" xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/imsccv1p1/imscp_v1p1 http://www.imsglobal.org/xsd/imscp_v1p1.xsd http://ltsc.ieee.org/xsd/imsccv1p1/LOM/resource http://www.imsglobal.org/profile/cc/ccv1p1/LOM/ccv1p1_lomresource_v1p0.xsd http://www.imsglobal.org/xsd/imsmd_v1p2 http://www.imsglobal.org/xsd/imsmd_v1p2p2.xsd">
3
+ <metadata>
4
+ <schema>IMS Content</schema>
5
+ <schemaversion>1.1.3</schemaversion>
6
+ <imsmd:lom>
7
+ <imsmd:general>
8
+ <imsmd:title>
9
+ <imsmd:string>QTI Quiz Export for course "6-19 course"</imsmd:string>
10
+ </imsmd:title>
11
+ </imsmd:general>
12
+ <imsmd:lifeCycle>
13
+ <imsmd:contribute>
14
+ <imsmd:date>
15
+ <imsmd:dateTime>2017-06-19</imsmd:dateTime>
16
+ </imsmd:date>
17
+ </imsmd:contribute>
18
+ </imsmd:lifeCycle>
19
+ <imsmd:rights>
20
+ <imsmd:copyrightAndOtherRestrictions>
21
+ <imsmd:value>yes</imsmd:value>
22
+ </imsmd:copyrightAndOtherRestrictions>
23
+ <imsmd:description>
24
+ <imsmd:string>Private (Copyrighted) - http://en.wikipedia.org/wiki/Copyright</imsmd:string>
25
+ </imsmd:description>
26
+ </imsmd:rights>
27
+ </imsmd:lom>
28
+ </metadata>
29
+ <organizations/>
30
+ <resources>
31
+ <resource identifier="i00f37ac2af026e5a607e4a5d9a70b1d5" type="imsqti_xmlv1p2">
32
+ <file href="i00f37ac2af026e5a607e4a5d9a70b1d5/i00f37ac2af026e5a607e4a5d9a70b1d5.xml"/>
33
+ <dependency identifierref="i469e25379db912b2fc11d031d250a5d1"/>
34
+ </resource>
35
+ <resource identifier="i469e25379db912b2fc11d031d250a5d1" type="associatedcontent/imscc_xmlv1p1/learning-application-resource" href="i00f37ac2af026e5a607e4a5d9a70b1d5/assessment_meta.xml">
36
+ <file href="i00f37ac2af026e5a607e4a5d9a70b1d5/assessment_meta.xml"/>
37
+ </resource>
38
+ </resources>
39
+ </manifest>
@@ -1,14 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Qti::Exporter do
4
- let(:empty_assessment_test) do
5
- Qti::ContentPackaging::AssessmentTest.new(
6
- title: 'Empty test',
7
- items: [],
8
- outcome_declarations: []
9
- )
10
- end
11
-
12
4
  let(:assessment_test) do
13
5
  Qti::ContentPackaging::AssessmentTest.new(
14
6
  title: 'Example test',
@@ -40,29 +32,35 @@ describe Qti::Exporter do
40
32
  end
41
33
 
42
34
  describe '#export' do
43
- it 'generates the xml for the empty assessment' do
44
- dir = Dir.mktmpdir
35
+ let(:dir) { Dir.mktmpdir }
36
+ let(:exporter) { Qti::Exporter.new(assessment_test, package_root_path: dir) }
45
37
 
46
- exporter = Qti::Exporter.new(empty_assessment_test, package_root_path: dir)
38
+ before do
47
39
  exporter.export
48
-
49
- expect(exporter.exported_file_path).to have_zip_entry('assessment.xml').with_content(
50
- <<-XML.strip_heredoc
51
- <?xml version="1.0" encoding="UTF-8"?>
52
- <assessmentTest xmlns="http://www.imsglobal.org/xsd/imsqti_v2p2" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p2 http://www.imsglobal.org/xsd/qti/qtiv2p2/imsqti_v2p2.xsd" title="Empty test">
53
- <testPart/>
54
- </assessmentTest>
55
- XML
56
- )
57
40
  end
58
41
 
59
- it 'generates the xml for an assessment with an item' do
60
- dir = Dir.mktmpdir
42
+ context 'empty assessment' do
43
+ let(:assessment_test) do
44
+ Qti::ContentPackaging::AssessmentTest.new(
45
+ title: 'Empty test',
46
+ items: [],
47
+ outcome_declarations: []
48
+ )
49
+ end
61
50
 
62
- exporter = Qti::Exporter.new(assessment_test, package_root_path: dir)
63
- exporter.export
51
+ it 'generates the xml for the empty assessment' do
52
+ expect(exporter.exported_file_path).to have_zip_entry('assessment.xml').with_content(
53
+ <<-XML.strip_heredoc
54
+ <?xml version="1.0" encoding="UTF-8"?>
55
+ <assessmentTest xmlns="http://www.imsglobal.org/xsd/imsqti_v2p2" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p2 http://www.imsglobal.org/xsd/qti/qtiv2p2/imsqti_v2p2.xsd" title="Empty test">
56
+ <testPart/>
57
+ </assessmentTest>
58
+ XML
59
+ )
60
+ end
61
+ end
64
62
 
65
- expect(exporter.exported_file_path).to contain_zip_entry('imsmanifest.xml')
63
+ it 'generates the xml for an assessment with an item' do
66
64
  expect(exporter.exported_file_path).to contain_zip_entry('0b8664be39cf69ef76402f3e41eb05.xml')
67
65
  expect(exporter.exported_file_path).to have_zip_entry('assessment.xml').with_content(
68
66
  <<-XML.strip_heredoc
@@ -87,5 +85,54 @@ describe Qti::Exporter do
87
85
  XML
88
86
  )
89
87
  end
88
+
89
+ it 'generates the xml for the manifest' do
90
+ expect(exporter.exported_file_path).to have_zip_entry('imsmanifest.xml').with_content(
91
+ <<-XML.strip_heredoc
92
+ <?xml version="1.0" encoding="UTF-8"?>
93
+ <manifest xmlns="http://www.imsglobal.org/xsd/imscp_v1p1" xmlns:imsmd="http://ltsc.ieee.org/xsd/LOM" xmlns:imsqti="http://www.imsglobal.org/xsd/imsqti_v2p2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1 http://www.imsglobal.org/xsd/qti/qtiv2p2/qtiv2p2_imscpv1p2_v1p0.xsdhttp://ltsc.ieee.org/xsd/LOM http://www.imsglobal.org/xsd/imsmd_loose_v1p3p2.xsdhttp://www.imsglobal.org/xsd/imsqti_metadata_v2p2http://www.imsglobal.org/xsd/qti/qtiv2p2/imsqti_metadata_v2p2.xsd">
94
+ <metadata>
95
+ <schema>QTIv2.2 Package</schema>
96
+ <schemaversion>1.0.0</schemaversion>
97
+ <imsmd:lom>
98
+ <general>
99
+ <identifier>
100
+ <entry>FB-02</entry>
101
+ </identifier>
102
+ <title>
103
+ <string language="en">Example test</string>
104
+ </title>
105
+ <language>en</language>
106
+ <description>
107
+ <string language="en">Instructure QTI package.Feedback XML used as an example of unprocessable entity</string>
108
+ </description>
109
+ </general>
110
+ <imsmd:keyword>
111
+ <imsmd:string language="en">feedback</imsmd:string>
112
+ </imsmd:keyword>
113
+ <imsmd:keyword>
114
+ <imsmd:string language="en">modal</imsmd:string>
115
+ </imsmd:keyword>
116
+ <imsmd:keyword>
117
+ <imsmd:string language="en">test</imsmd:string>
118
+ </imsmd:keyword>
119
+ <imsmd:keyword>
120
+ <imsmd:string language="en">inline</imsmd:string>
121
+ </imsmd:keyword>
122
+ <imsmd:keyword>
123
+ <imsmd:string language="en">block</imsmd:string>
124
+ </imsmd:keyword>
125
+ </imsmd:lom>
126
+ </metadata>
127
+ <resources>
128
+ <resource href="assessment.xml" type="imsqti_test_xmlv2p2" identifier="TEST">
129
+ <file href="assessment.xml"/>
130
+ <file href="0b8664be39cf69ef76402f3e41eb05.xml"/>
131
+ </resource>
132
+ </resources>
133
+ </manifest>
134
+ XML
135
+ )
136
+ end
90
137
  end
91
138
  end
@@ -12,7 +12,6 @@ describe Qti::Importer do
12
12
  end
13
13
 
14
14
  shared_examples_for 'unsupported QTI version' do
15
-
16
15
  it 'raises an error' do
17
16
  allow_any_instance_of(Qti::Models::Manifest).to receive(:assessment_test_href).and_return(nil)
18
17
  expect { importer.import_manifest }.to raise_error('Unsupported QTI version')
@@ -28,13 +27,22 @@ describe Qti::Importer do
28
27
 
29
28
  describe '#create_assessment_item' do
30
29
  it 'create items with correct scoring structs' do
31
- assessment = importer.test_object
32
- assessment_items = importer.assessment_item_refs.map{ |ref| importer.create_assessment_item(ref) }
30
+ importer.test_object
31
+ assessment_items = importer.assessment_item_refs.map { |ref| importer.create_assessment_item(ref) }
33
32
  expect(assessment_items.count).to eq 5
34
- answer_arity = assessment_items.map{|item| item.scoring_data_structs.count }
33
+ answer_arity = assessment_items.map { |item| item.scoring_data_structs.count }
35
34
  expect(answer_arity).to eq [1, 1, 4, 1, 1]
36
35
  end
37
36
  end
37
+
38
+ context 'canvas generated' do
39
+ let(:file_path) { File.join(fixtures_path, 'test_qti_1.2_canvas') }
40
+
41
+ it 'imports a canvas generated quiz' do
42
+ importer.test_object
43
+ expect(importer.assessment_item_refs.count).to eq 4
44
+ end
45
+ end
38
46
  end
39
47
 
40
48
  context 'QTI 2.1' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qti
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hannah Bottalla
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-06-01 00:00:00.000000000 Z
12
+ date: 2017-06-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -354,6 +354,9 @@ files:
354
354
  - spec/fixtures/test_qti_1.2/image.png
355
355
  - spec/fixtures/test_qti_1.2/imsmanifest.xml
356
356
  - spec/fixtures/test_qti_1.2/quiz.xml
357
+ - spec/fixtures/test_qti_1.2_canvas/i00f37ac2af026e5a607e4a5d9a70b1d5/assessment_meta.xml
358
+ - spec/fixtures/test_qti_1.2_canvas/i00f37ac2af026e5a607e4a5d9a70b1d5/i00f37ac2af026e5a607e4a5d9a70b1d5.xml
359
+ - spec/fixtures/test_qti_1.2_canvas/imsmanifest.xml
357
360
  - spec/fixtures/test_qti_2.1.zip
358
361
  - spec/fixtures/test_qti_2.1/Items/Item_VE_IP_01/qtiv2p1_EntryTest_VE_IP_01.xml
359
362
  - spec/fixtures/test_qti_2.1/Items/Item_VE_IP_02/apip_VE_IP_02.css
@@ -459,7 +462,6 @@ files:
459
462
  - spec/lib/qti_spec.rb
460
463
  - spec/spec_helper.rb
461
464
  - spec/support/custom_matchers.rb
462
- - spec/support/monkey_patches.rb
463
465
  homepage:
464
466
  licenses: []
465
467
  metadata: {}
@@ -479,7 +481,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
479
481
  version: '0'
480
482
  requirements: []
481
483
  rubyforge_project:
482
- rubygems_version: 2.5.1
484
+ rubygems_version: 2.6.12
483
485
  signing_key:
484
486
  specification_version: 4
485
487
  summary: QTI 1.2 and 2.1 import and export models
@@ -592,6 +594,9 @@ test_files:
592
594
  - spec/fixtures/test_qti_1.2/image.png
593
595
  - spec/fixtures/test_qti_1.2/imsmanifest.xml
594
596
  - spec/fixtures/test_qti_1.2/quiz.xml
597
+ - spec/fixtures/test_qti_1.2_canvas/i00f37ac2af026e5a607e4a5d9a70b1d5/assessment_meta.xml
598
+ - spec/fixtures/test_qti_1.2_canvas/i00f37ac2af026e5a607e4a5d9a70b1d5/i00f37ac2af026e5a607e4a5d9a70b1d5.xml
599
+ - spec/fixtures/test_qti_1.2_canvas/imsmanifest.xml
595
600
  - spec/fixtures/test_qti_2.1.zip
596
601
  - spec/fixtures/test_qti_2.1/Items/Item_VE_IP_01/qtiv2p1_EntryTest_VE_IP_01.xml
597
602
  - spec/fixtures/test_qti_2.1/Items/Item_VE_IP_02/apip_VE_IP_02.css
@@ -697,4 +702,3 @@ test_files:
697
702
  - spec/lib/qti_spec.rb
698
703
  - spec/spec_helper.rb
699
704
  - spec/support/custom_matchers.rb
700
- - spec/support/monkey_patches.rb
@@ -1,14 +0,0 @@
1
- # ObjectSpace.each_object(Class).select { |c| c.name =~ /V1.*(?<!Base)Interaction$/ }.each do |klass|
2
- # klass.class_eval do
3
- # class << self
4
- # alias_method :old_matches?, :matches?
5
- # def matches?(node)
6
- # raise ArgumentError.new("Expected Nokogiri::XML::Element and got #{node.class}") unless item_element?(node)
7
- # old_matches?(node)
8
- # end
9
- # def item_element?(node)
10
- # node.class == Nokogiri::XML::Element && node.name == 'item'
11
- # end
12
- # end
13
- # end
14
- # end