amee 2.6.0 → 2.7.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.
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