qti 0.7.2 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b7e8bed034f0222ed2e549a1eb87917fcb228a93
4
- data.tar.gz: 21b196ae99492b0d328d7226b966aa2835c0b1ca
3
+ metadata.gz: 235b2d085b857b27a1af24c4baa2039abecd70b2
4
+ data.tar.gz: f84f0ed70ba4e39b05d1814d956833c9feb63344
5
5
  SHA512:
6
- metadata.gz: c5b782a982cf3fc8d42230323bdb6fd66a5c8d93b5e0f3bbe08d6e13dd62b0edb3ee23fcf473f2cc345600e18a51bbd4dc9426fe475fe8f62798bb64111d92e7
7
- data.tar.gz: 9370fc9f192cd0b816cf334b825b5cd1c389eda38a909a3f14ea47e60486a878671147633544de1f53633dd756a31b72fde44d9a835b75205138d308356a87ea
6
+ metadata.gz: 3891f873495ff08c9930edc282ade6e80e0206f3f993e26acea3f9821da3048a01d0f0a2f39bf3544e138230bf10f7928172b4b027758bc9b2fe9eb54a36d4c6
7
+ data.tar.gz: 8842a46871705a74ffc0efef9823629aa285dd47a4bc13ebaeab60b66796877d31f1fc5660ee15d638a67064b88de9df86e33fbeeae987e427ed4f9182364e0d
@@ -21,8 +21,10 @@ module Qti
21
21
  raise NotImplementedError
22
22
  end
23
23
 
24
+ private
25
+
24
26
  def rcardinality
25
- @rcardinality ||= @node.at_xpath('.//xmlns:response_lid/@rcardinality')&.value || 'Single'
27
+ @rcardinality ||= @node.at_xpath('.//xmlns:response_lid/@rcardinality').value
26
28
  end
27
29
  end
28
30
  end
@@ -24,8 +24,14 @@ module Qti
24
24
 
25
25
  def scoring_data_structs
26
26
  choice_nodes = node.xpath('.//xmlns:respcondition')
27
- set_var_nodes = choice_nodes.select { |choice_node| choice_node.at_xpath('.//xmlns:setvar').content.to_f.positive? }
28
- set_var_nodes.map { |value_node| ScoringData.new(value_node.at_xpath('.//xmlns:varequal').content, rcardinality) }
27
+ if choice_nodes.at_xpath('.//xmlns:and').present?
28
+ answer_choices = choice_nodes.at_xpath('.//xmlns:and')
29
+ answer_choices.children.filter('not').each(&:remove)
30
+ answer_choices.children.map { |value_node| ScoringData.new(value_node.content, rcardinality) }
31
+ else
32
+ set_var_nodes = choice_nodes.select { |choice_node| choice_node.at_xpath('.//xmlns:setvar').content.to_f.positive? }
33
+ set_var_nodes.map { |value_node| ScoringData.new(value_node.at_xpath('.//xmlns:varequal').content, rcardinality) }
34
+ end
29
35
  end
30
36
 
31
37
  private
@@ -17,8 +17,8 @@ module Qti
17
17
 
18
18
  def questions
19
19
  node.xpath('.//xmlns:response_lid').map do |lid_node|
20
- item_body = lid_node.at_xpath('.//xmlns:mattext').text
21
- { id: lid_node.attributes['ident'].value, itemBody: item_body }
20
+ question_body = lid_node.at_xpath('.//xmlns:mattext').text
21
+ { id: lid_node.attributes['ident'].value, question_body: question_body }
22
22
  end
23
23
  end
24
24
 
@@ -24,7 +24,7 @@ module Qti
24
24
  end
25
25
 
26
26
  def questions
27
- questions_ids.map { |id| { id: id, itemBody: choices_by_identifier[id].content } }
27
+ questions_ids.map { |id| { id: id, question_body: choices_by_identifier[id].content } }
28
28
  end
29
29
 
30
30
  def answers
@@ -16,7 +16,7 @@ module Qti
16
16
  end
17
17
 
18
18
  def questions
19
- questions_ids.map { |id| { id: id, itemBody: choices_by_identifier[id].content } }
19
+ questions_ids.map { |id| { id: id, question_body: choices_by_identifier[id].content } }
20
20
  end
21
21
 
22
22
  def shuffled?
@@ -0,0 +1,78 @@
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="ide4d4fe237ffa50180563f81df123832" title="Multiple Answer 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="i201ce3687ccbb50d441c6b53eaafd9f4" title="Question">
12
+ <itemmetadata>
13
+ <qtimetadata>
14
+ <qtimetadatafield>
15
+ <fieldlabel>question_type</fieldlabel>
16
+ <fieldentry>multiple_answers_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>ia686e268a4c0356ec490324708ce275a</fieldentry>
25
+ </qtimetadatafield>
26
+ </qtimetadata>
27
+ </itemmetadata>
28
+ <presentation>
29
+ <material>
30
+ <mattext texttype="text/html">&lt;div&gt;&lt;p&gt;Multiple Answer pick A C and D&lt;/p&gt;&lt;/div&gt;</mattext>
31
+ </material>
32
+ <response_lid ident="response1" rcardinality="Multiple">
33
+ <render_choice>
34
+ <response_label ident="4155">
35
+ <material>
36
+ <mattext texttype="text/plain">A</mattext>
37
+ </material>
38
+ </response_label>
39
+ <response_label ident="4245">
40
+ <material>
41
+ <mattext texttype="text/plain">B</mattext>
42
+ </material>
43
+ </response_label>
44
+ <response_label ident="6991">
45
+ <material>
46
+ <mattext texttype="text/plain">C</mattext>
47
+ </material>
48
+ </response_label>
49
+ <response_label ident="1939">
50
+ <material>
51
+ <mattext texttype="text/plain">D</mattext>
52
+ </material>
53
+ </response_label>
54
+ </render_choice>
55
+ </response_lid>
56
+ </presentation>
57
+ <resprocessing>
58
+ <outcomes>
59
+ <decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
60
+ </outcomes>
61
+ <respcondition continue="No">
62
+ <conditionvar>
63
+ <and>
64
+ <varequal respident="response1">4155</varequal>
65
+ <not>
66
+ <varequal respident="response1">4245</varequal>
67
+ </not>
68
+ <varequal respident="response1">6991</varequal>
69
+ <varequal respident="response1">1939</varequal>
70
+ </and>
71
+ </conditionvar>
72
+ <setvar action="Set" varname="SCORE">100</setvar>
73
+ </respcondition>
74
+ </resprocessing>
75
+ </item>
76
+ </section>
77
+ </assessment>
78
+ </questestinterop>
@@ -1,78 +1,83 @@
1
1
  <?xml version="1.0" encoding="ISO-8859-1"?>
2
+
2
3
  <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 title="1.2 Import Quiz" ident="A1001">
4
- <section title="Main" ident="S1002">
5
- <item title="How much time each week?" ident="QUE_1007">
6
- <presentation>
7
- <material>
8
- <mattext texttype="text/html"><![CDATA[How much time should you spend working on your online course each week in order to earn credit? <img align="bottom" alt="image.png" src="$IMS_CC_FILE_BASE$org1/images/image.png" border="0"/>]]></mattext>
9
- </material>
10
- <response_lid ident="QUE_1008_RL" rcardinality="Single" rtiming="No">
11
- <render_choice>
12
- <response_label ident="QUE_1009_A1">
13
- <material>
14
- <mattext texttype="text/html"><![CDATA[However long it takes]]></mattext>
15
- </material>
16
- </response_label>
17
- <response_label ident="QUE_1010_A2">
18
- <material>
19
- <mattext texttype="text/html"><![CDATA[30 - 90 minutes]]></mattext>
20
- </material>
21
- </response_label>
22
- <response_label ident="QUE_1011_A3">
23
- <material>
24
- <mattext texttype="text/html"><![CDATA[1 - 2 hours]]></mattext>
25
- </material>
26
- </response_label>
27
- <response_label ident="QUE_1012_A4">
28
- <material>
29
- <mattext texttype="text/html"><![CDATA[At least 3 hours]]></mattext>
30
- </material>
31
- </response_label>
32
- <response_label ident="QUE_1013_A5">
33
- <material>
34
- <mattext texttype="text/html"><![CDATA[6 or more hours]]></mattext>
35
- </material>
36
- </response_label>
37
- </render_choice>
38
- </response_lid>
39
- </presentation>
40
- <resprocessing>
41
- <outcomes>
42
- <decvar vartype="Decimal" defaultval="0" varname="que_score"/>
43
- </outcomes>
44
- <respcondition>
45
- <conditionvar>
46
- <varequal respident="QUE_1008_RL">QUE_1009_A1</varequal>
47
- </conditionvar>
48
- <setvar varname="que_score" action="Add">0</setvar>
49
- </respcondition>
50
- <respcondition>
51
- <conditionvar>
52
- <varequal respident="QUE_1008_RL">QUE_1010_A2</varequal>
53
- </conditionvar>
54
- <setvar varname="que_score" action="Add">0</setvar>
55
- </respcondition>
56
- <respcondition>
57
- <conditionvar>
58
- <varequal respident="QUE_1008_RL">QUE_1011_A3</varequal>
59
- </conditionvar>
60
- <setvar varname="que_score" action="Add">0</setvar>
61
- </respcondition>
62
- <respcondition>
63
- <conditionvar>
64
- <varequal respident="QUE_1008_RL">QUE_1012_A4</varequal>
65
- </conditionvar>
66
- <setvar varname="que_score" action="Set">10.00</setvar>
67
- </respcondition>
68
- <respcondition>
69
- <conditionvar>
70
- <varequal respident="QUE_1008_RL">QUE_1013_A5</varequal>
71
- </conditionvar>
72
- <setvar varname="que_score" action="Add">0</setvar>
73
- </respcondition>
74
- </resprocessing>
75
- </item>
76
- </section>
77
- </assessment>
4
+
5
+ <assessment title="1.2 Import Quiz" ident="A1001">
6
+ <section title="Main" ident="S1002">
7
+
8
+ <item title="How much time each week?" ident="QUE_1007">
9
+ <presentation>
10
+ <material>
11
+ <mattext texttype="text/html"><![CDATA[How much time should you spend working on your online course each week in order to earn credit? <img align="bottom" alt="image.png" src="$IMS_CC_FILE_BASE$org1/images/image.png" border="0"/>]]></mattext>
12
+ </material>
13
+ <response_lid ident="QUE_1008_RL" rcardinality="Single" rtiming="No">
14
+ <render_choice>
15
+ <response_label ident="QUE_1009_A1">
16
+ <material>
17
+ <mattext texttype="text/html"><![CDATA[However long it takes]]></mattext>
18
+ </material>
19
+ </response_label>
20
+ <response_label ident="QUE_1010_A2">
21
+ <material>
22
+ <mattext texttype="text/html"><![CDATA[30 - 90 minutes]]></mattext>
23
+ </material>
24
+ </response_label>
25
+ <response_label ident="QUE_1011_A3">
26
+ <material>
27
+ <mattext texttype="text/html"><![CDATA[1 - 2 hours]]></mattext>
28
+ </material>
29
+ </response_label>
30
+ <response_label ident="QUE_1012_A4">
31
+ <material>
32
+ <mattext texttype="text/html"><![CDATA[At least 3 hours]]></mattext>
33
+ </material>
34
+ </response_label>
35
+ <response_label ident="QUE_1013_A5">
36
+ <material>
37
+ <mattext texttype="text/html"><![CDATA[6 or more hours]]></mattext>
38
+ </material>
39
+ </response_label>
40
+ </render_choice>
41
+ </response_lid>
42
+ </presentation>
43
+ <resprocessing>
44
+ <outcomes>
45
+ <decvar vartype="Decimal" defaultval="0" varname="que_score"/>
46
+ </outcomes>
47
+ <respcondition>
48
+ <conditionvar>
49
+ <varequal respident="QUE_1008_RL">QUE_1009_A1</varequal>
50
+ </conditionvar>
51
+ <setvar varname="que_score" action="Add">0</setvar>
52
+ </respcondition>
53
+ <respcondition>
54
+ <conditionvar>
55
+ <varequal respident="QUE_1008_RL">QUE_1010_A2</varequal>
56
+ </conditionvar>
57
+ <setvar varname="que_score" action="Add">0</setvar>
58
+ </respcondition>
59
+ <respcondition>
60
+ <conditionvar>
61
+ <varequal respident="QUE_1008_RL">QUE_1011_A3</varequal>
62
+ </conditionvar>
63
+ <setvar varname="que_score" action="Add">0</setvar>
64
+ </respcondition>
65
+ <respcondition>
66
+ <conditionvar>
67
+ <varequal respident="QUE_1008_RL">QUE_1012_A4</varequal>
68
+ </conditionvar>
69
+ <setvar varname="que_score" action="Set">10.00</setvar>
70
+ </respcondition>
71
+ <respcondition>
72
+ <conditionvar>
73
+ <varequal respident="QUE_1008_RL">QUE_1013_A5</varequal>
74
+ </conditionvar>
75
+ <setvar varname="que_score" action="Add">0</setvar>
76
+ </respcondition>
77
+ </resprocessing>
78
+ </item>
79
+
80
+ </section>
81
+ </assessment>
82
+
78
83
  </questestinterop>
@@ -48,4 +48,19 @@ describe Qti::V1::Models::AssessmentItem do
48
48
  )
49
49
  end
50
50
  end
51
+
52
+ context 'multiple_answer_canvas.xml' do
53
+ let(:file_path) { File.join('spec', 'fixtures', 'items_1.2', 'multiple_answer_canvas.xml') }
54
+ let(:test_object) { Qti::V1::Models::Assessment.from_path!(file_path) }
55
+ let(:assessment_item_refs) { test_object.assessment_items }
56
+ let(:loaded_class) { described_class.new(assessment_item_refs) }
57
+
58
+ describe '#scoring_data_structs' do
59
+ it 'collects all the correct answers' do
60
+ struct = loaded_class.scoring_data_structs
61
+ expect(struct.size).to eq 3
62
+ expect(struct.map(&:values)).to eq ["4155", "6991", "1939"]
63
+ end
64
+ end
65
+ end
51
66
  end
@@ -14,7 +14,7 @@ describe Qti::V1::Models::Interactions::ChoiceInteraction do
14
14
 
15
15
  shared_examples_for 'answers' do
16
16
  it 'returns the answers' do
17
- expect(loaded_class.answers.count).to eq answer_count
17
+ expect(loaded_class.answers.count).to eq answer_choices_count
18
18
  expect(loaded_class.answers.first).to be_an_instance_of(Qti::V1::Models::Choices::LogicalIdentifierChoice)
19
19
  end
20
20
  end
@@ -22,7 +22,7 @@ describe Qti::V1::Models::Interactions::ChoiceInteraction do
22
22
  context 'multiple_choice.xml' do
23
23
  let(:file_path) { File.join(fixtures_path, 'multiple_choice.xml') }
24
24
  let(:shuffle_value) { false }
25
- let(:answer_count) { 5 }
25
+ let(:answer_choices_count) { 5 }
26
26
 
27
27
  include_examples 'shuffled?'
28
28
  include_examples 'answers'
@@ -31,18 +31,24 @@ describe Qti::V1::Models::Interactions::ChoiceInteraction do
31
31
  context 'true_false.xml' do
32
32
  let(:file_path) { File.join(fixtures_path, 'true_false.xml') }
33
33
  let(:shuffle_value) { true }
34
- let(:answer_count) { 2 }
34
+ let(:answer_choices_count) { 2 }
35
35
 
36
36
  include_examples 'shuffled?'
37
37
  include_examples 'answers'
38
38
  end
39
39
 
40
- context 'true_false.xml' do
40
+ context 'multiple_answer.xml' do
41
41
  let(:file_path) { File.join(fixtures_path, 'multiple_answer.xml') }
42
42
  let(:shuffle_value) { false }
43
- let(:answer_count) { 7 }
44
43
 
45
44
  include_examples 'shuffled?'
46
- include_examples 'answers'
45
+ end
46
+
47
+ context 'multiple_answer_canvas.xml' do
48
+ let(:file_path) { File.join(fixtures_path, 'multiple_answer_canvas.xml') }
49
+ let(:shuffle_value) { false }
50
+ let(:answer_choices_count) { 4 }
51
+
52
+ include_examples 'shuffled?'
47
53
  end
48
54
  end
@@ -36,8 +36,8 @@ describe Qti::V1::Models::Interactions::MatchInteraction do
36
36
  describe '#questions' do
37
37
  it 'returns the questions' do
38
38
  expect(subject.questions).to eq(
39
- [{ id: 'question_1', itemBody: 'Light Microscope' },
40
- { id: 'question_2', itemBody: 'Electron Microscopes' }]
39
+ [{ id: 'question_1', question_body: 'Light Microscope' },
40
+ { id: 'question_2', question_body: 'Electron Microscopes' }]
41
41
  )
42
42
  end
43
43
  end
@@ -30,9 +30,9 @@ describe Qti::V2::Models::Interactions::MatchInteraction do
30
30
  describe '#questions' do
31
31
  it 'returns the questions' do
32
32
  expect(subject.questions).to eq(
33
- [{ id: 'A', itemBody: 'Antonio' },
34
- { id: 'C', itemBody: 'Capulet' },
35
- { id: 'D', itemBody: 'Demetrius' }]
33
+ [{ id: 'A', question_body: 'Antonio' },
34
+ { id: 'C', question_body: 'Capulet' },
35
+ { id: 'D', question_body: 'Demetrius' }]
36
36
  )
37
37
  end
38
38
  end
@@ -53,7 +53,7 @@ describe Qti::V2::Models::Interactions::MatchInteraction do
53
53
  expect(subject.scoring_data_structs).to eq [
54
54
  Qti::V2::Models::ScoringData.new('Dresden', 'Pair', id: 'Match2675678', question_id: 'Match28433682'),
55
55
  Qti::V2::Models::ScoringData.new('Leipzig', 'Pair', id: 'Match9372581', question_id: 'Match7191791'),
56
- Qti::V2::Models::ScoringData.new('Halle', 'Pair', id: 'Match22744006', question_id: 'Match20473010'),
56
+ Qti::V2::Models::ScoringData.new('Halle' , 'Pair', id: 'Match22744006', question_id: 'Match20473010'),
57
57
  Qti::V2::Models::ScoringData.new('Bautzen', 'Pair', id: 'Match17943221', question_id: 'Match6429655')
58
58
  ]
59
59
  end
@@ -68,10 +68,10 @@ describe Qti::V2::Models::Interactions::MatchInteraction do
68
68
  describe '#questions' do
69
69
  it 'returns the questions' do
70
70
  expect(subject.questions).to eq(
71
- [{ id: 'Match28433682', itemBody: 'Weißeritz' },
72
- { id: 'Match7191791', itemBody: 'Mulde' },
73
- { id: 'Match20473010', itemBody: 'Saale' },
74
- { id: 'Match6429655', itemBody: 'Spree' }]
71
+ [{ id: 'Match28433682', question_body: 'Weißeritz' },
72
+ { id: 'Match7191791', question_body: 'Mulde' },
73
+ { id: 'Match20473010', question_body: 'Saale' },
74
+ { id: 'Match6429655', question_body: 'Spree' }]
75
75
  )
76
76
  end
77
77
  end
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.7.2
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hannah Bottalla
@@ -252,6 +252,7 @@ files:
252
252
  - spec/fixtures/items_1.2/fib_str.xml
253
253
  - spec/fixtures/items_1.2/matching.xml
254
254
  - spec/fixtures/items_1.2/multiple_answer.xml
255
+ - spec/fixtures/items_1.2/multiple_answer_canvas.xml
255
256
  - spec/fixtures/items_1.2/multiple_choice.xml
256
257
  - spec/fixtures/items_1.2/ordering.xml
257
258
  - spec/fixtures/items_1.2/true_false.xml
@@ -443,7 +444,6 @@ files:
443
444
  - spec/lib/qti/v1/models/assessment_spec.rb
444
445
  - spec/lib/qti/v1/models/choices/fill_blank_choice_spec.rb
445
446
  - spec/lib/qti/v1/models/choices/logical_identifier_choice_spec.rb
446
- - spec/lib/qti/v1/models/interactions/base_interaction_spec.rb
447
447
  - spec/lib/qti/v1/models/interactions/choice_interaction_spec.rb
448
448
  - spec/lib/qti/v1/models/interactions/fill_blank_interaction_spec.rb
449
449
  - spec/lib/qti/v1/models/interactions/match_interaction_spec.rb
@@ -482,7 +482,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
482
482
  version: '0'
483
483
  requirements: []
484
484
  rubyforge_project:
485
- rubygems_version: 2.6.12
485
+ rubygems_version: 2.5.1
486
486
  signing_key:
487
487
  specification_version: 4
488
488
  summary: QTI 1.2 and 2.1 import and export models
@@ -493,6 +493,7 @@ test_files:
493
493
  - spec/fixtures/items_1.2/fib_str.xml
494
494
  - spec/fixtures/items_1.2/matching.xml
495
495
  - spec/fixtures/items_1.2/multiple_answer.xml
496
+ - spec/fixtures/items_1.2/multiple_answer_canvas.xml
496
497
  - spec/fixtures/items_1.2/multiple_choice.xml
497
498
  - spec/fixtures/items_1.2/ordering.xml
498
499
  - spec/fixtures/items_1.2/true_false.xml
@@ -684,7 +685,6 @@ test_files:
684
685
  - spec/lib/qti/v1/models/assessment_spec.rb
685
686
  - spec/lib/qti/v1/models/choices/fill_blank_choice_spec.rb
686
687
  - spec/lib/qti/v1/models/choices/logical_identifier_choice_spec.rb
687
- - spec/lib/qti/v1/models/interactions/base_interaction_spec.rb
688
688
  - spec/lib/qti/v1/models/interactions/choice_interaction_spec.rb
689
689
  - spec/lib/qti/v1/models/interactions/fill_blank_interaction_spec.rb
690
690
  - spec/lib/qti/v1/models/interactions/match_interaction_spec.rb
@@ -1,20 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Qti::V1::Models::Interactions::BaseInteraction do
4
- let(:doc) do
5
- <<-XML.strip_heredoc
6
- <?xml version="1.0" encoding="ISO-8859-1"?>
7
- <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">
8
- <response_lid ident="QUE_1008_RL" rtiming="No">
9
- </response_lid>
10
- </questestinterop>
11
- XML
12
- end
13
-
14
- let(:node) { Nokogiri.XML(doc, &:noblanks) }
15
-
16
- it 'returns "Single" rcardinality by default' do
17
- interaction = described_class.new(node)
18
- expect(interaction.rcardinality).to eq 'Single'
19
- end
20
- end