amee 2.6.0 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/Gemfile +18 -0
  2. data/README +2 -2
  3. data/Rakefile +31 -0
  4. data/VERSION +1 -0
  5. data/amee-ruby.gemspec +147 -0
  6. data/examples/view_profile_item.rb +32 -0
  7. data/lib/amee.rb +0 -1
  8. data/lib/amee/profile_item.rb +27 -6
  9. data/spec/amee_spec.rb +25 -0
  10. data/spec/cache_spec.rb +152 -0
  11. data/spec/connection_spec.rb +295 -0
  12. data/spec/data_category_spec.rb +259 -0
  13. data/spec/data_item_spec.rb +224 -0
  14. data/spec/data_item_value_history_spec.rb +311 -0
  15. data/spec/data_item_value_spec.rb +231 -0
  16. data/spec/data_object_spec.rb +9 -0
  17. data/spec/drill_down_spec.rb +163 -0
  18. data/spec/fixtures/AD63A83B4D41.json +1 -0
  19. data/spec/fixtures/AD63A83B4D41.xml +1 -0
  20. data/spec/fixtures/create_item.json +1 -0
  21. data/spec/fixtures/create_item.xml +1 -0
  22. data/spec/fixtures/data.json +1 -0
  23. data/spec/fixtures/data.xml +1 -0
  24. data/spec/fixtures/data_home_energy_quantity.xml +146 -0
  25. data/spec/fixtures/data_home_energy_quantity_biodiesel.xml +177 -0
  26. data/spec/fixtures/data_transport_car_generic_drill_fuel_diesel.xml +33 -0
  27. data/spec/fixtures/empty.json +1 -0
  28. data/spec/fixtures/empty.xml +1 -0
  29. data/spec/fixtures/parse_test.xml +22 -0
  30. data/spec/fixtures/v0_data_transport_transport_drill_transportType_Car1.xml +20 -0
  31. data/spec/item_definition_spec.rb +313 -0
  32. data/spec/item_value_definition_spec.rb +253 -0
  33. data/spec/logger_spec.rb +16 -0
  34. data/spec/object_spec.rb +44 -0
  35. data/spec/parse_helper_spec.rb +72 -0
  36. data/spec/profile_category_spec.rb +565 -0
  37. data/spec/profile_item_spec.rb +451 -0
  38. data/spec/profile_item_value_spec.rb +196 -0
  39. data/spec/profile_object_spec.rb +24 -0
  40. data/spec/profile_spec.rb +88 -0
  41. data/spec/rails_spec.rb +48 -0
  42. data/spec/spec.opts +2 -0
  43. data/spec/spec_helper.rb +56 -0
  44. data/spec/user_spec.rb +249 -0
  45. metadata +189 -55
  46. data/lib/amee/version.rb +0 -10
@@ -0,0 +1,177 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <Resources xmlns="http://schemas.amee.cc/2.0">
3
+ <DataItemResource>
4
+ <DataItem created="2007-07-27 09:49:32.0" modified="2009-09-15 15:06:12.0" uid="878854C275BC">
5
+ <Name>878854C275BC</Name>
6
+ <ItemValues>
7
+ <ItemValue uid="7071F0E96196">
8
+ <Path>kgCO2PerKg</Path>
9
+ <Name>kgCO2 Per Kg</Name>
10
+ <Value/>
11
+ <Unit/>
12
+ <PerUnit/>
13
+ <StartDate>1969-12-31T19:00:00-05:00</StartDate>
14
+ <ItemValueDefinition uid="B5AC731EF1D5">
15
+ <Path>kgCO2PerKg</Path>
16
+ <Name>kgCO2 Per Kg</Name>
17
+ <ValueDefinition created="2007-07-27 08:30:44.0" modified="2007-07-27 08:30:44.0" uid="F066E097D76D">
18
+ <Name>kgCO2PerKg</Name>
19
+ <ValueType>DECIMAL</ValueType>
20
+ <Description/>
21
+ <Environment uid="5F5887BCF726"/>
22
+ </ValueDefinition>
23
+ <FromProfile>false</FromProfile>
24
+ <FromData>true</FromData>
25
+ <DrillDown>false</DrillDown>
26
+ </ItemValueDefinition>
27
+ </ItemValue>
28
+ <ItemValue uid="015D3ACF02BD">
29
+ <Path>source</Path>
30
+ <Name>Source</Name>
31
+ <Value>net CV RME-type Wells to wheels/European Commission/JRC 2006 http://ies.jrc.ec.europa.eu/our-activities/support-to-eu-policies/well-to-wheels-analysis/WTW.html</Value>
32
+ <Unit/>
33
+ <PerUnit/>
34
+ <StartDate>1969-12-31T19:00:00-05:00</StartDate>
35
+ <ItemValueDefinition uid="75DE0251B056">
36
+ <Path>source</Path>
37
+ <Name>Source</Name>
38
+ <ValueDefinition created="2007-07-27 08:30:44.0" modified="2007-07-27 08:30:44.0" uid="CCEB59CACE1B">
39
+ <Name>text</Name>
40
+ <ValueType>TEXT</ValueType>
41
+ <Description/>
42
+ <Environment uid="5F5887BCF726"/>
43
+ </ValueDefinition>
44
+ <FromProfile>false</FromProfile>
45
+ <FromData>true</FromData>
46
+ <DrillDown>false</DrillDown>
47
+ </ItemValueDefinition>
48
+ </ItemValue>
49
+ <ItemValue uid="1DFEF8E6D7E5">
50
+ <Path>kgCO2PerKWh</Path>
51
+ <Name>kgCO2 Per KWh</Name>
52
+ <Value/>
53
+ <Unit/>
54
+ <PerUnit/>
55
+ <StartDate>1969-12-31T19:00:00-05:00</StartDate>
56
+ <ItemValueDefinition uid="469C1AE4B79A">
57
+ <Path>kgCO2PerKWh</Path>
58
+ <Name>kgCO2 Per KWh</Name>
59
+ <ValueDefinition created="2007-07-27 08:30:44.0" modified="2007-07-27 08:30:44.0" uid="3EA39C552E81">
60
+ <Name>kgCO2PerKWh</Name>
61
+ <ValueType>DECIMAL</ValueType>
62
+ <Description/>
63
+ <Environment uid="5F5887BCF726"/>
64
+ </ValueDefinition>
65
+ <FromProfile>false</FromProfile>
66
+ <FromData>true</FromData>
67
+ <DrillDown>false</DrillDown>
68
+ </ItemValueDefinition>
69
+ </ItemValue>
70
+ <ItemValue uid="219EE9D836E0">
71
+ <Path>kgCO2PerLitre</Path>
72
+ <Name>kgCO2 Per Litre</Name>
73
+ <Value>2.5000</Value>
74
+ <Unit/>
75
+ <PerUnit/>
76
+ <StartDate>1969-12-31T19:00:00-05:00</StartDate>
77
+ <ItemValueDefinition uid="EAFBD1CA93E8">
78
+ <Path>kgCO2PerLitre</Path>
79
+ <Name>kgCO2 Per Litre</Name>
80
+ <ValueDefinition created="2007-07-27 08:30:44.0" modified="2007-07-27 08:30:44.0" uid="C809A0FE1918">
81
+ <Name>kgCO2PerLitre</Name>
82
+ <ValueType>DECIMAL</ValueType>
83
+ <Description/>
84
+ <Environment uid="5F5887BCF726"/>
85
+ </ValueDefinition>
86
+ <FromProfile>false</FromProfile>
87
+ <FromData>true</FromData>
88
+ <DrillDown>false</DrillDown>
89
+ </ItemValueDefinition>
90
+ </ItemValue>
91
+ <ItemValue uid="5A46861E475C">
92
+ <Path>type</Path>
93
+ <Name>Type</Name>
94
+ <Value>biodiesel</Value>
95
+ <Unit/>
96
+ <PerUnit/>
97
+ <StartDate>1969-12-31T19:00:00-05:00</StartDate>
98
+ <ItemValueDefinition uid="5DF1F01B2106">
99
+ <Path>type</Path>
100
+ <Name>Type</Name>
101
+ <ValueDefinition created="2007-07-27 08:30:44.0" modified="2007-07-27 08:30:44.0" uid="CCEB59CACE1B">
102
+ <Name>text</Name>
103
+ <ValueType>TEXT</ValueType>
104
+ <Description/>
105
+ <Environment uid="5F5887BCF726"/>
106
+ </ValueDefinition>
107
+ <FromProfile>false</FromProfile>
108
+ <FromData>true</FromData>
109
+ <DrillDown>true</DrillDown>
110
+ </ItemValueDefinition>
111
+ </ItemValue>
112
+ </ItemValues>
113
+ <Environment uid="5F5887BCF726"/>
114
+ <ItemDefinition uid="212C818D8F16"/>
115
+ <DataCategory uid="A92693A99BAD">
116
+ <Name>Quantity</Name>
117
+ <Path>quantity</Path>
118
+ <Deprecated>false</Deprecated>
119
+ </DataCategory>
120
+ <Path>878854C275BC</Path>
121
+ <Label>biodiesel</Label>
122
+ <StartDate>1969-12-31T19:00:00-05:00</StartDate>
123
+ <EndDate/>
124
+ </DataItem>
125
+ <Path>/home/energy/quantity/878854C275BC</Path>
126
+ <Choices>
127
+ <Name>userValueChoices</Name>
128
+ <Choices>
129
+ <Choice>
130
+ <Name>deliveries</Name>
131
+ <Value/>
132
+ </Choice>
133
+ <Choice>
134
+ <Name>greenTariff</Name>
135
+ <Value/>
136
+ </Choice>
137
+ <Choice>
138
+ <Name>lastReading</Name>
139
+ <Value>0</Value>
140
+ </Choice>
141
+ <Choice>
142
+ <Name>currentReading</Name>
143
+ <Value>0</Value>
144
+ </Choice>
145
+ <Choice>
146
+ <Name>includesHeating</Name>
147
+ <Value>false</Value>
148
+ </Choice>
149
+ <Choice>
150
+ <Name>massPerTime</Name>
151
+ <Value>0</Value>
152
+ </Choice>
153
+ <Choice>
154
+ <Name>volumePerTime</Name>
155
+ <Value>0</Value>
156
+ </Choice>
157
+ <Choice>
158
+ <Name>energyConsumption</Name>
159
+ <Value>0</Value>
160
+ </Choice>
161
+ <Choice>
162
+ <Name>season</Name>
163
+ <Value/>
164
+ </Choice>
165
+ <Choice>
166
+ <Name>paymentFrequency</Name>
167
+ <Value/>
168
+ </Choice>
169
+ </Choices>
170
+ </Choices>
171
+ <AmountPerMonth>0.0</AmountPerMonth>
172
+ <Amount unit="kg/year">0.0</Amount>
173
+ <Amounts>
174
+ <Amount default="true" perUnit="year" type="CO2" unit="kg">0.0</Amount>
175
+ </Amounts>
176
+ </DataItemResource>
177
+ </Resources>
@@ -0,0 +1,33 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Resources>
3
+ <DrillDownResource>
4
+ <DataCategory uid="87E55DA88017">
5
+ <Name>Generic</Name>
6
+ <Path>generic</Path>
7
+ </DataCategory>
8
+ <ItemDefinition uid="123C4A18B5D6"/>
9
+ <Selections>
10
+ <Choice>
11
+ <Name>fuel</Name>
12
+ <Value>diesel</Value>
13
+ </Choice>
14
+ </Selections>
15
+ <Choices>
16
+ <Name>size</Name>
17
+ <Choices>
18
+ <Choice>
19
+ <Name>large</Name>
20
+ <Value>large</Value>
21
+ </Choice>
22
+ <Choice>
23
+ <Name>medium</Name>
24
+ <Value>medium</Value>
25
+ </Choice>
26
+ <Choice>
27
+ <Name>small</Name>
28
+ <Value>small</Value>
29
+ </Choice>
30
+ </Choices>
31
+ </Choices>
32
+ </DrillDownResource>
33
+ </Resources>
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><Resources></Resources>
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <root>
3
+ <attrib_test attrib='attribute_value' empty_attrib=''/>
4
+ <content_test>content</content_test>
5
+ <whitespace_content_test>
6
+ </whitespace_content_test>
7
+ <empty_content_test></empty_content_test>
8
+ <self_closing_content_test/>
9
+ <multi_attrib_test>
10
+ <attrib_test attrib='attribute_value'/>
11
+ <attrib_test attrib='attribute_value_1'/>
12
+ <attrib_test attrib=''/>
13
+ <attrib_test/>
14
+ </multi_attrib_test>
15
+ <multi_content_test>
16
+ <content>content</content>
17
+ <content>
18
+ </content>
19
+ <content></content>
20
+ <content/>
21
+ </multi_content_test>
22
+ </root>
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Resources>
3
+ <DrillDownResource>
4
+ <DataCategory uid="CD13B9174A6A"/>
5
+ <ItemDefinition uid="7CD0FC1D3B36"/>
6
+ <Selections>
7
+ <Choice>
8
+ <name>transportType</name>
9
+ <value>Car1</value>
10
+ </Choice>
11
+ </Selections>
12
+ <Choices>
13
+ <name>transportStyle</name>
14
+ <Choice>
15
+ <name>-</name>
16
+ <value>-</value>
17
+ </Choice>
18
+ </Choices>
19
+ </DrillDownResource>
20
+ </Resources>
@@ -0,0 +1,313 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe AMEE::Admin::ItemDefinition do
4
+
5
+ before(:each) do
6
+ @item_definition = AMEE::Admin::ItemDefinition.new
7
+ end
8
+
9
+ it "should have common AMEE object properties" do
10
+ @item_definition.is_a?(AMEE::Object).should be_true
11
+ end
12
+
13
+ it "should have a name" do
14
+ @item_definition.should respond_to(:name)
15
+ end
16
+
17
+ it "should initialize AMEE::Object data on creation" do
18
+ uid = 'ABCD1234'
19
+ @item_definition = AMEE::Admin::ItemDefinition.new(:uid => uid)
20
+ @item_definition.uid.should == uid
21
+ end
22
+
23
+ it "can be created with hash of data" do
24
+ name = "test"
25
+ @item_definition = AMEE::Admin::ItemDefinition.new(:name => name)
26
+ @item_definition.name.should == name
27
+ end
28
+
29
+ end
30
+
31
+ describe AMEE::Admin::ItemDefinition, "with an authenticated connection" do
32
+
33
+ it "should parse XML correctly" do
34
+ connection = flexmock "connection"
35
+ connection.should_receive(:get).with("/definitions/itemDefinitions/BD88D30D1214", {}).and_return(flexmock(:body => '<?xml version="1.0" encoding="UTF-8" standalone="no"?><Resources><ItemDefinitionResource><ItemDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="BD88D30D1214"><Name>Bus Generic</Name><DrillDown>type</DrillDown><Environment uid="5F5887BCF726"/></ItemDefinition></ItemDefinitionResource></Resources>'))
36
+ @data = AMEE::Admin::ItemDefinition.load(connection,"BD88D30D1214")
37
+ @data.uid.should == "BD88D30D1214"
38
+ @data.created.should == DateTime.new(2007,7,27,9,30,44)
39
+ @data.modified.should == DateTime.new(2007,7,27,9,30,44)
40
+ @data.name.should == "Bus Generic"
41
+ @data.drill_downs.should == ["type"]
42
+ @data.full_path.should == '/definitions/itemDefinitions/BD88D30D1214'
43
+ end
44
+
45
+ it "should parse JSON correctly" do
46
+ connection = flexmock "connection"
47
+ connection.should_receive(:get).with("/definitions/itemDefinitions/BD88D30D1214", {}).and_return(flexmock(:body => '{"itemDefinition":{"uid":"BD88D30D1214","environment":{"uid":"5F5887BCF726"},"created":"2007-07-27 09:30:44.0","name":"Bus Generic","drillDown":"type","modified":"2007-07-27 09:30:44.0"}}'))
48
+ @data = AMEE::Admin::ItemDefinition.load(connection,"BD88D30D1214")
49
+ @data.uid.should == "BD88D30D1214"
50
+ @data.created.should == DateTime.new(2007,7,27,9,30,44)
51
+ @data.modified.should == DateTime.new(2007,7,27,9,30,44)
52
+ @data.name.should == "Bus Generic"
53
+ @data.drill_downs.should == ["type"]
54
+ @data.full_path.should == '/definitions/itemDefinitions/BD88D30D1214'
55
+ end
56
+
57
+ it "should be able to load an item value definition list" do
58
+ connection = flexmock "connection"
59
+ connection.should_receive(:get).with("/definitions/itemDefinitions/BD88D30D1214", {}).and_return(flexmock(:body => '<?xml version="1.0" encoding="UTF-8" standalone="no"?><Resources><ItemDefinitionResource><ItemDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="BD88D30D1214"><Name>Bus Generic</Name><DrillDown>type</DrillDown><Environment uid="5F5887BCF726"/></ItemDefinition></ItemDefinitionResource></Resources>'))
60
+ connection.should_receive(:retries).and_return(0).once
61
+ connection.should_receive(:get).with("/definitions/itemDefinitions/BD88D30D1214/itemValueDefinitions", {}).and_return(flexmock(:body => '<?xml version="1.0" encoding="UTF-8" standalone="no"?><Resources><ItemValueDefinitionsResource><Environment uid="5F5887BCF726"/><ItemDefinition uid="BD88D30D1214"/><ItemValueDefinitions><ItemValueDefinition uid="A8A212610A57"><Path>distancePerJourney</Path><Name>Distance per journey</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="45433E48B39F"><Name>amount</Name><ValueType>DECIMAL</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><Unit>km</Unit><FromProfile>true</FromProfile><FromData>false</FromData><DrillDown>false</DrillDown></ItemValueDefinition><ItemValueDefinition uid="D2AB505D2D91"><Path>type</Path><Name>Type</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="CCEB59CACE1B"><Name>text</Name><ValueType>TEXT</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><FromProfile>false</FromProfile><FromData>true</FromData><DrillDown>true</DrillDown></ItemValueDefinition><ItemValueDefinition uid="41EC337E5C79"><Path>numberOfJourneys</Path><Name>Number of journeys</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="45433E48B39F"><Name>amount</Name><ValueType>DECIMAL</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><FromProfile>true</FromProfile><FromData>false</FromData><DrillDown>false</DrillDown></ItemValueDefinition><ItemValueDefinition uid="9BAFC976044B"><Path>source</Path><Name>Source</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="CCEB59CACE1B"><Name>text</Name><ValueType>TEXT</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><FromProfile>false</FromProfile><FromData>true</FromData><DrillDown>false</DrillDown></ItemValueDefinition><ItemValueDefinition uid="9813267B616E"><Path>country</Path><Name>Country</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="CCEB59CACE1B"><Name>text</Name><ValueType>TEXT</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><FromProfile>true</FromProfile><FromData>false</FromData><DrillDown>false</DrillDown></ItemValueDefinition><ItemValueDefinition uid="263DE76AF8AA"><Path>kgCO2PerPassengerKmIE</Path><Name>kgCO2 Per Passenger Km IE</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="996AE5477B3F"><Name>kgCO2PerKm</Name><ValueType>DECIMAL</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><FromProfile>false</FromProfile><FromData>true</FromData><DrillDown>false</DrillDown></ItemValueDefinition><ItemValueDefinition uid="F5550D71085F"><Path>kgCO2PerKmPassenger</Path><Name>kgCO2 Per Passenger Km</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="996AE5477B3F"><Name>kgCO2PerKm</Name><ValueType>DECIMAL</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><FromProfile>false</FromProfile><FromData>true</FromData><DrillDown>false</DrillDown></ItemValueDefinition><ItemValueDefinition uid="FE166C7602BB"><Path>typicalJourneyDistance</Path><Name>Typical journey distance</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="45433E48B39F"><Name>amount</Name><ValueType>DECIMAL</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><FromProfile>false</FromProfile><FromData>true</FromData><DrillDown>false</DrillDown></ItemValueDefinition><ItemValueDefinition uid="2F76AB4E3C0F"><Path>journeyFrequency</Path><Name>Journey frequency</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="CCEB59CACE1B"><Name>text</Name><ValueType>TEXT</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><FromProfile>true</FromProfile><FromData>false</FromData><DrillDown>false</DrillDown></ItemValueDefinition><ItemValueDefinition uid="B0F02E544603"><Path>numberOfPassengers</Path><Name>Number of passengers</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="45433E48B39F"><Name>amount</Name><ValueType>DECIMAL</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><FromProfile>true</FromProfile><FromData>false</FromData><DrillDown>false</DrillDown></ItemValueDefinition><ItemValueDefinition uid="28D0B8C4F52A"><Path>useTypicalDistance</Path><Name>Use typical distance</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="CCEB59CACE1B"><Name>text</Name><ValueType>TEXT</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><FromProfile>true</FromProfile><FromData>false</FromData><DrillDown>false</DrillDown></ItemValueDefinition><ItemValueDefinition uid="6334117D28A0"><Path>distanceKmPerMonth</Path><Name>Distance Km Per Month</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="B691497F1CF2"><Name>kM</Name><ValueType>DECIMAL</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><Unit>km</Unit><PerUnit>month</PerUnit><FromProfile>true</FromProfile><FromData>false</FromData><DrillDown>false</DrillDown></ItemValueDefinition><ItemValueDefinition uid="98EA75911467"><Path>distancePerJourney</Path><Name>Distance per journey</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="45433E48B39F"><Name>amount</Name><ValueType>DECIMAL</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><Unit>km</Unit><FromProfile>true</FromProfile><FromData>false</FromData><DrillDown>false</DrillDown></ItemValueDefinition><ItemValueDefinition uid="584BEA802996"><Path>isReturn</Path><Name>Is return</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="CCEB59CACE1B"><Name>text</Name><ValueType>TEXT</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><FromProfile>true</FromProfile><FromData>false</FromData><DrillDown>false</DrillDown></ItemValueDefinition><ItemValueDefinition uid="6CBF739E12F0"><Path>distance</Path><Name>Distance</Name><ValueDefinition created="2007-07-27 09:30:44.0" modified="2007-07-27 09:30:44.0" uid="45433E48B39F"><Name>amount</Name><ValueType>DECIMAL</ValueType><Description/><Environment uid="5F5887BCF726"/></ValueDefinition><Unit>km</Unit><PerUnit>year</PerUnit><FromProfile>true</FromProfile><FromData>false</FromData><DrillDown>false</DrillDown></ItemValueDefinition></ItemValueDefinitions></ItemValueDefinitionsResource></Resources>')).once
62
+ @data = AMEE::Admin::ItemDefinition.load(connection,"BD88D30D1214")
63
+ @data.uid.should == "BD88D30D1214"
64
+ @list=@data.item_value_definition_list
65
+ @list.length.should==15
66
+ @list.first.uid.should=='A8A212610A57'
67
+ end
68
+
69
+ it "should fail gracefully with incorrect data" do
70
+ connection = flexmock "connection"
71
+ xml = '<?xml version="1.0" encoding="UTF-8"?><Resources></Resources>'
72
+ connection.should_receive(:get).with("/admin", {}).and_return(flexmock(:body => xml))
73
+ lambda{AMEE::Admin::ItemDefinition.get(connection, "/admin")}.should raise_error(AMEE::BadData)
74
+ end
75
+
76
+ it "should fail gracefully with incorrect JSON data" do
77
+ connection = flexmock "connection"
78
+ json = '{}'
79
+ connection.should_receive(:get).with("/admin", {}).and_return(flexmock(:body => json))
80
+ lambda{AMEE::Admin::ItemDefinition.get(connection, "/admin")}.should raise_error(AMEE::BadData)
81
+ end
82
+
83
+ it "should fail gracefully on other errors" do
84
+ connection = flexmock "connection"
85
+ connection.should_receive(:get).with("/admin", {}).and_raise("unidentified error")
86
+ lambda{AMEE::Admin::ItemDefinition.get(connection, "/admin")}.should raise_error(AMEE::BadData)
87
+ end
88
+
89
+ end
90
+
91
+ DefinitionsListResponse=<<HERE
92
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
93
+ <Resources>
94
+ <ItemDefinitionsResource>
95
+ <ItemDefinitions>
96
+ <ItemDefinition uid="2169991DE821">
97
+ <Name>AAA Car Generic</Name>
98
+ <DrillDown>fuel,size</DrillDown>
99
+ </ItemDefinition>
100
+ <ItemDefinition uid="18CB59F9EC2D">
101
+ <Name>AAA Units test</Name>
102
+ <DrillDown>type</DrillDown>
103
+ </ItemDefinition>
104
+ <ItemDefinition uid="76C56F7DF49A">
105
+ <Name>AAAA1234Test</Name>
106
+ <DrillDown/>
107
+ </ItemDefinition>
108
+ <ItemDefinition uid="CF344E20E9AC">
109
+ <Name>AAATipTest</Name>
110
+ <DrillDown>question</DrillDown>
111
+ </ItemDefinition>
112
+ <ItemDefinition uid="70BCD634D0A4">
113
+ <Name>ActOnCO2 Action</Name>
114
+ <DrillDown>type</DrillDown></ItemDefinition>
115
+ <ItemDefinition uid="62058B6FD778">
116
+ <Name>ActOnCO2 Metadata</Name>
117
+ <DrillDown>type</DrillDown>
118
+ </ItemDefinition>
119
+ <ItemDefinition uid="D3351CDC11C8">
120
+ <Name>ADigTest</Name>
121
+ <DrillDown/></ItemDefinition>
122
+ <ItemDefinition uid="A02807E44CA3">
123
+ <Name>Adipic Acid N2O emissions</Name>
124
+ <DrillDown>abatementTechnology</DrillDown>
125
+ </ItemDefinition>
126
+ <ItemDefinition uid="B910141B00DB">
127
+ <Name>AJC ID TEST</Name>
128
+ <DrillDown>type</DrillDown>
129
+ </ItemDefinition>
130
+ <ItemDefinition uid="4660BD4FCF97">
131
+ <Name>Aluminium Production: Alternative (no anode data)</Name>
132
+ <DrillDown>type</DrillDown>
133
+ </ItemDefinition></ItemDefinitions>
134
+ <Pager>
135
+ <Start>0</Start>
136
+ <From>1</From>
137
+ <To>10</To>
138
+ <Items>10</Items>
139
+ <CurrentPage>1</CurrentPage>
140
+ <RequestedPage>1</RequestedPage>
141
+ <NextPage>-1</NextPage>
142
+ <PreviousPage>-1</PreviousPage>
143
+ <LastPage>1</LastPage>
144
+ <ItemsPerPage>10</ItemsPerPage>
145
+ <ItemsFound>10</ItemsFound>
146
+ </Pager>
147
+ </ItemDefinitionsResource>
148
+ </Resources>
149
+ HERE
150
+
151
+ DefinitionsListResponsePage1=<<HERE
152
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
153
+ <Resources>
154
+ <ItemDefinitionsResource>
155
+ <ItemDefinitions>
156
+ <ItemDefinition uid="2169991DE821">
157
+ <Name>AAA Car Generic</Name>
158
+ <DrillDown>fuel,size</DrillDown>
159
+ </ItemDefinition>
160
+ <ItemDefinition uid="18CB59F9EC2D">
161
+ <Name>AAA Units test</Name>
162
+ <DrillDown>type</DrillDown>
163
+ </ItemDefinition>
164
+ <ItemDefinition uid="76C56F7DF49A">
165
+ <Name>AAAA1234Test</Name>
166
+ <DrillDown/>
167
+ </ItemDefinition>
168
+ <ItemDefinition uid="CF344E20E9AC">
169
+ <Name>AAATipTest</Name>
170
+ <DrillDown>question</DrillDown>
171
+ </ItemDefinition></ItemDefinitions>
172
+ <Pager>
173
+ <Start>0</Start>
174
+ <From>1</From>
175
+ <To>4</To>
176
+ <Items>10</Items>
177
+ <CurrentPage>1</CurrentPage>
178
+ <RequestedPage>1</RequestedPage>
179
+ <NextPage>2</NextPage>
180
+ <PreviousPage>-1</PreviousPage>
181
+ <LastPage>3</LastPage>
182
+ <ItemsPerPage>4</ItemsPerPage>
183
+ <ItemsFound>4</ItemsFound>
184
+ </Pager>
185
+ </ItemDefinitionsResource>
186
+ </Resources>
187
+ HERE
188
+ DefinitionsListResponsePage2=<<HERE
189
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
190
+ <Resources>
191
+ <ItemDefinitionsResource>
192
+ <ItemDefinitions>
193
+ <ItemDefinition uid="70BCD634D0A4">
194
+ <Name>ActOnCO2 Action</Name>
195
+ <DrillDown>type</DrillDown></ItemDefinition>
196
+ <ItemDefinition uid="62058B6FD778">
197
+ <Name>ActOnCO2 Metadata</Name>
198
+ <DrillDown>type</DrillDown>
199
+ </ItemDefinition>
200
+ <ItemDefinition uid="D3351CDC11C8">
201
+ <Name>ADigTest</Name>
202
+ <DrillDown/></ItemDefinition>
203
+ <ItemDefinition uid="A02807E44CA3">
204
+ <Name>Adipic Acid N2O emissions</Name>
205
+ <DrillDown>abatementTechnology</DrillDown>
206
+ </ItemDefinition></ItemDefinitions>
207
+ <Pager>
208
+ <Start>4</Start>
209
+ <From>5</From>
210
+ <To>8</To>
211
+ <Items>10</Items>
212
+ <CurrentPage>2</CurrentPage>
213
+ <RequestedPage>2</RequestedPage>
214
+ <NextPage>3</NextPage>
215
+ <PreviousPage>1</PreviousPage>
216
+ <LastPage>3</LastPage>
217
+ <ItemsPerPage>4</ItemsPerPage>
218
+ <ItemsFound>4</ItemsFound>
219
+ </Pager>
220
+ </ItemDefinitionsResource>
221
+ </Resources>
222
+ HERE
223
+ DefinitionsListResponsePage3=<<HERE
224
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
225
+ <Resources>
226
+ <ItemDefinitionsResource>
227
+ <ItemDefinitions>
228
+ <ItemDefinition uid="B910141B00DB">
229
+ <Name>AJC ID TEST</Name>
230
+ <DrillDown>type</DrillDown>
231
+ </ItemDefinition>
232
+ <ItemDefinition uid="4660BD4FCF97">
233
+ <Name>Aluminium Production: Alternative (no anode data)</Name>
234
+ <DrillDown>type</DrillDown>
235
+ </ItemDefinition>
236
+ </ItemDefinitions>
237
+ <Pager>
238
+ <Start>8</Start>
239
+ <From>9</From>
240
+ <To>10</To>
241
+ <Items>10</Items>
242
+ <CurrentPage>3</CurrentPage>
243
+ <RequestedPage>3</RequestedPage>
244
+ <NextPage>-1</NextPage>
245
+ <PreviousPage>2</PreviousPage>
246
+ <LastPage>3</LastPage>
247
+ <ItemsPerPage>4</ItemsPerPage>
248
+ <ItemsFound>2</ItemsFound>
249
+ </Pager>
250
+ </ItemDefinitionsResource>
251
+ </Resources>
252
+ HERE
253
+
254
+ describe AMEE::Admin::ItemDefinitionList do
255
+ it "Should parse a single page" do
256
+ connection = flexmock "connection"
257
+ connection.should_receive(:retries).and_return(0).once
258
+ connection.should_receive(:get).with("/definitions/itemDefinitions",{}).once.
259
+ and_return flexmock(:body =>DefinitionsListResponse)
260
+ @list=AMEE::Admin::ItemDefinitionList.new(connection)
261
+ @list.first.should be_a AMEE::Admin::ItemDefinition
262
+ @list.first.uid.should == "2169991DE821"
263
+ @list.first.name.should == "AAA Car Generic"
264
+ @list.size.should==10
265
+ end
266
+
267
+ it "Should retry on parse failures" do
268
+ connection = flexmock "connection"
269
+ connection.should_receive(:retries).and_return(2).once
270
+ connection.should_receive(:get).with("/definitions/itemDefinitions",{}).twice.
271
+ and_return flexmock(:body =>DefinitionsListResponse.first(12))
272
+ connection.should_receive(:expire).with("/definitions/itemDefinitions").times(2)
273
+ connection.should_receive(:get).with("/definitions/itemDefinitions",{}).once.
274
+ and_return flexmock(:body =>DefinitionsListResponse)
275
+ @list=AMEE::Admin::ItemDefinitionList.new(connection)
276
+ @list.first.should be_a AMEE::Admin::ItemDefinition
277
+ @list.first.uid.should == "2169991DE821"
278
+ @list.first.name.should == "AAA Car Generic"
279
+ @list.size.should==10
280
+ end
281
+
282
+ it "Should retry on parse failures and bubble up failure if never successful" do
283
+ connection = flexmock "connection"
284
+ connection.should_receive(:retries).and_return(2).once
285
+ connection.should_receive(:get).with("/definitions/itemDefinitions",{}).times(3).
286
+ and_return flexmock(:body =>DefinitionsListResponse.first(12))
287
+ connection.should_receive(:expire).with("/definitions/itemDefinitions").times(3)
288
+ lambda {
289
+ AMEE::Admin::ItemDefinitionList.new(connection)
290
+ }.should raise_error(Nokogiri::XML::SyntaxError)
291
+ end
292
+ it "Should parse multiple pages" do
293
+ connection = flexmock "connection"
294
+ connection.should_receive(:retries).and_return(0).times(3)
295
+ connection.should_receive(:get).with("/definitions/itemDefinitions",{}).
296
+ once.
297
+ and_return flexmock(:body =>DefinitionsListResponsePage1)
298
+ connection.should_receive(:get).with("/definitions/itemDefinitions",
299
+ {:page=>2}).once.
300
+ and_return flexmock(:body =>DefinitionsListResponsePage2)
301
+ connection.should_receive(:get).with("/definitions/itemDefinitions",
302
+ {:page=>3}).once.
303
+ and_return flexmock(:body =>DefinitionsListResponsePage3)
304
+ @list=AMEE::Admin::ItemDefinitionList.new(connection)
305
+ @list.first.should be_a AMEE::Admin::ItemDefinition
306
+ @list.first.uid.should == "2169991DE821"
307
+ @list.first.name.should == "AAA Car Generic"
308
+ @list[4].should be_a AMEE::Admin::ItemDefinition
309
+ @list[4].uid.should == "70BCD634D0A4"
310
+ @list[4].name.should == "ActOnCO2 Action"
311
+ @list.size.should==10
312
+ end
313
+ end