amee-data-abstraction 1.2.0 → 1.3.0
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.
- data/CHANGELOG.txt +3 -0
- data/README.txt +28 -15
- data/Rakefile +1 -16
- data/VERSION +1 -1
- data/amee-data-abstraction.gemspec +6 -5
- data/lib/amee-data-abstraction/calculation.rb +1 -1
- data/lib/amee-data-abstraction/calculation_set.rb +152 -10
- data/lib/amee-data-abstraction/drill.rb +8 -2
- data/lib/amee-data-abstraction/input.rb +24 -0
- data/lib/amee-data-abstraction/ongoing_calculation.rb +13 -9
- data/lib/amee-data-abstraction/term.rb +31 -13
- data/spec/amee-data-abstraction/calculation_set_spec.rb +244 -8
- data/spec/amee-data-abstraction/calculation_spec.rb +23 -18
- data/spec/amee-data-abstraction/drill_spec.rb +34 -7
- data/spec/amee-data-abstraction/input_spec.rb +113 -73
- data/spec/amee-data-abstraction/metadatum_spec.rb +1 -1
- data/spec/amee-data-abstraction/ongoing_calculation_spec.rb +45 -29
- data/spec/amee-data-abstraction/profile_spec.rb +2 -2
- data/spec/amee-data-abstraction/prototype_calculation_spec.rb +12 -8
- data/spec/amee-data-abstraction/term_spec.rb +49 -5
- data/spec/amee-data-abstraction/terms_list_spec.rb +16 -12
- data/spec/config/amee_units_spec.rb +1 -2
- data/spec/core-extensions/class_spec.rb +18 -18
- data/spec/core-extensions/hash_spec.rb +1 -2
- data/spec/core-extensions/ordered_hash_spec.rb +1 -2
- data/spec/core-extensions/proc_spec.rb +1 -1
- data/spec/fixtures/{electricity.rb → config/calculations/electricity.rb} +2 -2
- data/spec/fixtures/config/calculations/electricity_and_transport.rb +53 -0
- data/spec/fixtures/{transport.rb → config/calculations/transport.rb} +2 -2
- data/spec/fixtures/config/electricity.rb +35 -0
- data/spec/spec_helper.rb +38 -6
- metadata +8 -7
- data/spec/fixtures/electricity_and_transport.rb +0 -55
@@ -1,21 +1,30 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
|
+
|
2
3
|
describe Drill do
|
4
|
+
|
5
|
+
|
6
|
+
before :all do
|
7
|
+
@calc = CalculationSet.find("transport")[:transport]
|
8
|
+
end
|
9
|
+
|
3
10
|
it 'knows its options when it is the first choice' do
|
4
11
|
AMEEMocker.new(self,:path=>'transport/car/generic',
|
5
12
|
:selections=>[],
|
6
13
|
:choices=>['diesel','petrol']).drill
|
7
|
-
|
14
|
+
@calc.begin_calculation[:fuel].send(:choices).should eql ['diesel','petrol']
|
8
15
|
end
|
16
|
+
|
9
17
|
it 'knows its options when it is a later choice' do
|
10
18
|
AMEEMocker.new(self,:path=>'transport/car/generic',
|
11
19
|
:selections=>[['fuel','diesel']],
|
12
20
|
:choices=>['large','small']).drill
|
13
|
-
t
|
21
|
+
t=@calc.begin_calculation
|
14
22
|
t[:fuel].value 'diesel'
|
15
23
|
t[:size].send(:choices).should eql ['large','small']
|
16
24
|
end
|
17
|
-
|
18
|
-
|
25
|
+
|
26
|
+
it 'is enabled if it is the next choice or has been chosen' do
|
27
|
+
t=@calc.begin_calculation
|
19
28
|
t[:fuel].enabled?.should be_true
|
20
29
|
t[:size].enabled?.should be_false
|
21
30
|
t[:fuel].value 'diesel'
|
@@ -25,14 +34,32 @@ describe Drill do
|
|
25
34
|
t[:fuel].enabled?.should be_true
|
26
35
|
t[:size].enabled?.should be_true
|
27
36
|
end
|
28
|
-
|
37
|
+
|
38
|
+
it 'is valid if assigned a choice in the choices' do
|
29
39
|
AMEEMocker.new(self,:path=>'transport/car/generic',
|
30
40
|
:selections=>[],
|
31
41
|
:choices=>['diesel','petrol']).drill
|
32
|
-
t
|
42
|
+
t=@calc.begin_calculation
|
33
43
|
t[:fuel].value 'diesel'
|
34
44
|
t[:fuel].send(:valid?).should be_true
|
35
45
|
t[:fuel].value 'banana'
|
36
46
|
t[:fuel].send(:valid?).should be_false
|
37
47
|
end
|
48
|
+
|
49
|
+
it "should set and get custom choices" do
|
50
|
+
t=@calc.begin_calculation
|
51
|
+
t[:fuel].choices 'anthracite', 'lignite'
|
52
|
+
t[:fuel].choices.should eql ['anthracite', 'lignite']
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'is sets correct single choice if AMEE skips during drill' do
|
56
|
+
mocker = AMEEMocker.new(self,:path=>'transport/car/generic',
|
57
|
+
:selections=>[['fuel','diesel']])
|
58
|
+
mocker.drill_with_skip('size'=>'small')
|
59
|
+
t=@calc.begin_calculation
|
60
|
+
t[:fuel].value 'diesel'
|
61
|
+
t[:fuel].should_not be_disabled
|
62
|
+
t[:size].choices.should eql ['small']
|
63
|
+
t[:size].should be_disabled
|
64
|
+
end
|
38
65
|
end
|
@@ -1,77 +1,117 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Input do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
i=Input.new{validation /bark/}
|
12
|
-
i.value 'barking'
|
13
|
-
lambda{i.validate!}.should_not raise_error
|
14
|
-
i.value.should eql 'barking'
|
15
|
-
i.value 'marking'
|
16
|
-
lambda{i.validate!}.should raise_error Exceptions::ChoiceValidation
|
17
|
-
j=Input.new{}
|
18
|
-
j.value 'marking'
|
19
|
-
j.value.should eql 'marking'
|
20
|
-
end
|
21
|
-
it "can accept a numeric symbol validation" do
|
22
|
-
i=Input.new{validation :numeric}
|
23
|
-
i.value 3
|
24
|
-
lambda{i.validate!}.should_not raise_error
|
25
|
-
i.value '3'
|
26
|
-
lambda{i.validate!}.should_not raise_error
|
27
|
-
i.value 'e'
|
28
|
-
lambda{i.validate!}.should raise_error Exceptions::ChoiceValidation
|
29
|
-
end
|
30
|
-
it "can accept a date symbol validation" do
|
31
|
-
i=Input.new{validation :date}
|
32
|
-
i.value Date.today
|
33
|
-
lambda{i.validate!}.should_not raise_error
|
34
|
-
i.value '2011-01-01'
|
35
|
-
lambda{i.validate!}.should_not raise_error
|
36
|
-
i.value 'e'
|
37
|
-
lambda{i.validate!}.should raise_error Exceptions::ChoiceValidation
|
38
|
-
end
|
4
|
+
|
5
|
+
it 'can be given a fixed value' do
|
6
|
+
i=Input.new{fixed 6}
|
7
|
+
i.value.should eql 6
|
8
|
+
i.fixed?.should be_true
|
9
|
+
lambda{i.value 7}.should raise_error Exceptions::FixedValueInterference
|
10
|
+
end
|
39
11
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
12
|
+
it "can be made optional" do
|
13
|
+
i=Input.new{label :mass; value 6}
|
14
|
+
i.should_not be_optional
|
15
|
+
i.should be_compulsory
|
16
|
+
i.optional!
|
17
|
+
i.should be_optional
|
18
|
+
i.should_not be_compulsory
|
19
|
+
end
|
20
|
+
|
21
|
+
it "can be made compulsory" do
|
22
|
+
i=Input.new{label :mass; value 6}
|
23
|
+
i.should_not be_optional
|
24
|
+
i.optional!
|
25
|
+
i.should be_optional
|
26
|
+
i.should_not be_compulsory
|
27
|
+
i.compulsory!
|
28
|
+
i.should_not be_optional
|
29
|
+
i.should be_compulsory
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'raises exception when invalid' do
|
33
|
+
i=Input.new{validation /bark/}
|
34
|
+
i.value 'barking'
|
35
|
+
lambda{i.validate!}.should_not raise_error
|
36
|
+
i.value.should eql 'barking'
|
37
|
+
i.value 'marking'
|
38
|
+
lambda{i.validate!}.should raise_error Exceptions::ChoiceValidation
|
39
|
+
j=Input.new{}
|
40
|
+
j.value 'marking'
|
41
|
+
j.value.should eql 'marking'
|
42
|
+
end
|
43
|
+
|
44
|
+
it "can accept a numeric symbol validation" do
|
45
|
+
i=Input.new{validation :numeric}
|
46
|
+
i.value 3
|
47
|
+
lambda{i.validate!}.should_not raise_error
|
48
|
+
i.value '3'
|
49
|
+
lambda{i.validate!}.should_not raise_error
|
50
|
+
i.value 'e'
|
51
|
+
lambda{i.validate!}.should raise_error Exceptions::ChoiceValidation
|
52
|
+
end
|
53
|
+
|
54
|
+
it "can accept a date symbol validation" do
|
55
|
+
i=Input.new{validation :date}
|
56
|
+
i.value Date.today
|
57
|
+
lambda{i.validate!}.should_not raise_error
|
58
|
+
i.value '2011-01-01'
|
59
|
+
lambda{i.validate!}.should_not raise_error
|
60
|
+
i.value 'e'
|
61
|
+
lambda{i.validate!}.should raise_error Exceptions::ChoiceValidation
|
62
|
+
end
|
63
|
+
|
64
|
+
it "can accept a time symbol validation" do
|
65
|
+
i=Input.new{validation :datetime}
|
66
|
+
i.value DateTime.now
|
67
|
+
lambda{i.validate!}.should_not raise_error
|
68
|
+
i.value '2011-01-01 09:00:00'
|
69
|
+
lambda{i.validate!}.should_not raise_error
|
70
|
+
i.value 'e'
|
71
|
+
lambda{i.validate!}.should raise_error Exceptions::ChoiceValidation
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should start with dirty set as false" do
|
75
|
+
i=Input.new{fixed 5}
|
76
|
+
i.dirty?.should eql false
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should be dirty when the value is changed" do
|
80
|
+
i=Input.new
|
81
|
+
i.value 5
|
82
|
+
i.dirty?.should eql true
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'can have custom validation message' do
|
86
|
+
i=Input.new{label :woof; validation /bark/; validation_message {"#{value} does not match pattern /bark/"}}
|
87
|
+
i.value 'marking'
|
88
|
+
lambda{i.validate!}.should raise_error Exceptions::ChoiceValidation,"marking does not match pattern /bark/"
|
89
|
+
j=Input.new{}
|
90
|
+
j.value 'marking'
|
91
|
+
j.value.should eql 'marking'
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'can have default validation message' do
|
95
|
+
i=Input.new{label :woof; validation /bark/}
|
96
|
+
i.value 'barking'
|
97
|
+
lambda{i.validate!}.should_not raise_error
|
98
|
+
i.value.should eql 'barking'
|
99
|
+
i.value 'marking'
|
100
|
+
lambda{i.validate!}.should raise_error Exceptions::ChoiceValidation,"Woof is invalid."
|
101
|
+
j=Input.new{}
|
102
|
+
j.value 'marking'
|
103
|
+
j.value.should eql 'marking'
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'is always valid if it is fixed' do
|
107
|
+
i=Input.new{fixed 5; validation /7/}
|
108
|
+
lambda{i.validate!}.should_not raise_error
|
109
|
+
i.value.should eql 5
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'is always disabled if it is fixed' do
|
113
|
+
i=Input.new{fixed 5}
|
114
|
+
i.disabled?.should eql true
|
115
|
+
end
|
116
|
+
|
77
117
|
end
|
@@ -1,7 +1,15 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
|
+
|
2
3
|
describe OngoingCalculation do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@elec = CalculationSet.find("electricity")[:electricity]
|
7
|
+
@transport = CalculationSet.find("transport")[:transport]
|
8
|
+
@elec_and_transport = CalculationSet.find("electricity_and_transport")
|
9
|
+
end
|
10
|
+
|
3
11
|
it 'can return set and unset inputs' do
|
4
|
-
d
|
12
|
+
d=@elec.begin_calculation
|
5
13
|
d.inputs.set.labels.should eql [:country]
|
6
14
|
d.inputs.unset.labels.should eql [:energy_used]
|
7
15
|
d[:energy_used].value :somevalue
|
@@ -9,7 +17,7 @@ describe OngoingCalculation do
|
|
9
17
|
d.inputs.unset.labels.should eql []
|
10
18
|
end
|
11
19
|
it 'can return set and unset terms' do
|
12
|
-
d
|
20
|
+
d=@elec.begin_calculation
|
13
21
|
d.set.labels.should eql [:country]
|
14
22
|
d.unset.labels.should eql [:energy_used,:co2]
|
15
23
|
d[:energy_used].value :somevalue
|
@@ -17,19 +25,27 @@ describe OngoingCalculation do
|
|
17
25
|
d.unset.labels.should eql [:co2]
|
18
26
|
end
|
19
27
|
it 'can return set and unset outputs' do
|
20
|
-
d
|
28
|
+
d=@elec.begin_calculation
|
21
29
|
d.outputs.set.labels.should eql []
|
22
30
|
d.outputs.unset.labels.should eql [:co2]
|
23
31
|
d[:co2].value 5
|
24
32
|
d.outputs.set.labels.should eql [:co2]
|
25
33
|
d.outputs.unset.labels.should eql []
|
26
34
|
end
|
35
|
+
it 'can clear outputs' do
|
36
|
+
d=@elec.begin_calculation
|
37
|
+
d.outputs.unset.labels.should eql [:co2]
|
38
|
+
d[:co2].value 5
|
39
|
+
d[:co2].value.should eql 5
|
40
|
+
d.clear_outputs
|
41
|
+
d[:co2].value.should be_nil
|
42
|
+
end
|
27
43
|
it 'can have values chosen' do
|
28
44
|
AMEEMocker.new(self,:path=>'business/energy/electricity/grid',
|
29
45
|
:selections=>[['country','argentina']],
|
30
46
|
:choices=>[]).drill
|
31
47
|
|
32
|
-
d
|
48
|
+
d=@elec.begin_calculation
|
33
49
|
|
34
50
|
d.inputs.set.values.should eql ['argentina']
|
35
51
|
d.inputs.unset.values.should eql [nil]
|
@@ -43,7 +59,7 @@ describe OngoingCalculation do
|
|
43
59
|
AMEEMocker.new(self,:path=>'business/energy/electricity/grid',
|
44
60
|
:selections=>[['country','argentina']],
|
45
61
|
:choices=>[]).drill
|
46
|
-
d
|
62
|
+
d=@elec.begin_calculation
|
47
63
|
d.satisfied?.should be_false
|
48
64
|
d.choose!(:energy_used=>5.0)
|
49
65
|
d.satisfied?.should be_true
|
@@ -58,7 +74,7 @@ describe OngoingCalculation do
|
|
58
74
|
mocker.select('size'=>'large')
|
59
75
|
mocker.choices=[]
|
60
76
|
mocker.drill
|
61
|
-
t
|
77
|
+
t=@transport.begin_calculation
|
62
78
|
t.terms.labels.should eql [:fuel,:size,:distance,:co2]
|
63
79
|
t.satisfied?.should be_false
|
64
80
|
|
@@ -67,13 +83,13 @@ describe OngoingCalculation do
|
|
67
83
|
t.inputs.unset.labels.should eql [:size,:distance]
|
68
84
|
t.satisfied?.should be_false
|
69
85
|
|
70
|
-
t2
|
86
|
+
t2=@transport.begin_calculation
|
71
87
|
t2.choose!('fuel'=>'diesel','size'=>'large')
|
72
88
|
t2.inputs.set.labels.should eql [:fuel,:size]
|
73
89
|
t2.inputs.unset.labels.should eql [:distance]
|
74
90
|
t2.satisfied?.should be_false
|
75
91
|
|
76
|
-
t3
|
92
|
+
t3=@transport.begin_calculation
|
77
93
|
t3.choose!('fuel'=>'diesel','size'=>'large','distance'=>5)
|
78
94
|
t3.inputs.set.labels.should eql [:fuel,:size,:distance]
|
79
95
|
t3.inputs.unset.labels.should eql []
|
@@ -92,7 +108,7 @@ describe OngoingCalculation do
|
|
92
108
|
mocker.choices=[]
|
93
109
|
mocker.drill
|
94
110
|
mocker.profile_list.profile_category.timestamp.create_and_get
|
95
|
-
mycalc
|
111
|
+
mycalc=@transport.begin_calculation
|
96
112
|
mycalc.choose!('fuel'=>'diesel','size'=>'large','distance'=>5)
|
97
113
|
mycalc.calculate!
|
98
114
|
mycalc.outputs.first.value.should eql :somenumber
|
@@ -110,7 +126,7 @@ describe OngoingCalculation do
|
|
110
126
|
mocker.choices=[]
|
111
127
|
mocker.drill
|
112
128
|
mocker.profile_list.profile_category.timestamp.create_and_get
|
113
|
-
mycalc
|
129
|
+
mycalc=@elec_and_transport[:transport].begin_calculation
|
114
130
|
mycalc.choose!('fuel'=>'diesel','size'=>'large','distance'=>5,'department'=>'stuff')
|
115
131
|
mycalc.calculate!
|
116
132
|
mycalc.outputs.first.value.should eql :somenumber
|
@@ -134,7 +150,7 @@ describe OngoingCalculation do
|
|
134
150
|
#end
|
135
151
|
|
136
152
|
it 'can be supplied just a UID, and recover PIVs and drill values from AMEE' do
|
137
|
-
mycalc
|
153
|
+
mycalc=@transport.begin_calculation
|
138
154
|
mocker=AMEEMocker.new(self,:path=>'transport/car/generic',
|
139
155
|
:result=>:somenumber,
|
140
156
|
:existing=>{'distance'=>5},:choices=>['petrol','diesel'])
|
@@ -151,7 +167,7 @@ describe OngoingCalculation do
|
|
151
167
|
end
|
152
168
|
|
153
169
|
it 'refuses to load values from AMEE which conflict with local drill values' do
|
154
|
-
mycalc
|
170
|
+
mycalc=@transport.begin_calculation
|
155
171
|
mocker=AMEEMocker.new(self,:path=>'transport/car/generic',
|
156
172
|
:result=>:somenumber,
|
157
173
|
:existing=>{'distance'=>7},
|
@@ -187,7 +203,7 @@ describe OngoingCalculation do
|
|
187
203
|
mocker.choices=[]
|
188
204
|
mocker.drill
|
189
205
|
mocker.profile_list.update.get(true)
|
190
|
-
mycalc
|
206
|
+
mycalc=@transport.begin_calculation
|
191
207
|
mycalc.choose!(:profile_item_uid=>mocker.uid,'fuel'=>'diesel','size'=>'large','distance'=>9)
|
192
208
|
mycalc.calculate!
|
193
209
|
mycalc[:distance].value.should eql 9
|
@@ -211,7 +227,7 @@ describe OngoingCalculation do
|
|
211
227
|
mocker.params={'distance'=>9}
|
212
228
|
mocker.update.get(true)
|
213
229
|
|
214
|
-
mycalc
|
230
|
+
mycalc=@transport.begin_calculation
|
215
231
|
mycalc.choose!('fuel'=>'diesel','size'=>'large','distance'=>5)
|
216
232
|
mycalc.calculate!
|
217
233
|
mycalc.choose!('fuel'=>'diesel','size'=>'large','distance'=>9)
|
@@ -236,7 +252,7 @@ describe OngoingCalculation do
|
|
236
252
|
mocker.select('size'=>'small')
|
237
253
|
mocker.drill.create_and_get
|
238
254
|
|
239
|
-
mycalc
|
255
|
+
mycalc=@transport.begin_calculation
|
240
256
|
mycalc.choose!('fuel'=>'diesel','size'=>'large','distance'=>5)
|
241
257
|
mycalc.calculate!
|
242
258
|
mycalc.choose!('fuel'=>'diesel','size'=>'small')
|
@@ -245,7 +261,7 @@ describe OngoingCalculation do
|
|
245
261
|
end
|
246
262
|
|
247
263
|
it 'memoizes profile information, but not across a pass' do
|
248
|
-
mycalc
|
264
|
+
mycalc=@transport.begin_calculation
|
249
265
|
mocker=AMEEMocker.new(self,:path=>'transport/car/generic',
|
250
266
|
:result=>:somenumber,
|
251
267
|
:existing=>{'distance'=>5},:choices=>['petrol','diesel'])
|
@@ -277,7 +293,7 @@ describe OngoingCalculation do
|
|
277
293
|
mocker.choices=[]
|
278
294
|
mocker.drill
|
279
295
|
mocker.profile_list.profile_category.timestamp.create_and_get
|
280
|
-
myproto
|
296
|
+
myproto=@transport.clone
|
281
297
|
myproto.instance_eval{
|
282
298
|
start_and_end_dates
|
283
299
|
}
|
@@ -300,7 +316,7 @@ describe OngoingCalculation do
|
|
300
316
|
mocker.select('size'=>'large')
|
301
317
|
mocker.choices=[]
|
302
318
|
mocker.drill
|
303
|
-
myproto
|
319
|
+
myproto=@transport.clone
|
304
320
|
myproto.instance_eval{
|
305
321
|
start_and_end_dates
|
306
322
|
}
|
@@ -310,7 +326,7 @@ describe OngoingCalculation do
|
|
310
326
|
end
|
311
327
|
|
312
328
|
it 'starts off dirty' do
|
313
|
-
mycalc
|
329
|
+
mycalc=@transport.begin_calculation
|
314
330
|
mycalc.should be_dirty
|
315
331
|
end
|
316
332
|
|
@@ -327,7 +343,7 @@ describe OngoingCalculation do
|
|
327
343
|
mocker.choices=[]
|
328
344
|
mocker.drill
|
329
345
|
mocker.profile_list.profile_category.timestamp.create_and_get
|
330
|
-
mycalc
|
346
|
+
mycalc=@transport.begin_calculation
|
331
347
|
mycalc.should be_dirty
|
332
348
|
mycalc.choose!('fuel'=>'diesel','size'=>'large','distance'=>5)
|
333
349
|
mycalc.calculate!
|
@@ -349,7 +365,7 @@ describe OngoingCalculation do
|
|
349
365
|
mocker.choices=[]
|
350
366
|
mocker.drill
|
351
367
|
mocker.profile_list.profile_category.timestamp.create_and_get
|
352
|
-
mycalc
|
368
|
+
mycalc=@transport.begin_calculation
|
353
369
|
mycalc.should be_dirty
|
354
370
|
mycalc.choose!('fuel'=>'diesel','size'=>'large','distance'=>5)
|
355
371
|
mycalc.calculate!
|
@@ -372,7 +388,7 @@ describe OngoingCalculation do
|
|
372
388
|
mocker.select('size'=>'marge')
|
373
389
|
mocker.choices=[]
|
374
390
|
mocker.drill
|
375
|
-
mycalc
|
391
|
+
mycalc=@transport.begin_calculation
|
376
392
|
lambda{mycalc.choose!('fuel'=>'diesel','size'=>'marge','distance'=>5)}.should raise_error Exceptions::ChoiceValidation
|
377
393
|
mycalc.invalidity_messages.keys.should eql [:size]
|
378
394
|
end
|
@@ -389,7 +405,7 @@ describe OngoingCalculation do
|
|
389
405
|
mocker.select('size'=>'marge')
|
390
406
|
mocker.choices=[]
|
391
407
|
mocker.drill
|
392
|
-
mycalc
|
408
|
+
mycalc=@transport.begin_calculation
|
393
409
|
mycalc.choose('fuel'=>'diesel','size'=>'marge','distance'=>5).should be_false
|
394
410
|
mycalc.invalidity_messages.keys.should eql [:size]
|
395
411
|
end
|
@@ -406,12 +422,12 @@ describe OngoingCalculation do
|
|
406
422
|
mocker.select('size'=>'large')
|
407
423
|
mocker.choices=[]
|
408
424
|
mocker.drill
|
409
|
-
mycalc
|
425
|
+
mycalc=@transport.begin_calculation
|
410
426
|
mycalc.choose('fuel'=>'diesel','size'=>'large','distance'=>5).should be_true
|
411
427
|
end
|
412
428
|
|
413
429
|
it 'can blank individual term attributes with empty string' do
|
414
|
-
myproto
|
430
|
+
myproto=@transport.clone
|
415
431
|
mycalc=myproto.begin_calculation
|
416
432
|
mycalc.choose_without_validation!('fuel'=>'diesel','size'=>'large','distance'=>{:value =>5, :unit=> Unit.km})
|
417
433
|
mycalc['fuel'].value.should eql 'diesel'
|
@@ -426,7 +442,7 @@ describe OngoingCalculation do
|
|
426
442
|
end
|
427
443
|
|
428
444
|
it 'can blank individual term attributes with nil' do
|
429
|
-
myproto
|
445
|
+
myproto=@transport.clone
|
430
446
|
mycalc=myproto.begin_calculation
|
431
447
|
mycalc.choose_without_validation!('fuel'=>'diesel','size'=>'large','distance'=>{:value =>5, :unit=> Unit.km})
|
432
448
|
mycalc['fuel'].value.should eql 'diesel'
|
@@ -441,7 +457,7 @@ describe OngoingCalculation do
|
|
441
457
|
end
|
442
458
|
|
443
459
|
it 'can update individual term attributes without nullifying others' do
|
444
|
-
myproto
|
460
|
+
myproto=@transport.clone
|
445
461
|
mycalc=myproto.begin_calculation
|
446
462
|
mycalc.choose_without_validation!('fuel'=>'diesel','size'=>'large','distance'=>{:value =>5, :unit=> Unit.km})
|
447
463
|
mycalc['fuel'].value.should eql 'diesel'
|
@@ -482,7 +498,7 @@ describe OngoingCalculation do
|
|
482
498
|
mocker.select('size'=>'marge')
|
483
499
|
mocker.choices=[]
|
484
500
|
mocker.drill
|
485
|
-
mycalc
|
501
|
+
mycalc=@transport.begin_calculation
|
486
502
|
mycalc.choose('fuel'=>'diesel','size'=>'marge','distance'=>5).should be_false
|
487
503
|
mycalc.invalidity_messages.keys.should eql [:size]
|
488
504
|
mycalc[:size].value.should eql 'marge'
|