qti 2.2.0 → 2.5.1
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 +4 -4
- data/lib/qti.rb +1 -0
- data/lib/qti/models/assessment_meta.rb +16 -12
- data/lib/qti/models/resource.rb +26 -2
- data/lib/qti/v1/models/assessment_item.rb +4 -0
- data/lib/qti/v1/models/interactions/base_fill_blank_interaction.rb +33 -1
- data/lib/qti/v1/models/interactions/canvas_multiple_dropdown.rb +2 -29
- data/lib/qti/v1/models/object_bank.rb +14 -0
- data/lib/qti/version.rb +1 -1
- data/spec/fixtures/items_1.2/canvas_multiple_fib_extra_brackets.xml +244 -0
- data/spec/fixtures/{test_qti_1.2_canvas_extended → test_qti_1.2_canvas_extended_1}/gba044ae1fc7cfd3dc413e0df695e0068/assessment_meta.xml +0 -0
- data/spec/fixtures/{test_qti_1.2_canvas_extended → test_qti_1.2_canvas_extended_1}/gba044ae1fc7cfd3dc413e0df695e0068/gba044ae1fc7cfd3dc413e0df695e0068.xml +0 -0
- data/spec/fixtures/{test_qti_1.2_canvas_extended → test_qti_1.2_canvas_extended_1}/imsmanifest.xml +0 -0
- data/spec/fixtures/test_qti_1.2_canvas_extended_2/gba044ae1fc7cfd3dc413e0df695e0068/assessment_meta.xml +76 -0
- data/spec/fixtures/test_qti_1.2_canvas_extended_2/gba044ae1fc7cfd3dc413e0df695e0068/gba044ae1fc7cfd3dc413e0df695e0068.xml +17 -0
- data/spec/fixtures/test_qti_1.2_canvas_extended_2/imsmanifest.xml +39 -0
- data/spec/fixtures/with_banks/g9a20cf3af178b54e4792cbe992f65790/assessment_meta.xml +69 -0
- data/spec/fixtures/with_banks/g9a20cf3af178b54e4792cbe992f65790/assessment_qti.xml +99 -0
- data/spec/fixtures/with_banks/imsmanifest.xml +54 -0
- data/spec/fixtures/with_banks/non_cc_assessments/g195e078fb6e3c4054e38e5c9226287ba.xml.qti +85 -0
- data/spec/fixtures/with_banks/non_cc_assessments/g9a20cf3af178b54e4792cbe992f65790.xml.qti +107 -0
- data/spec/fixtures/with_banks/non_cc_assessments/gab22de457404cb5cf022078f1e4da75e.xml.qti +59 -0
- data/spec/fixtures/with_banks/non_cc_assessments/gf3edf8167be16b3a65a00ca923132b07.xml.qti +145 -0
- data/spec/lib/qti/models/assessment_meta_spec.rb +39 -1
- data/spec/lib/qti/models/resource_spec.rb +14 -0
- data/spec/lib/qti/v1/models/interactions/base_fill_blank_interaction_spec.rb +146 -0
- data/spec/lib/qti/v1/models/interactions/canvas_multiple_dropdown_spec.rb +0 -27
- data/spec/lib/qti/v1/models/object_bank_spec.rb +39 -0
- metadata +36 -9
@@ -0,0 +1,107 @@
|
|
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="g9a20cf3af178b54e4792cbe992f65790" title="Some Old Quiz">
|
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="g067eae0eb6c36be5b3386c35c2cdfa14" title="Question">
|
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>original_answer_ids</fieldlabel>
|
24
|
+
<fieldentry>5972,5959</fieldentry>
|
25
|
+
</qtimetadatafield>
|
26
|
+
<qtimetadatafield>
|
27
|
+
<fieldlabel>assessment_question_identifierref</fieldlabel>
|
28
|
+
<fieldentry>gb11064031e54bbf6bf076a722e0ac941</fieldentry>
|
29
|
+
</qtimetadatafield>
|
30
|
+
</qtimetadata>
|
31
|
+
</itemmetadata>
|
32
|
+
<presentation>
|
33
|
+
<material>
|
34
|
+
<mattext texttype="text/html"><div><p>Is this an old quiz?</p></div></mattext>
|
35
|
+
</material>
|
36
|
+
<response_lid ident="response1" rcardinality="Single">
|
37
|
+
<render_choice>
|
38
|
+
<response_label ident="5972">
|
39
|
+
<material>
|
40
|
+
<mattext texttype="text/plain">True</mattext>
|
41
|
+
</material>
|
42
|
+
</response_label>
|
43
|
+
<response_label ident="5959">
|
44
|
+
<material>
|
45
|
+
<mattext texttype="text/plain">False</mattext>
|
46
|
+
</material>
|
47
|
+
</response_label>
|
48
|
+
</render_choice>
|
49
|
+
</response_lid>
|
50
|
+
</presentation>
|
51
|
+
<resprocessing>
|
52
|
+
<outcomes>
|
53
|
+
<decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
|
54
|
+
</outcomes>
|
55
|
+
<respcondition continue="No">
|
56
|
+
<conditionvar>
|
57
|
+
<varequal respident="response1">5972</varequal>
|
58
|
+
</conditionvar>
|
59
|
+
<setvar action="Set" varname="SCORE">100</setvar>
|
60
|
+
</respcondition>
|
61
|
+
</resprocessing>
|
62
|
+
</item>
|
63
|
+
<item ident="g566842feff3b50f778290f11021b365e" title="Question">
|
64
|
+
<itemmetadata>
|
65
|
+
<qtimetadata>
|
66
|
+
<qtimetadatafield>
|
67
|
+
<fieldlabel>question_type</fieldlabel>
|
68
|
+
<fieldentry>essay_question</fieldentry>
|
69
|
+
</qtimetadatafield>
|
70
|
+
<qtimetadatafield>
|
71
|
+
<fieldlabel>points_possible</fieldlabel>
|
72
|
+
<fieldentry>1.0</fieldentry>
|
73
|
+
</qtimetadatafield>
|
74
|
+
<qtimetadatafield>
|
75
|
+
<fieldlabel>original_answer_ids</fieldlabel>
|
76
|
+
<fieldentry></fieldentry>
|
77
|
+
</qtimetadatafield>
|
78
|
+
<qtimetadatafield>
|
79
|
+
<fieldlabel>assessment_question_identifierref</fieldlabel>
|
80
|
+
<fieldentry>gfc230151001d8b7ba5325da6b895c0e3</fieldentry>
|
81
|
+
</qtimetadatafield>
|
82
|
+
</qtimetadata>
|
83
|
+
</itemmetadata>
|
84
|
+
<presentation>
|
85
|
+
<material>
|
86
|
+
<mattext texttype="text/html"><div><p>Write an essay about banks</p></div></mattext>
|
87
|
+
</material>
|
88
|
+
<response_str ident="response1" rcardinality="Single">
|
89
|
+
<render_fib>
|
90
|
+
<response_label ident="answer1" rshuffle="No"/>
|
91
|
+
</render_fib>
|
92
|
+
</response_str>
|
93
|
+
</presentation>
|
94
|
+
<resprocessing>
|
95
|
+
<outcomes>
|
96
|
+
<decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
|
97
|
+
</outcomes>
|
98
|
+
<respcondition continue="No">
|
99
|
+
<conditionvar>
|
100
|
+
<other/>
|
101
|
+
</conditionvar>
|
102
|
+
</respcondition>
|
103
|
+
</resprocessing>
|
104
|
+
</item>
|
105
|
+
</section>
|
106
|
+
</assessment>
|
107
|
+
</questestinterop>
|
@@ -0,0 +1,59 @@
|
|
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
|
+
<objectbank ident="gab22de457404cb5cf022078f1e4da75e">
|
4
|
+
<qtimetadata>
|
5
|
+
<qtimetadatafield>
|
6
|
+
<fieldlabel>bank_title</fieldlabel>
|
7
|
+
<fieldentry>Unfiled Questions</fieldentry>
|
8
|
+
</qtimetadatafield>
|
9
|
+
</qtimetadata>
|
10
|
+
<item ident="gb11064031e54bbf6bf076a722e0ac941" title="Question">
|
11
|
+
<itemmetadata>
|
12
|
+
<qtimetadata>
|
13
|
+
<qtimetadatafield>
|
14
|
+
<fieldlabel>question_type</fieldlabel>
|
15
|
+
<fieldentry>true_false_question</fieldentry>
|
16
|
+
</qtimetadatafield>
|
17
|
+
<qtimetadatafield>
|
18
|
+
<fieldlabel>points_possible</fieldlabel>
|
19
|
+
<fieldentry>1.0</fieldentry>
|
20
|
+
</qtimetadatafield>
|
21
|
+
<qtimetadatafield>
|
22
|
+
<fieldlabel>original_answer_ids</fieldlabel>
|
23
|
+
<fieldentry>5972,5959</fieldentry>
|
24
|
+
</qtimetadatafield>
|
25
|
+
</qtimetadata>
|
26
|
+
</itemmetadata>
|
27
|
+
<presentation>
|
28
|
+
<material>
|
29
|
+
<mattext texttype="text/html"><div><p>Is this an old quiz?</p></div></mattext>
|
30
|
+
</material>
|
31
|
+
<response_lid ident="response1" rcardinality="Single">
|
32
|
+
<render_choice>
|
33
|
+
<response_label ident="5972">
|
34
|
+
<material>
|
35
|
+
<mattext texttype="text/plain">True</mattext>
|
36
|
+
</material>
|
37
|
+
</response_label>
|
38
|
+
<response_label ident="5959">
|
39
|
+
<material>
|
40
|
+
<mattext texttype="text/plain">False</mattext>
|
41
|
+
</material>
|
42
|
+
</response_label>
|
43
|
+
</render_choice>
|
44
|
+
</response_lid>
|
45
|
+
</presentation>
|
46
|
+
<resprocessing>
|
47
|
+
<outcomes>
|
48
|
+
<decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
|
49
|
+
</outcomes>
|
50
|
+
<respcondition continue="No">
|
51
|
+
<conditionvar>
|
52
|
+
<varequal respident="response1">5972</varequal>
|
53
|
+
</conditionvar>
|
54
|
+
<setvar action="Set" varname="SCORE">100</setvar>
|
55
|
+
</respcondition>
|
56
|
+
</resprocessing>
|
57
|
+
</item>
|
58
|
+
</objectbank>
|
59
|
+
</questestinterop>
|
@@ -0,0 +1,145 @@
|
|
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
|
+
<objectbank ident="gf3edf8167be16b3a65a00ca923132b07">
|
4
|
+
<qtimetadata>
|
5
|
+
<qtimetadatafield>
|
6
|
+
<fieldlabel>bank_title</fieldlabel>
|
7
|
+
<fieldentry>First Bank</fieldentry>
|
8
|
+
</qtimetadatafield>
|
9
|
+
</qtimetadata>
|
10
|
+
<item ident="gfc230151001d8b7ba5325da6b895c0e3" title="Question">
|
11
|
+
<itemmetadata>
|
12
|
+
<qtimetadata>
|
13
|
+
<qtimetadatafield>
|
14
|
+
<fieldlabel>question_type</fieldlabel>
|
15
|
+
<fieldentry>essay_question</fieldentry>
|
16
|
+
</qtimetadatafield>
|
17
|
+
<qtimetadatafield>
|
18
|
+
<fieldlabel>points_possible</fieldlabel>
|
19
|
+
<fieldentry>1.0</fieldentry>
|
20
|
+
</qtimetadatafield>
|
21
|
+
<qtimetadatafield>
|
22
|
+
<fieldlabel>original_answer_ids</fieldlabel>
|
23
|
+
<fieldentry></fieldentry>
|
24
|
+
</qtimetadatafield>
|
25
|
+
</qtimetadata>
|
26
|
+
</itemmetadata>
|
27
|
+
<presentation>
|
28
|
+
<material>
|
29
|
+
<mattext texttype="text/html"><div><p>Write an essay about banks</p></div></mattext>
|
30
|
+
</material>
|
31
|
+
<response_str ident="response1" rcardinality="Single">
|
32
|
+
<render_fib>
|
33
|
+
<response_label ident="answer1" rshuffle="No"/>
|
34
|
+
</render_fib>
|
35
|
+
</response_str>
|
36
|
+
</presentation>
|
37
|
+
<resprocessing>
|
38
|
+
<outcomes>
|
39
|
+
<decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
|
40
|
+
</outcomes>
|
41
|
+
<respcondition continue="No">
|
42
|
+
<conditionvar>
|
43
|
+
<other/>
|
44
|
+
</conditionvar>
|
45
|
+
</respcondition>
|
46
|
+
</resprocessing>
|
47
|
+
</item>
|
48
|
+
<item ident="ga9b15165c2d169765d9a7583be507cf7" title="Question">
|
49
|
+
<itemmetadata>
|
50
|
+
<qtimetadata>
|
51
|
+
<qtimetadatafield>
|
52
|
+
<fieldlabel>question_type</fieldlabel>
|
53
|
+
<fieldentry>multiple_choice_question</fieldentry>
|
54
|
+
</qtimetadatafield>
|
55
|
+
<qtimetadatafield>
|
56
|
+
<fieldlabel>points_possible</fieldlabel>
|
57
|
+
<fieldentry>1.0</fieldentry>
|
58
|
+
</qtimetadatafield>
|
59
|
+
<qtimetadatafield>
|
60
|
+
<fieldlabel>original_answer_ids</fieldlabel>
|
61
|
+
<fieldentry>1999,9339</fieldentry>
|
62
|
+
</qtimetadatafield>
|
63
|
+
</qtimetadata>
|
64
|
+
</itemmetadata>
|
65
|
+
<presentation>
|
66
|
+
<material>
|
67
|
+
<mattext texttype="text/html"><div><p>Pick the vowel</p></div></mattext>
|
68
|
+
</material>
|
69
|
+
<response_lid ident="response1" rcardinality="Single">
|
70
|
+
<render_choice>
|
71
|
+
<response_label ident="1999">
|
72
|
+
<material>
|
73
|
+
<mattext texttype="text/plain">E</mattext>
|
74
|
+
</material>
|
75
|
+
</response_label>
|
76
|
+
<response_label ident="9339">
|
77
|
+
<material>
|
78
|
+
<mattext texttype="text/plain">G</mattext>
|
79
|
+
</material>
|
80
|
+
</response_label>
|
81
|
+
</render_choice>
|
82
|
+
</response_lid>
|
83
|
+
</presentation>
|
84
|
+
<resprocessing>
|
85
|
+
<outcomes>
|
86
|
+
<decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
|
87
|
+
</outcomes>
|
88
|
+
<respcondition continue="No">
|
89
|
+
<conditionvar>
|
90
|
+
<varequal respident="response1">1999</varequal>
|
91
|
+
</conditionvar>
|
92
|
+
<setvar action="Set" varname="SCORE">100</setvar>
|
93
|
+
</respcondition>
|
94
|
+
</resprocessing>
|
95
|
+
</item>
|
96
|
+
<item ident="g67e8c6bbb51f71dd55ac0d0cbf460e3f" title="Question">
|
97
|
+
<itemmetadata>
|
98
|
+
<qtimetadata>
|
99
|
+
<qtimetadatafield>
|
100
|
+
<fieldlabel>question_type</fieldlabel>
|
101
|
+
<fieldentry>true_false_question</fieldentry>
|
102
|
+
</qtimetadatafield>
|
103
|
+
<qtimetadatafield>
|
104
|
+
<fieldlabel>points_possible</fieldlabel>
|
105
|
+
<fieldentry>1.0</fieldentry>
|
106
|
+
</qtimetadatafield>
|
107
|
+
<qtimetadatafield>
|
108
|
+
<fieldlabel>original_answer_ids</fieldlabel>
|
109
|
+
<fieldentry>7085,6110</fieldentry>
|
110
|
+
</qtimetadatafield>
|
111
|
+
</qtimetadata>
|
112
|
+
</itemmetadata>
|
113
|
+
<presentation>
|
114
|
+
<material>
|
115
|
+
<mattext texttype="text/html"><div><p>Is this question in a bank?</p></div></mattext>
|
116
|
+
</material>
|
117
|
+
<response_lid ident="response1" rcardinality="Single">
|
118
|
+
<render_choice>
|
119
|
+
<response_label ident="7085">
|
120
|
+
<material>
|
121
|
+
<mattext texttype="text/plain">True</mattext>
|
122
|
+
</material>
|
123
|
+
</response_label>
|
124
|
+
<response_label ident="6110">
|
125
|
+
<material>
|
126
|
+
<mattext texttype="text/plain">False</mattext>
|
127
|
+
</material>
|
128
|
+
</response_label>
|
129
|
+
</render_choice>
|
130
|
+
</response_lid>
|
131
|
+
</presentation>
|
132
|
+
<resprocessing>
|
133
|
+
<outcomes>
|
134
|
+
<decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
|
135
|
+
</outcomes>
|
136
|
+
<respcondition continue="No">
|
137
|
+
<conditionvar>
|
138
|
+
<varequal respident="response1">7085</varequal>
|
139
|
+
</conditionvar>
|
140
|
+
<setvar action="Set" varname="SCORE">100</setvar>
|
141
|
+
</respcondition>
|
142
|
+
</resprocessing>
|
143
|
+
</item>
|
144
|
+
</objectbank>
|
145
|
+
</questestinterop>
|
@@ -27,6 +27,7 @@ context 'Canvas Assessment Meta Data' do
|
|
27
27
|
expect(assessment.canvas_access_code).to eq(access_code)
|
28
28
|
expect(assessment.canvas_ip_filter).to eq(ip_filter)
|
29
29
|
expect(assessment.canvas_time_limit).to eq(time_limit)
|
30
|
+
expect(assessment.canvas_show_correct_answers?).to eq(show_answers)
|
30
31
|
expect(assessment.canvas_show_correct_answers_at).to eq(show_answers_at)
|
31
32
|
expect(assessment.canvas_hide_correct_answers_at).to eq(hide_answers_at)
|
32
33
|
expect(assessment.canvas_require_lockdown_browser?).to eq(rlb)
|
@@ -59,6 +60,7 @@ context 'Canvas Assessment Meta Data' do
|
|
59
60
|
let(:access_code) { nil }
|
60
61
|
let(:ip_filter) { nil }
|
61
62
|
let(:time_limit) { nil }
|
63
|
+
let(:show_answers) { true }
|
62
64
|
let(:show_answers_at) { nil }
|
63
65
|
let(:hide_answers_at) { nil }
|
64
66
|
let(:rlb) { false }
|
@@ -70,7 +72,7 @@ context 'Canvas Assessment Meta Data' do
|
|
70
72
|
end
|
71
73
|
|
72
74
|
describe 'in a QTI 1.2 container with extended fields' do
|
73
|
-
let(:qti_file) { 'test_qti_1.
|
75
|
+
let(:qti_file) { 'test_qti_1.2_canvas_extended_1' }
|
74
76
|
let(:assessment_type) { Qti::V1::Models::Assessment }
|
75
77
|
let(:title) { 'asd09sdfaxsdflj' }
|
76
78
|
let(:instructions) { '<p>dlkjfaflkjla3rlajl3lafd</p>' }
|
@@ -92,6 +94,7 @@ context 'Canvas Assessment Meta Data' do
|
|
92
94
|
let(:access_code) { '98aAlfmxtw#!£$s' }
|
93
95
|
let(:ip_filter) { '192.168.217.1/24' }
|
94
96
|
let(:time_limit) { 187 }
|
97
|
+
let(:show_answers) { true }
|
95
98
|
let(:show_answers_at) { '2041-02-17 06:00:00 UTC' }
|
96
99
|
let(:hide_answers_at) { '2042-12-26 06:00:00 UTC' }
|
97
100
|
let(:rlb) { false }
|
@@ -102,6 +105,40 @@ context 'Canvas Assessment Meta Data' do
|
|
102
105
|
include_examples('loads canvas meta data')
|
103
106
|
end
|
104
107
|
|
108
|
+
describe 'in a QTI 1.2 container with extended fields and empty tags' do
|
109
|
+
let(:qti_file) { 'test_qti_1.2_canvas_extended_2' }
|
110
|
+
let(:assessment_type) { Qti::V1::Models::Assessment }
|
111
|
+
let(:title) { '' }
|
112
|
+
let(:instructions) { '' }
|
113
|
+
let(:points_possible) { 0.0 }
|
114
|
+
let(:oqaat) { false }
|
115
|
+
let(:allowed_attempts) { 0 }
|
116
|
+
let(:hide_results) { nil }
|
117
|
+
let(:quiz_type) { nil }
|
118
|
+
let('anon_submissions') { false }
|
119
|
+
let(:could_be_locked) { false }
|
120
|
+
let(:nobacktracking) { false }
|
121
|
+
let(:available) { false }
|
122
|
+
let(:one_time_results) { false }
|
123
|
+
let(:scoring_policy) { nil }
|
124
|
+
let(:shuffle_answers) { false }
|
125
|
+
let(:lock_at) { nil }
|
126
|
+
let(:unlock_at) { nil }
|
127
|
+
let(:due_at) { nil }
|
128
|
+
let(:access_code) { nil }
|
129
|
+
let(:ip_filter) { nil }
|
130
|
+
let(:time_limit) { nil }
|
131
|
+
let(:show_answers) { false }
|
132
|
+
let(:show_answers_at) { nil }
|
133
|
+
let(:hide_answers_at) { nil }
|
134
|
+
let(:rlb) { false }
|
135
|
+
let(:rlb_results) { false }
|
136
|
+
let(:rlb_monitor) { false }
|
137
|
+
let(:lb_monitor_data) { nil }
|
138
|
+
|
139
|
+
include_examples('loads canvas meta data')
|
140
|
+
end
|
141
|
+
|
105
142
|
describe 'in a Common Cartridge container' do
|
106
143
|
let(:qti_file) { 'test_imscc_canvas' }
|
107
144
|
let(:assessment_type) { Qti::V1::Models::Assessment }
|
@@ -125,6 +162,7 @@ context 'Canvas Assessment Meta Data' do
|
|
125
162
|
let(:access_code) { nil }
|
126
163
|
let(:ip_filter) { nil }
|
127
164
|
let(:time_limit) { nil }
|
165
|
+
let(:show_answers) { true }
|
128
166
|
let(:show_answers_at) { nil }
|
129
167
|
let(:hide_answers_at) { nil }
|
130
168
|
let(:rlb) { false }
|
@@ -48,4 +48,18 @@ describe Qti::Models::Manifest do
|
|
48
48
|
expect(assessment_test.assessment_items.first[:resource]).not_to eq(nil)
|
49
49
|
end
|
50
50
|
end
|
51
|
+
|
52
|
+
describe 'object banks' do
|
53
|
+
file = File.join(fixtures_path, 'with_banks/imsmanifest.xml')
|
54
|
+
manifest = described_class.from_path!(file)
|
55
|
+
|
56
|
+
it 'has associated content' do
|
57
|
+
expect(manifest.associated_content_list.count).to eq(4)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'loads objectbanks' do
|
61
|
+
expect(manifest.objectbanks.count).to eq(3)
|
62
|
+
expect(manifest.objectbanks.first).to be_kind_of(Qti::V1::Models::ObjectBank)
|
63
|
+
end
|
64
|
+
end
|
51
65
|
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
describe Qti::V1::Models::Interactions::BaseFillBlankInteraction do
|
2
|
+
let(:fixtures_path) { File.join('spec', 'fixtures', 'items_1.2') }
|
3
|
+
let(:test_object) { Qti::V1::Models::Assessment.from_path!(file_path) }
|
4
|
+
let(:assessment_item_refs) { test_object.assessment_items }
|
5
|
+
let(:loaded_class) { described_class.new(assessment_item_refs.first, test_object) }
|
6
|
+
|
7
|
+
shared_examples_for 'canvas_fib_responses' do
|
8
|
+
it 'returns the canvas_fib_responses' do
|
9
|
+
expect(loaded_class.canvas_fib_responses).to eq(expected_blanks)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'canvas_multiple_dropdowns.xml' do
|
14
|
+
let(:file_path) { File.join(fixtures_path, 'canvas_multiple_dropdowns.xml') }
|
15
|
+
let(:expected_blanks) do
|
16
|
+
[
|
17
|
+
{
|
18
|
+
id: 'response_color1',
|
19
|
+
choices:
|
20
|
+
[
|
21
|
+
{ id: '6548', position: 2, item_body: 'red' },
|
22
|
+
{ id: '5550', position: 3, item_body: 'plaid' }
|
23
|
+
]
|
24
|
+
},
|
25
|
+
{
|
26
|
+
id: 'response_color2',
|
27
|
+
choices:
|
28
|
+
[
|
29
|
+
{ id: '6951', position: 2, item_body: 'blue' },
|
30
|
+
{ id: '4500', position: 3, item_body: 'paisely' }
|
31
|
+
]
|
32
|
+
}
|
33
|
+
]
|
34
|
+
end
|
35
|
+
|
36
|
+
include_examples 'canvas_fib_responses'
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'canvas_multiple_fib.xml' do
|
40
|
+
let(:file_path) { File.join(fixtures_path, 'canvas_multiple_fib.xml') }
|
41
|
+
let(:expected_blanks) do
|
42
|
+
[
|
43
|
+
{
|
44
|
+
id: 'response_color1',
|
45
|
+
choices:
|
46
|
+
[
|
47
|
+
{ id: '9799', item_body: 'red', position: 2 },
|
48
|
+
{ id: '5231', item_body: 'Red', position: 3 }
|
49
|
+
]
|
50
|
+
},
|
51
|
+
{
|
52
|
+
id: 'response_color2',
|
53
|
+
choices:
|
54
|
+
[
|
55
|
+
{ id: '5939', item_body: 'blue', position: 2 },
|
56
|
+
{ id: '6364', item_body: 'Blue', position: 3 }
|
57
|
+
]
|
58
|
+
}
|
59
|
+
]
|
60
|
+
end
|
61
|
+
|
62
|
+
include_examples 'canvas_fib_responses'
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'canvas multiple fill in the blank questions with a single blank' do
|
66
|
+
let(:file_path) { File.join(fixtures_path, 'canvas_multiple_fib_as_single.xml') }
|
67
|
+
let(:expected_blanks) do
|
68
|
+
[
|
69
|
+
{
|
70
|
+
id: 'response_word',
|
71
|
+
choices:
|
72
|
+
[
|
73
|
+
{ id: '3537', item_body: 'word', position: 2 }
|
74
|
+
]
|
75
|
+
}
|
76
|
+
]
|
77
|
+
end
|
78
|
+
|
79
|
+
include_examples 'canvas_fib_responses'
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'canvas multiple fill in the blank questions with a single blank' do
|
83
|
+
let(:file_path) { File.join(fixtures_path, 'canvas_multiple_fib_extra_brackets.xml') }
|
84
|
+
let(:expected_blanks) do
|
85
|
+
[
|
86
|
+
{
|
87
|
+
id: 'response_1',
|
88
|
+
choices:
|
89
|
+
[
|
90
|
+
{ id: '8464', item_body: 'A', position: 2 },
|
91
|
+
{ id: '265', item_body: 'B', position: 3 },
|
92
|
+
{ id: '3002', item_body: 'C', position: 4 },
|
93
|
+
{ id: '1356', item_body: 'D', position: 5 },
|
94
|
+
{ id: '5614', item_body: 'E', position: 6 }
|
95
|
+
]
|
96
|
+
},
|
97
|
+
{
|
98
|
+
id: 'response_2',
|
99
|
+
choices:
|
100
|
+
[
|
101
|
+
{ id: '4002', item_body: 'A', position: 2 },
|
102
|
+
{ id: '8630', item_body: 'B', position: 3 },
|
103
|
+
{ id: '7844', item_body: 'C', position: 4 },
|
104
|
+
{ id: '3602', item_body: 'D', position: 5 },
|
105
|
+
{ id: '9525', item_body: 'E', position: 6 }
|
106
|
+
]
|
107
|
+
},
|
108
|
+
{
|
109
|
+
id: 'response_3',
|
110
|
+
choices:
|
111
|
+
[
|
112
|
+
{ id: '8390', item_body: 'A', position: 2 },
|
113
|
+
{ id: '8745', item_body: 'B', position: 3 },
|
114
|
+
{ id: '3760', item_body: 'C', position: 4 },
|
115
|
+
{ id: '7542', item_body: 'D', position: 5 },
|
116
|
+
{ id: '1523', item_body: 'E', position: 6 }
|
117
|
+
]
|
118
|
+
},
|
119
|
+
{
|
120
|
+
id: 'response_4',
|
121
|
+
choices:
|
122
|
+
[
|
123
|
+
{ id: '3317', item_body: 'A', position: 2 },
|
124
|
+
{ id: '6768', item_body: 'B', position: 3 },
|
125
|
+
{ id: '5823', item_body: 'C', position: 4 },
|
126
|
+
{ id: '2492', item_body: 'D', position: 5 },
|
127
|
+
{ id: '4494', item_body: 'E', position: 6 }
|
128
|
+
]
|
129
|
+
},
|
130
|
+
{
|
131
|
+
id: 'response_5',
|
132
|
+
choices:
|
133
|
+
[
|
134
|
+
{ id: '6742', item_body: 'A', position: 2 },
|
135
|
+
{ id: '794', item_body: 'B', position: 3 },
|
136
|
+
{ id: '4259', item_body: 'C', position: 4 },
|
137
|
+
{ id: '4851', item_body: 'D', position: 5 },
|
138
|
+
{ id: '8574', item_body: 'E', position: 6 }
|
139
|
+
]
|
140
|
+
}
|
141
|
+
]
|
142
|
+
end
|
143
|
+
|
144
|
+
include_examples 'canvas_fib_responses'
|
145
|
+
end
|
146
|
+
end
|