lisa-reve 0.0.120

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. data/ChangeLog +155 -0
  2. data/LICENSE +22 -0
  3. data/Rakefile +79 -0
  4. data/init.rb +1 -0
  5. data/lib/reve/classes.rb +1387 -0
  6. data/lib/reve/exceptions.rb +353 -0
  7. data/lib/reve/extensions.rb +119 -0
  8. data/lib/reve.rb +1020 -0
  9. data/reve.rb +1 -0
  10. data/test/test_reve.rb +1208 -0
  11. data/test/xml/alliances.xml +171 -0
  12. data/test/xml/assets.xml +32 -0
  13. data/test/xml/badxml.xml +6 -0
  14. data/test/xml/certificate_tree.xml +231 -0
  15. data/test/xml/char_facwarstats.xml +18 -0
  16. data/test/xml/char_medals.xml +12 -0
  17. data/test/xml/character_sheet.xml +288 -0
  18. data/test/xml/characterid.xml +11 -0
  19. data/test/xml/charactername.xml +11 -0
  20. data/test/xml/characters.xml +13 -0
  21. data/test/xml/conqurable_stations.xml +12 -0
  22. data/test/xml/corp_facwarstats.xml +17 -0
  23. data/test/xml/corp_medals.xml +23 -0
  24. data/test/xml/corp_member_medals.xml +20 -0
  25. data/test/xml/corp_membersecurity.xml +49 -0
  26. data/test/xml/corporate_assets_list.xml +16 -0
  27. data/test/xml/corporate_market_orders.xml +10 -0
  28. data/test/xml/corporate_wallet_balance.xml +16 -0
  29. data/test/xml/corporate_wallet_journal.xml +11 -0
  30. data/test/xml/corporate_wallet_transactions.xml +10 -0
  31. data/test/xml/corporation_sheet.xml +52 -0
  32. data/test/xml/errors/error_100.xml +5 -0
  33. data/test/xml/errors/error_101.xml +5 -0
  34. data/test/xml/errors/error_102.xml +5 -0
  35. data/test/xml/errors/error_103.xml +5 -0
  36. data/test/xml/errors/error_104.xml +5 -0
  37. data/test/xml/errors/error_105.xml +5 -0
  38. data/test/xml/errors/error_106.xml +5 -0
  39. data/test/xml/errors/error_107.xml +5 -0
  40. data/test/xml/errors/error_108.xml +5 -0
  41. data/test/xml/errors/error_109.xml +5 -0
  42. data/test/xml/errors/error_110.xml +5 -0
  43. data/test/xml/errors/error_111.xml +5 -0
  44. data/test/xml/errors/error_112.xml +5 -0
  45. data/test/xml/errors/error_113.xml +5 -0
  46. data/test/xml/errors/error_114.xml +5 -0
  47. data/test/xml/errors/error_115.xml +5 -0
  48. data/test/xml/errors/error_116.xml +5 -0
  49. data/test/xml/errors/error_117.xml +5 -0
  50. data/test/xml/errors/error_118.xml +5 -0
  51. data/test/xml/errors/error_119.xml +5 -0
  52. data/test/xml/errors/error_120.xml +5 -0
  53. data/test/xml/errors/error_121.xml +5 -0
  54. data/test/xml/errors/error_122.xml +5 -0
  55. data/test/xml/errors/error_123.xml +5 -0
  56. data/test/xml/errors/error_124.xml +5 -0
  57. data/test/xml/errors/error_125.xml +5 -0
  58. data/test/xml/errors/error_200.xml +5 -0
  59. data/test/xml/errors/error_201.xml +5 -0
  60. data/test/xml/errors/error_202.xml +5 -0
  61. data/test/xml/errors/error_203.xml +5 -0
  62. data/test/xml/errors/error_204.xml +5 -0
  63. data/test/xml/errors/error_205.xml +5 -0
  64. data/test/xml/errors/error_206.xml +5 -0
  65. data/test/xml/errors/error_207.xml +5 -0
  66. data/test/xml/errors/error_208.xml +5 -0
  67. data/test/xml/errors/error_209.xml +5 -0
  68. data/test/xml/errors/error_210.xml +5 -0
  69. data/test/xml/errors/error_211.xml +5 -0
  70. data/test/xml/errors/error_212.xml +5 -0
  71. data/test/xml/errors/error_213.xml +5 -0
  72. data/test/xml/errors/error_214.xml +5 -0
  73. data/test/xml/errors/error_500.xml +5 -0
  74. data/test/xml/errors/error_501.xml +5 -0
  75. data/test/xml/errors/error_502.xml +5 -0
  76. data/test/xml/errors/error_503.xml +5 -0
  77. data/test/xml/errors/error_504.xml +5 -0
  78. data/test/xml/errors/error_505.xml +5 -0
  79. data/test/xml/errors/error_506.xml +5 -0
  80. data/test/xml/errors/error_507.xml +5 -0
  81. data/test/xml/errors/error_508.xml +5 -0
  82. data/test/xml/errors/error_509.xml +5 -0
  83. data/test/xml/errors/error_510.xml +5 -0
  84. data/test/xml/errors/error_511.xml +5 -0
  85. data/test/xml/errors/error_512.xml +5 -0
  86. data/test/xml/errors/error_513.xml +5 -0
  87. data/test/xml/errors/error_514.xml +5 -0
  88. data/test/xml/errors/error_515.xml +5 -0
  89. data/test/xml/errors/error_516.xml +5 -0
  90. data/test/xml/errors/error_517.xml +5 -0
  91. data/test/xml/errors/error_518.xml +5 -0
  92. data/test/xml/errors/error_519.xml +5 -0
  93. data/test/xml/errors/error_520.xml +5 -0
  94. data/test/xml/errors/error_521.xml +5 -0
  95. data/test/xml/errors/error_522.xml +5 -0
  96. data/test/xml/errors/error_523.xml +5 -0
  97. data/test/xml/errors/error_524.xml +5 -0
  98. data/test/xml/errors/error_525.xml +5 -0
  99. data/test/xml/errors/error_900.xml +5 -0
  100. data/test/xml/errors/error_901.xml +5 -0
  101. data/test/xml/errors/error_902.xml +5 -0
  102. data/test/xml/errors/error_903.xml +5 -0
  103. data/test/xml/errors/error_999.xml +5 -0
  104. data/test/xml/errors.xml +70 -0
  105. data/test/xml/eve_facwarstats.xml +35 -0
  106. data/test/xml/eve_facwartopstats.xml +178 -0
  107. data/test/xml/industryjobs.xml +11 -0
  108. data/test/xml/kills.xml +569 -0
  109. data/test/xml/map_facwarsystems.xml +13 -0
  110. data/test/xml/mapjumps.xml +15 -0
  111. data/test/xml/mapkills.xml +16 -0
  112. data/test/xml/market_transactions.xml +79 -0
  113. data/test/xml/marketorders.xml +43 -0
  114. data/test/xml/member_tracking.xml +22 -0
  115. data/test/xml/nonmember_corpsheet.xml +30 -0
  116. data/test/xml/reftypes.xml +14 -0
  117. data/test/xml/server_status.xml +9 -0
  118. data/test/xml/skill_in_training-amarr-titan.xml +15 -0
  119. data/test/xml/skill_in_training-none.xml +7 -0
  120. data/test/xml/skill_queue.xml +18 -0
  121. data/test/xml/skilltree.xml +41 -0
  122. data/test/xml/sovereignty.xml +29 -0
  123. data/test/xml/starbase_fuel.xml +23 -0
  124. data/test/xml/starbases.xml +12 -0
  125. data/test/xml/wallet_balance.xml +17 -0
  126. data/test/xml/wallet_journal.xml +48 -0
  127. data/tester.rb +17 -0
  128. metadata +187 -0
data/test/test_reve.rb ADDED
@@ -0,0 +1,1208 @@
1
+ # Tests designed to run with autotest.
2
+ require 'test/unit'
3
+ require 'reve'
4
+ require 'fileutils' # for saving downloaded XML
5
+
6
+ XML_BASE = File.join(File.dirname(__FILE__),'xml/')
7
+ SAVE_PATH = File.join(File.dirname(__FILE__),'downloads')
8
+
9
+ class TestReve < Test::Unit::TestCase
10
+
11
+ def setup
12
+ @api = get_api
13
+ assert_nil @api.last_hash
14
+ FileUtils.mkdir(SAVE_PATH) rescue nil
15
+ end
16
+ def teardown
17
+ FileUtils.rm_rf(SAVE_PATH)
18
+ end
19
+
20
+ def test_makes_right_api_empty
21
+ api = get_api
22
+ assert_instance_of Reve::API, api
23
+ assert_equal "", api.userid
24
+ assert_equal "", api.key
25
+ assert_equal "", api.charid
26
+ end
27
+ def test_makes_right_api_1_param
28
+ api = get_api(12345)
29
+ assert_instance_of Reve::API, api
30
+ assert_equal "12345", api.userid
31
+ assert_equal "", api.key
32
+ assert_equal "", api.charid
33
+ end
34
+ def test_makes_right_api_2_param
35
+ api = get_api(12345,54321)
36
+ assert_instance_of Reve::API, api
37
+ assert_equal "12345", api.userid
38
+ assert_equal "54321", api.key
39
+ assert_equal "", api.charid
40
+ end
41
+ def test_makes_right_api_3_param
42
+ api = get_api(12345,54321,'abcde')
43
+ assert_instance_of Reve::API, api
44
+ assert_equal "12345", api.userid
45
+ assert_equal "54321", api.key
46
+ assert_equal "abcde", api.charid
47
+ end
48
+
49
+ def test_makes_a_simple_hash
50
+ Reve::API.alliances_url = XML_BASE + 'alliances.xml'
51
+ h = @api.alliances :just_hash => true
52
+ assert_instance_of String, h
53
+ assert_equal "xml/alliances.xml", h
54
+ end
55
+
56
+ def test_charid_default_works_when_characterid_is_nil
57
+ # this line of code is wrong on so many levels.
58
+ assert_equal("CharID", Reve::API.new('uid','key','CharID').send(:postfields,{})['characterid'])
59
+ end
60
+
61
+ def test_makes_a_complex_hash
62
+ Reve::API.corporate_wallet_trans_url = XML_BASE + 'market_transactions.xml'
63
+ @api.userid = 999
64
+ @api.key = 'aaa'
65
+ h = @api.corporate_wallet_transactions :accountkey => '1001', :characterid => 123, :beforerefid => 456, :just_hash => true
66
+ assert_instance_of String, h
67
+ assert_equal 'xml/market_transactions.xml:accountkey:1001:apikey:aaa:beforerefid:456:characterid:123:userid:999',h
68
+ end
69
+
70
+ def test_bad_xml
71
+ Reve::API.training_skill_url = XML_BASE + 'badxml.xml'
72
+ skill = @api.skill_in_training
73
+ assert_not_nil @api.last_hash
74
+ end
75
+
76
+ def test_saving_xml_works
77
+ @api.save_path = SAVE_PATH
78
+ alliances = @api.alliances :url => File.join(XML_BASE,'alliances.xml')
79
+ assert File.exists?(File.join(SAVE_PATH,'alliances',@api.cached_until.to_i.to_s + '.xml'))
80
+ assert_equal(
81
+ File.open(File.join(XML_BASE,'alliances.xml')).read,
82
+ File.open(File.join(SAVE_PATH,'alliances',@api.cached_until.to_i.to_s + '.xml')).read)
83
+ end
84
+
85
+ def test_saving_xml_when_save_path_is_nil
86
+ assert_nil @api.save_path
87
+ alliances = @api.alliances :url => File.join(XML_BASE,'alliances.xml')
88
+ assert ! File.exists?(File.join(SAVE_PATH,'alliances',@api.cached_until.to_i.to_s + '.xml'))
89
+ end
90
+
91
+ # We want to see <url /> in the saved XML because that's what came from the source
92
+ def test_saving_xml_with_bad_short_tag
93
+ @api.save_path = SAVE_PATH
94
+ @corpsheet = @api.corporation_sheet :url => File.join(XML_BASE,'corporation_sheet.xml')
95
+ assert_equal "", @corpsheet.url
96
+ assert File.open(File.join(SAVE_PATH,'corporation_sheet',@api.cached_until.to_i.to_s + '.xml')).read.include?("<url />")
97
+ end
98
+
99
+ def test_saving_xml_when_404
100
+ @api.save_path = SAVE_PATH
101
+ alliances = nil
102
+ assert_raise Errno::ENOENT do
103
+ alliances = @api.alliances :url => File.join(XML_BASE,rand.to_s)
104
+ end
105
+ assert_nil @api.cached_until
106
+ assert_equal 0, Dir.glob(File.join(SAVE_PATH,'alliances','*.xml')).size # no XML saved
107
+ end
108
+
109
+ # File.split exists and File is not a String or URI class as permitted in Reve::API#get_xml.
110
+ # This means as a parameter it will pass through Reve::API#compute_hash method and
111
+ # get to Reve::API#get_xml
112
+ def test_for_bad_uri_passed_to_method
113
+ assert_raise Reve::Exceptions::ReveNetworkStatusException do
114
+ @api.character_sheet :url => File
115
+ end
116
+ end
117
+
118
+ def test_check_exception_with_bad_xml_document
119
+ assert_raise ArgumentError do
120
+ @api.send(:check_exception,nil)
121
+ end
122
+ end
123
+
124
+ def test_errors_api_call
125
+ errors = nil
126
+ assert_nothing_raised do
127
+ errors = @api.errors :url => File.join(XML_BASE,'errors.xml')
128
+ end
129
+ assert errors.all? { |e| e.kind_of?(Reve::Classes::APIError) }
130
+ assert_equal 61, errors.size # 61 errors in total
131
+ errors.each do |error|
132
+ assert_not_nil(error.code)
133
+ assert_not_nil(error.text)
134
+ end
135
+ end
136
+
137
+ def test_corporation_sheet_clean
138
+ Reve::API.corporation_sheet_url = XML_BASE + 'corporation_sheet.xml'
139
+ corporation = nil
140
+ assert_nothing_raised do
141
+ corporation = @api.corporation_sheet :characterid => 123
142
+ end
143
+ assert_not_nil @api.last_hash
144
+ assert_kind_of Time, @api.cached_until
145
+ assert_equal 150212025, corporation.id
146
+ assert_equal "Banana Republic", corporation.name
147
+ assert_equal "BR", corporation.ticker
148
+ assert_equal(150208955, corporation.ceo_id)
149
+ assert_equal("Mark Roled", corporation.ceo_name)
150
+ assert_equal(60003469, corporation.station_id)
151
+ assert_equal("Jita IV - Caldari Business Tribunal Information Center", corporation.station_name)
152
+ assert_equal "Garth's testing corp of awesome sauce, win sauce as it were. In this corp...<br><br>IT HAPPENS ALL OVER", corporation.description
153
+ assert_equal("", corporation.url)
154
+ assert_equal(150430947, corporation.alliance_id)
155
+ assert_equal("The Dead Rabbits", corporation.alliance_name)
156
+ assert_equal 93.7, corporation.tax_rate
157
+ assert_equal(3, corporation.member_count)
158
+ assert_equal(6300, corporation.member_limit)
159
+ assert_equal(1, corporation.shares)
160
+ assert_equal "DIVISION", corporation.divisions.select { |d| d.key == 1003 }.first.description
161
+ corporation.divisions.each do |d|
162
+ assert_not_nil(d.key)
163
+ assert_not_nil(d.description)
164
+ end
165
+ assert_equal "Master Wallet", corporation.wallet_divisions.select { |d| d.key == 1000 }.first.description
166
+ corporation.wallet_divisions.each do |wd|
167
+ assert_not_nil(wd.key)
168
+ assert_not_nil(wd.description)
169
+ end
170
+ assert_equal 0, corporation.logo.graphic_id
171
+ assert_equal 681, corporation.logo.color_1
172
+ assert_equal 676, corporation.logo.color_2
173
+ assert_equal 448, corporation.logo.shape_1
174
+ assert_equal 418, corporation.logo.shape_3
175
+ assert_equal 0, corporation.logo.color_3
176
+ assert_equal 0, corporation.logo.shape_2
177
+ end
178
+
179
+ def test_conqurable_stations_clean
180
+ Reve::API.conqurable_outposts_url = XML_BASE + 'conqurable_stations.xml'
181
+ stations = nil
182
+ assert_nothing_raised do
183
+ stations = @api.conqurable_stations
184
+ end
185
+
186
+ assert_equal 3, stations.size
187
+ assert_not_nil @api.last_hash
188
+ assert_kind_of Time, @api.cached_until
189
+
190
+ stations.each do |station|
191
+ assert_not_nil station.id
192
+ assert_not_nil station.name
193
+ assert_not_nil station.type_id
194
+ assert_not_nil station.system_id
195
+ assert_not_nil station.corporation_id
196
+ assert_not_nil station.corporation_name
197
+ assert_not_nil station.system_id
198
+ end
199
+ end
200
+
201
+ def test_convert_characterids_to_names
202
+ ids = [ 797400947,892008733 ] # CCP Garthagk, Raquel Smith
203
+ names = []
204
+ assert_nothing_raised do
205
+ names = @api.character_name :url => XML_BASE + 'charactername.xml', :ids => ids
206
+ end
207
+ assert_equal 2, names.size
208
+ names.each do |name|
209
+ assert_not_nil(name.name)
210
+ assert_not_nil(name.id)
211
+ end
212
+ actual_names = names.collect { |n| n.name }
213
+ assert actual_names.include?('CCP Garthagk')
214
+ assert actual_names.include?('Raquel Smith')
215
+ end
216
+
217
+ def test_convert_characternames_to_ids
218
+ names = [ 'CCP Garthagk', 'Raquel Smith' ] # 797400947,892008733
219
+ ids = []
220
+ assert_nothing_raised do
221
+ ids = @api.names_to_ids :url => XML_BASE + 'characterid.xml', :names => names
222
+ end
223
+ assert_equal 2, ids.size
224
+ ids.each do |id|
225
+ assert_not_nil(id.id)
226
+ assert_not_nil(id.name)
227
+ end
228
+ actual_ids = ids.collect { |n| n.id }
229
+ assert actual_ids.include?(797400947)
230
+ assert actual_ids.include?(892008733)
231
+ end
232
+
233
+ def test_personal_industry_jobs_clean
234
+ Reve::API.personal_industry_jobs_url = XML_BASE + 'industryjobs.xml'
235
+ jobs = nil
236
+ assert_nothing_raised do
237
+ jobs = @api.personal_industry_jobs
238
+ end
239
+ assert_equal 2, jobs.size
240
+ # All things got assigned something.
241
+ jobs.each do |job|
242
+ [ :id, :assembly_line_id, :container_id, :installed_item_id, :installed_item_location_id,
243
+ :installed_item_quantity, :installed_item_productivity_level, :installed_item_material_level,
244
+ :installed_item_licensed_production_runs_remaining, :output_location_id, :installer_id, :runs,
245
+ :licensed_production_runs, :installed_system_id, :container_location_id, :material_multiplier,
246
+ :char_material_multiplier, :time_multiplier, :char_time_multiplier, :installed_item_type_id,
247
+ :output_type_id, :container_type_id, :installed_item_copy, :completed, :completed_successfully,
248
+ :installed_item_flag, :output_flag, :activity_id, :completed_status, :installed_at,
249
+ :begin_production_at, :end_production_at, :pause_production_time ].each do |att|
250
+ assert_not_nil job.send(att)
251
+ end
252
+ end
253
+ end
254
+
255
+ def test_corporate_industry_jobs_clean
256
+ Reve::API.corporate_industry_jobs_url = XML_BASE + 'industryjobs.xml'
257
+ jobs = nil
258
+ assert_nothing_raised do
259
+ jobs = @api.corporate_industry_jobs
260
+ end
261
+ assert_equal 2, jobs.size
262
+ # All things got assigned something.
263
+ jobs.each do |job|
264
+ [ :id, :assembly_line_id, :container_id, :installed_item_id, :installed_item_location_id,
265
+ :installed_item_quantity, :installed_item_productivity_level, :installed_item_material_level,
266
+ :installed_item_licensed_production_runs_remaining, :output_location_id, :installer_id, :runs,
267
+ :licensed_production_runs, :installed_system_id, :container_location_id, :material_multiplier,
268
+ :char_material_multiplier, :time_multiplier, :char_time_multiplier, :installed_item_type_id,
269
+ :output_type_id, :container_type_id, :installed_item_copy, :completed, :completed_successfully,
270
+ :installed_item_flag, :output_flag, :activity_id, :completed_status, :installed_at,
271
+ :begin_production_at, :end_production_at, :pause_production_time ].each do |att|
272
+ assert_not_nil job.send(att)
273
+ end
274
+ end
275
+ end
276
+
277
+ def test_faction_war_system_stats_clean(skip_preamble = false,stats = nil)
278
+ Reve::API.faction_war_occupancy_url = XML_BASE + 'map_facwarsystems.xml'
279
+ unless skip_preamble # not best practice but will get the job done!
280
+ stats = nil
281
+ assert_nothing_raised do
282
+ stats = @api.faction_war_system_stats
283
+ end
284
+ end
285
+ assert stats.all? { |s| s.kind_of?(Reve::Classes::FactionWarSystemStatus) }
286
+ assert_equal(4, stats.size)
287
+ stats.each do |sys|
288
+ # can't assert_not_nil faction_id or faction_name since they may be nil
289
+ assert_not_nil(sys.system_id)
290
+ assert_not_nil(sys.system_name)
291
+ assert_not_nil(sys.contested)
292
+ end
293
+ assert_equal(1, stats.select { |s| s.faction_id == 500001 }.size)
294
+ assert_equal(1, stats.select { |s| s.faction_id == 500002 }.size)
295
+ assert_equal(1, stats.select { |s| ! s.contested }.size)
296
+ assert_equal(2, stats.select { |s| s.faction_id.nil? }.size)
297
+ assert_equal(3, stats.select { |s| s.contested }.size)
298
+ end
299
+
300
+ def test_faction_war_system_stats_alias_clean
301
+ Reve::API.faction_war_occupancy_url = XML_BASE + 'map_facwarsystems.xml'
302
+ stats = nil
303
+ assert_nothing_raised do
304
+ stats = @api.faction_war_occupancy
305
+ end
306
+ test_faction_war_system_stats_clean(true,stats)
307
+ end
308
+
309
+ def test_faction_war_stats_clean
310
+ Reve::API.general_faction_war_stats_url = XML_BASE + 'eve_facwarstats.xml'
311
+ stats = nil
312
+ assert_nothing_raised do
313
+ stats = @api.faction_war_stats
314
+ end
315
+ assert_instance_of(Reve::Classes::EveFactionWarStat, stats)
316
+ assert_equal(1707, stats.kills_yesterday)
317
+ assert_equal(9737, stats.kills_last_week)
318
+ assert_equal(27866, stats.kills_total)
319
+ assert_equal(215674, stats.victory_points_yesterday)
320
+ assert_equal(1738351, stats.victory_points_last_week)
321
+ assert_equal(5613787, stats.victory_points_total)
322
+
323
+ assert stats.faction_wars.all? { |w| w.kind_of?(Reve::Classes::FactionWar) }
324
+ assert stats.faction_participants.all? { |w| w.kind_of?(Reve::Classes::FactionwideFactionWarParticpant) }
325
+ assert_equal(8, stats.faction_wars.size)
326
+ assert_equal(4, stats.faction_participants.size)
327
+ stats.faction_wars.each do |war|
328
+ assert_not_nil(war.faction_id)
329
+ assert_not_nil(war.faction_name)
330
+ assert_not_nil(war.against_id)
331
+ assert_not_nil(war.against_name)
332
+ end
333
+ stats.faction_participants.each do |participant|
334
+ assert_not_nil(participant.faction_id)
335
+ assert_not_nil(participant.faction_name)
336
+ assert_not_nil(participant.systems_controlled)
337
+ assert_not_nil(participant.kills_yesterday)
338
+ assert_not_nil(participant.kills_last_week)
339
+ assert_not_nil(participant.kills_total)
340
+ assert_not_nil(participant.victory_points_yesterday)
341
+ assert_not_nil(participant.victory_points_last_week)
342
+ assert_not_nil(participant.victory_points_total)
343
+ end
344
+ assert_not_nil(@api.cached_until)
345
+ end
346
+ def test_personal_factional_war_stats_clean
347
+ Reve::API.personal_faction_war_stats_url = XML_BASE + 'char_facwarstats.xml'
348
+ stats = nil
349
+ assert_nothing_raised do
350
+ stats = @api.personal_faction_war_stats
351
+ end
352
+ assert_instance_of Reve::Classes::PersonalFactionWarParticpant, stats
353
+ assert_equal(500001, stats.faction_id)
354
+ assert_equal("Caldari State", stats.faction_name)
355
+ assert_equal("2008-06-13 20:38:00".to_time, stats.enlisted_at)
356
+ assert_equal(1, stats.current_rank)
357
+ assert_equal(2, stats.highest_rank)
358
+ assert_equal(3, stats.kills_yesterday)
359
+ assert_equal(4, stats.kills_last_week)
360
+ assert_equal(5, stats.kills_total)
361
+ assert_equal(124, stats.victory_points_yesterday)
362
+ assert_equal(124, stats.victory_points_last_week)
363
+ assert_equal(506, stats.victory_points_total)
364
+ end
365
+
366
+ def test_corporate_factional_war_stats_clean
367
+ Reve::API.corporate_faction_war_stats_url = XML_BASE + 'corp_facwarstats.xml'
368
+ stats = nil
369
+ assert_nothing_raised do
370
+ stats = @api.corporate_faction_war_stats
371
+ end
372
+ assert_instance_of Reve::Classes::CorporateFactionWarParticpant, stats
373
+ assert_equal(500001, stats.faction_id)
374
+ assert_equal("Caldari State", stats.faction_name)
375
+ assert_equal("2008-06-10 22:10:00".to_time, stats.enlisted_at)
376
+ assert_equal(4, stats.pilots)
377
+ assert_equal(3, stats.kills_yesterday)
378
+ assert_equal(4, stats.kills_last_week)
379
+ assert_equal(5, stats.kills_total)
380
+ assert_equal(124, stats.victory_points_yesterday)
381
+ assert_equal(906, stats.victory_points_last_week)
382
+ assert_equal(2690, stats.victory_points_total)
383
+ end
384
+
385
+ def test_faction_war_top_stats_clean
386
+ Reve::API.top_faction_war_stats_url = XML_BASE + 'eve_facwartopstats.xml'
387
+ stats = nil
388
+ assert_nothing_raised do
389
+ stats = @api.faction_war_top_stats
390
+ end
391
+ assert_kind_of(Reve::Classes::FactionWarTopStats, stats)
392
+ [ :characters, :corporations, :factions ].each do |kind|
393
+ [ :yesterday_kills, :last_week_kills, :total_kills ].each do |attr|
394
+ assert_kind_of(Hash, stats.send(kind))
395
+ assert_kind_of(Array, stats.send(kind)[attr])
396
+ assert ! stats.send(kind)[attr].empty?
397
+ [ :name, :id, :kills ].each do |c_attr|
398
+ assert stats.send(kind)[attr].all? { |e| ! e.nil? }
399
+ end
400
+ end
401
+ [ :last_week_victory_points, :yesterday_victory_points, :total_victory_points ].each do |attr|
402
+ assert_kind_of(Hash, stats.send(kind))
403
+ assert_kind_of(Array, stats.send(kind)[attr])
404
+ assert ! stats.send(kind)[attr].empty?
405
+ [ :name, :id, :victory_points ].each do |c_attr|
406
+ assert stats.send(kind)[attr].all? { |e| ! e.nil? }
407
+ end
408
+ end
409
+ end
410
+ assert_equal(5, stats.characters[:yesterday_kills].size)
411
+ assert_equal(6, stats.characters[:last_week_kills].size)
412
+ assert_equal(7, stats.characters[:total_kills].size)
413
+ [ :yesterday_kills, :yesterday_victory_points, :last_week_kills,
414
+ :last_week_victory_points, :total_kills, :total_victory_points ].each do |attr|
415
+ assert_equal(10,stats.corporations[attr].size)
416
+ end
417
+ [ :yesterday_kills, :yesterday_victory_points, :last_week_kills,
418
+ :last_week_victory_points, :total_kills, :total_victory_points ].each do |attr|
419
+ assert_equal(4,stats.factions[attr].size)
420
+ end
421
+ end
422
+
423
+ def test_assets_clean
424
+ Reve::API.personal_assets_url = XML_BASE + 'assets.xml'
425
+ assets = nil
426
+ assert_nothing_raised do
427
+ assets = @api.personal_assets_list
428
+ end
429
+ assert_equal 18, assets.size # 18 single and 1 container
430
+ contained_assets = assets.inject([]) { |ass,container| ass << container.assets }.flatten
431
+ assert_equal(1, contained_assets.size) # We have a container it happens to have 1 asset in it
432
+ contained_assets.each do |asset|
433
+ assert_instance_of(Reve::Classes::Asset, asset)
434
+ assert_not_nil(asset.item_id)
435
+ assert_not_nil(asset.type_id)
436
+ assert_not_nil(asset.quantity)
437
+ assert_not_nil(asset.flag)
438
+ assert_not_nil(asset.singleton)
439
+ end
440
+ assets.each do |asset|
441
+ assert_instance_of(Reve::Classes::AssetContainer, asset)
442
+ assert_not_nil(asset.item_id)
443
+ assert_not_nil(asset.location_id)
444
+ assert_not_nil(asset.type_id)
445
+ assert_not_nil(asset.quantity)
446
+ assert_not_nil(asset.flag)
447
+ assert_not_nil(asset.singleton)
448
+ end
449
+ end
450
+
451
+ # no need to test corporate cos they're the same.
452
+ # TODO: Test with nested losses
453
+ def test_kills_clean
454
+ kills_cleanly(:personal_kills,File.join(XML_BASE,'kills.xml'))
455
+ end
456
+
457
+ def test_corporate_kills_clean
458
+ kills_cleanly(:corporate_kills,File.join(XML_BASE,'kills.xml'))
459
+ end
460
+
461
+ def test_characters_clean
462
+ Reve::API.characters_url = XML_BASE + 'characters.xml'
463
+ chars = nil
464
+ assert_nothing_raised do
465
+ chars = @api.characters
466
+ end
467
+ assert_not_nil @api.last_hash
468
+ assert_kind_of Time, @api.cached_until
469
+ assert_equal 1, chars.size
470
+ chars.each do |char|
471
+ assert_not_nil(char.name)
472
+ assert_not_nil(char.id)
473
+ assert_not_nil(char.corporation_name)
474
+ assert_not_nil(char.corporation_id)
475
+ assert_instance_of Reve::Classes::Character, char
476
+ end
477
+ end
478
+
479
+ def test_starbases_clean
480
+ Reve::API.starbases_url = XML_BASE + 'starbases.xml'
481
+ bases = nil
482
+ assert_nothing_raised do
483
+ bases = @api.starbases(:characterid => 1)
484
+ end
485
+ assert_not_nil @api.last_hash
486
+ assert_kind_of Time, @api.cached_until
487
+ assert_equal 4, bases.size
488
+ bases.each do |starbase|
489
+ assert_instance_of Reve::Classes::Starbase, starbase
490
+ assert_not_nil starbase.type_id
491
+ assert_not_nil starbase.type_name
492
+ assert_not_nil starbase.id
493
+ assert_not_nil starbase.system_id
494
+ assert_not_nil starbase.system_name
495
+ end
496
+ end
497
+
498
+ def test_starbase_fuel_clean
499
+ Reve::API.starbasedetail_url = XML_BASE + 'starbase_fuel.xml'
500
+ fuels = nil
501
+ assert_nothing_raised do
502
+ fuels = @api.starbase_fuel(:starbaseid => 1,:characterid => 2)
503
+ end
504
+ assert_not_nil @api.last_hash
505
+ assert_kind_of Time, @api.cached_until
506
+ assert_equal 14, fuels.size
507
+ fuels.each do |fuel|
508
+ assert_equal 1, fuel.starbase_id
509
+ assert_not_nil fuel.type_id
510
+ assert_not_nil fuel.quantity
511
+ end
512
+ end
513
+
514
+ def test_alliances_clean
515
+ Reve::API.alliances_url = XML_BASE + 'alliances.xml'
516
+ alliances = nil
517
+ assert_nothing_raised do
518
+ alliances = @api.alliances
519
+ end
520
+ assert_not_nil @api.last_hash
521
+ assert_kind_of Time, @api.cached_until
522
+ assert_equal 3, alliances.size
523
+ corpsize = 0
524
+ alliances.each do |alliance|
525
+ assert_instance_of Reve::Classes::Alliance, alliance
526
+ assert_not_equal 0, alliance.member_corporations
527
+ assert_not_nil alliance.name
528
+ assert_not_nil alliance.id
529
+ assert_not_nil alliance.short_name
530
+ assert_not_nil alliance.member_count
531
+ assert_not_nil alliance.executor_corp_id
532
+ corpsize += alliance.member_corporations.size
533
+ end
534
+ assert_equal 150, corpsize
535
+ end
536
+
537
+ def test_sovereignty_clean
538
+ Reve::API.sovereignty_url = XML_BASE + 'sovereignty.xml'
539
+ sovereignties = nil
540
+ assert_nothing_raised do
541
+ sovereignties = @api.sovereignty
542
+ end
543
+ assert_not_nil @api.last_hash
544
+ assert_kind_of Time, @api.cached_until
545
+ assert_equal 7, sovereignties.size
546
+ sovereignties.each do |sovereignty|
547
+ assert_instance_of Reve::Classes::Sovereignty, sovereignty
548
+ assert_not_nil sovereignty.system_id
549
+ assert_not_nil sovereignty.constellation_sovereignty
550
+ assert_not_nil sovereignty.system_name
551
+ end
552
+ end
553
+
554
+ def test_reftypes_clean
555
+ Reve::API.reftypes_url = XML_BASE + 'reftypes.xml'
556
+ reftypes = nil
557
+ assert_nothing_raised do
558
+ reftypes = @api.ref_types
559
+ end
560
+ assert_not_nil @api.last_hash
561
+ assert_kind_of Time, @api.cached_until
562
+ assert_equal 6, reftypes.size
563
+ reftypes.each do |reftype|
564
+ assert_not_nil reftype.id
565
+ assert_not_nil reftype.name
566
+ end
567
+ end
568
+
569
+ def test_market_orders_clean
570
+ Reve::API.personal_market_orders_url = XML_BASE + 'marketorders.xml'
571
+ orders = nil
572
+ assert_nothing_raised do
573
+ orders = @api.personal_market_orders
574
+ end
575
+ assert_not_nil @api.last_hash
576
+ assert_kind_of Time, @api.cached_until
577
+ assert_equal 11, orders.size
578
+ buys = sells = 0
579
+ orders.each do |order|
580
+ [ :id, :character_id, :station_id, :volume_entered, :volume_remaining, :minimum_volume,
581
+ :order_state, :type_id, :range, :account_key, :duration, :escrow, :price, :bid ].each do |attr|
582
+ assert_not_nil(order.send(attr))
583
+ end
584
+ assert_kind_of Time, order.created_at
585
+ assert [TrueClass, FalseClass].include?(order.bid.class)
586
+ buys += 1 if ! order.bid
587
+ sells += 1 if order.bid
588
+ assert_not_equal(0, order.character_id)
589
+ end
590
+ assert_equal 4, buys
591
+ assert_equal 7, sells
592
+ end
593
+
594
+ def test_corporate_market_orders_clean
595
+ orders = nil
596
+ assert_nothing_raised do
597
+ orders = @api.corporate_market_orders :url => File.join(XML_BASE,'corporate_market_orders.xml')
598
+ end
599
+ assert_not_nil @api.last_hash
600
+ assert_kind_of Time, @api.cached_until
601
+ assert_equal 1, orders.size
602
+ buys = sells = 0
603
+ orders.each do |order|
604
+ [ :id, :character_id, :station_id, :volume_entered, :volume_remaining, :minimum_volume,
605
+ :order_state, :type_id, :range, :account_key, :duration, :escrow, :price, :bid ].each do |attr|
606
+ assert_not_nil(order.send(attr))
607
+ end
608
+ assert_kind_of Time, order.created_at
609
+ assert [TrueClass, FalseClass].include?(order.bid.class)
610
+ buys += 1 if ! order.bid
611
+ sells += 1 if order.bid
612
+ end
613
+ assert_equal 1, buys
614
+ assert_equal 0, sells
615
+ end
616
+
617
+ def test_corporate_wallet_transactions
618
+ trans = nil
619
+ assert_nothing_raised do
620
+ trans = @api.corporate_wallet_transactions :url => File.join(XML_BASE,'corporate_wallet_transactions.xml')
621
+ end
622
+ assert_equal 1, trans.size
623
+ assert trans.all? { |tran| tran.kind_of?(Reve::Classes::CorporateWalletTransaction) }
624
+ trans.each do |tran|
625
+ [ :created_at, :id, :quantity, :type_name, :type_id, :price,
626
+ :client_id, :client_name, :character_id, :station_id, :station_name, :type,
627
+ :transaction_for ].each do |attr|
628
+ assert_not_nil(tran.send(attr))
629
+ end
630
+ assert_instance_of(Time, tran.created_at)
631
+ end
632
+ end
633
+
634
+ def test_corporate_wallet_balance_clean
635
+ balance = nil
636
+ assert_nothing_raised do
637
+ balance = @api.corporate_wallet_balance :url => File.join(XML_BASE, 'corporate_wallet_balance.xml')
638
+ end
639
+ assert balance.all? { |b| b.kind_of?(Reve::Classes::WalletBalance) }
640
+ balance.each do |bal|
641
+ assert_not_nil(bal.account_id)
642
+ assert_not_nil(bal.account_key)
643
+ assert_not_nil(bal.balance)
644
+ end
645
+ assert_equal 18004409.84, balance.select { |b| b.account_key == '1000' }.first.balance
646
+ balance.select { |b| b.account_key != '1000' }.each do |non_tested_account|
647
+ assert_equal 0.00, non_tested_account.balance
648
+ end
649
+ end
650
+
651
+ def test_corporate_wallet_journal_clean
652
+ journal = nil
653
+ assert_nothing_raised do
654
+ journal = @api.corporate_wallet_journal :url => File.join(XML_BASE,'corporate_wallet_journal.xml')
655
+ end
656
+ assert_equal 2, journal.size
657
+ assert journal.all? { |j| j.kind_of?(Reve::Classes::WalletJournal) }
658
+ journal.each do |j|
659
+ [ :date, :ref_id, :reftype_id, :owner_name1, :owner_name2, :arg_name1, :amount, :balance, :reason ].each do |attr|
660
+ assert_not_nil(j.send(attr))
661
+ end
662
+ end
663
+ end
664
+
665
+ def test_corporate_assets_list_clean
666
+ assets = nil
667
+ assert_nothing_raised do
668
+ assets = @api.corporate_assets_list :url => File.join(XML_BASE,'corporate_assets_list.xml')
669
+ end
670
+ assert_equal 2, assets.size
671
+ assert assets.all? { |a| a.kind_of?(Reve::Classes::AssetContainer) }
672
+ end
673
+
674
+ def test_map_jumps_clean
675
+ Reve::API.map_jumps_url = XML_BASE + 'mapjumps.xml'
676
+ mapjumps = nil
677
+ assert_nothing_raised do
678
+ mapjumps = @api.map_jumps
679
+ end
680
+ assert_not_nil @api.last_hash
681
+ assert_kind_of Time, @api.cached_until
682
+ assert_equal 5, mapjumps.size
683
+ mapjumps.each do |jump|
684
+ assert_not_nil jump.system_id
685
+ assert_not_nil jump.jumps
686
+ end
687
+ end
688
+
689
+ def test_map_kills_clean
690
+ Reve::API.map_kills_url = XML_BASE + 'mapkills.xml'
691
+ mapkills = nil
692
+ assert_nothing_raised do
693
+ mapkills = @api.map_kills
694
+ end
695
+ assert_not_nil @api.last_hash
696
+ assert_kind_of Time, @api.cached_until
697
+ assert_equal 4, mapkills.size
698
+ mapkills.each do |kill|
699
+ assert_not_nil kill.system_id
700
+ assert_not_nil kill.faction_kills
701
+ assert_not_nil kill.ship_kills
702
+ assert_not_nil kill.pod_kills
703
+ end
704
+ end
705
+
706
+ def test_skill_tree_clean
707
+ Reve::API.skill_tree_url = XML_BASE + 'skilltree.xml'
708
+ skilltrees = nil
709
+ assert_nothing_raised do
710
+ skilltrees = @api.skill_tree
711
+ end
712
+ assert_not_nil @api.last_hash
713
+ assert_kind_of Time, @api.cached_until
714
+ assert_equal 2, skilltrees.size
715
+ skilltrees.each do |skill|
716
+ assert_not_nil skill.type_id
717
+ assert_not_nil skill.name
718
+ assert_not_nil skill.rank
719
+ assert_not_nil skill.description
720
+ skill.bonuses.each do |bonus|
721
+ assert_kind_of Reve::Classes::SkillBonus, bonus
722
+ end
723
+ skill.attribs.each do |attrib|
724
+ assert_kind_of Reve::Classes::RequiredAttribute, attrib
725
+ end
726
+ skill.required_skills.each do |req|
727
+ assert_kind_of Reve::Classes::SkillRequirement, req
728
+ end
729
+ end
730
+ end
731
+
732
+ def test_wallet_balance_clean
733
+ Reve::API.personal_wallet_balance_url = XML_BASE + 'wallet_balance.xml'
734
+ balance = nil
735
+ assert_nothing_raised do
736
+ balance = @api.personal_wallet_balance(:characterid => 1)
737
+ end
738
+ assert_not_nil @api.last_hash
739
+ assert_kind_of Time, @api.cached_until
740
+ assert_equal 7, balance.size
741
+ balance.each do |bal|
742
+ assert_not_nil bal.account_id
743
+ assert_not_nil bal.account_key
744
+ assert_not_nil bal.balance
745
+ end
746
+ end
747
+
748
+ def test_wallet_transactions_clean
749
+ Reve::API.personal_wallet_trans_url = XML_BASE + 'market_transactions.xml'
750
+ trans = nil
751
+ assert_nothing_raised do
752
+ trans = @api.personal_wallet_transactions(:characterid => 1)
753
+ end
754
+ assert_not_nil @api.last_hash
755
+ assert_kind_of Time, @api.cached_until
756
+ assert_instance_of Reve::Classes::PersonalWalletTransaction, trans.first
757
+ assert_equal 9, trans.size
758
+ trans.each do |t|
759
+ assert_not_nil t.created_at
760
+ assert_not_nil t.id
761
+ assert_not_nil t.quantity
762
+ assert_not_nil t.type_name
763
+ assert_not_nil t.type_id
764
+ assert_not_nil t.price
765
+ assert_not_nil t.client_name
766
+ assert_not_nil t.station_id
767
+ assert_not_nil t.station_name
768
+ assert_not_nil t.type
769
+ end
770
+ end
771
+
772
+ def test_wallet_journal_clean
773
+ Reve::API.personal_wallet_journal_url = XML_BASE + 'wallet_journal.xml'
774
+ journal = nil
775
+ assert_nothing_raised do
776
+ journal = @api.personal_wallet_journal(:characterid => 1)
777
+ end
778
+ assert_not_nil @api.last_hash
779
+ assert_kind_of Time, @api.cached_until
780
+ assert_equal 8, journal.size
781
+ journal.each do |j|
782
+ assert_not_nil j.date
783
+ assert_not_nil j.ref_id
784
+ assert_not_nil j.reftype_id
785
+ assert_not_nil j.owner_name1
786
+ assert_not_nil j.owner_name2
787
+ assert_not_nil j.arg_name1
788
+ assert_not_nil j.amount
789
+ assert_not_nil j.balance
790
+ assert_not_nil j.reason
791
+ end
792
+ end
793
+
794
+ def test_member_tracking_clean
795
+ Reve::API.member_tracking_url = XML_BASE + 'member_tracking.xml'
796
+ members = nil
797
+ assert_nothing_raised do
798
+ members = @api.member_tracking(:characterid => 1)
799
+ end
800
+ assert_not_nil @api.last_hash
801
+ assert_kind_of Time, @api.cached_until
802
+ assert_equal 2, members.size
803
+ members.each do |member|
804
+ assert_not_nil member.character_id
805
+ assert_not_nil member.character_name
806
+ assert_not_nil member.start_time
807
+ assert_not_nil member.base_id
808
+ assert_not_nil member.base
809
+ assert_not_nil member.title
810
+ assert_not_nil member.logon_time
811
+ assert_not_nil member.logoff_time
812
+ assert_not_nil member.location_id
813
+ assert_not_nil member.location
814
+ assert_not_nil member.ship_type_id
815
+ assert_not_nil member.ship_type
816
+ assert_not_nil member.roles
817
+ assert_not_nil member.grantable_roles
818
+ end
819
+ end
820
+
821
+ def test_member_corporation_sheet_clean
822
+ Reve::API.corporation_sheet_url = XML_BASE + 'corporation_sheet.xml'
823
+ sheet = nil
824
+ assert_nothing_raised do
825
+ sheet = @api.corporation_sheet
826
+ end
827
+ assert_not_nil @api.last_hash
828
+ assert_kind_of Time, @api.cached_until
829
+ assert_equal 7, sheet.divisions.size
830
+ assert_equal 7, sheet.wallet_divisions.size
831
+ end
832
+
833
+ def test_nonmember_corporation_sheet_clean
834
+ Reve::API.corporation_sheet_url = XML_BASE + 'nonmember_corpsheet.xml'
835
+ sheet = nil
836
+ assert_nothing_raised do
837
+ sheet = @api.corporation_sheet :corporationid => 134300597
838
+ end
839
+ assert_not_nil @api.last_hash
840
+ assert_kind_of Time, @api.cached_until
841
+ assert_equal 0, sheet.divisions.size
842
+ assert_equal 0, sheet.wallet_divisions.size
843
+ end
844
+
845
+ def test_no_skill_in_training_clean
846
+ # Reve::API.training_skill_url = XML_BASE + 'skill_in_training-none.xml'
847
+ skill = nil
848
+ assert_nothing_raised do
849
+ skill = @api.skill_in_training(:characterid => 1, :url => XML_BASE + 'skill_in_training-none.xml')
850
+ end
851
+ assert_not_nil @api.last_hash
852
+ assert_kind_of Time, @api.cached_until
853
+ assert_equal false, skill.skill_in_training
854
+ end
855
+
856
+ =begin
857
+ # Tests Reve::API#get_xml's segment that fetches from http
858
+ def test_no_skill_in_training_clean_from_svn
859
+ skill = nil
860
+ assert_nothing_raised do
861
+ skill = @api.skill_in_training(:characterid => 123, :url => URI.parse('http://svn.crudvision.com/reve/trunk/test/xml/skill_in_training-none.xml'))
862
+ end
863
+ assert_not_nil @api.last_hash
864
+ assert_kind_of Time, @api.cached_until
865
+ assert_equal false, skill.skill_in_training
866
+ end
867
+ =end
868
+
869
+ def test_amarr_titan_skill_in_training_clean
870
+ Reve::API.training_skill_url = XML_BASE + 'skill_in_training-amarr-titan.xml'
871
+ skill = nil
872
+ assert_nothing_raised do
873
+ skill = @api.skill_in_training(:characerid => 1)
874
+ end
875
+ assert_not_nil @api.last_hash
876
+ assert_kind_of Time, @api.cached_until
877
+ assert skill.skill_in_training
878
+ assert_not_nil skill.start_time
879
+ assert_not_nil skill.type_id
880
+ assert_not_nil skill.end_time
881
+ assert_not_nil skill.to_level
882
+ assert_not_nil skill.start_sp
883
+ assert_not_nil skill.end_sp
884
+ end
885
+
886
+ def test_skill_queue_clean
887
+ Reve::API.skill_queue_url = XML_BASE + 'skill_queue.xml'
888
+ queue = nil
889
+ assert_nothing_raised do
890
+ queue = @api.skill_queue(:characerid => 1)
891
+ end
892
+ assert_kind_of(Reve::Classes::QueuedSkill, queue.first)
893
+ assert_not_nil queue.first.queue_position
894
+ assert_not_nil queue.first.start_time
895
+ assert_not_nil queue.first.type_id
896
+ assert_not_nil queue.first.end_time
897
+ assert_not_nil queue.first.to_level
898
+ assert_not_nil queue.first.start_sp
899
+ assert_not_nil queue.first.end_sp
900
+ assert_equal 9, queue.length
901
+ end
902
+
903
+ def test_corporate_medals
904
+ Reve::API.corporate_medals_url = XML_BASE + 'corp_medals.xml'
905
+ medals = nil
906
+ assert_nothing_raised do
907
+ medals = @api.corporate_medals
908
+ end
909
+ assert_equal(12, medals.size)
910
+ medals.each do |medal|
911
+ assert_kind_of(Reve::Classes::CorporateMedal, medal)
912
+ assert_kind_of(Numeric, medal.id)
913
+ assert_kind_of(NilClass, medal.issued_at) # Doesn't exist for this class, look at created_at
914
+ assert_kind_of(Time, medal.created_at)
915
+ assert_kind_of(String, medal.description)
916
+ assert_kind_of(Numeric, medal.creator_id)
917
+ assert_kind_of(String, medal.title)
918
+ end
919
+ end
920
+
921
+ def test_corporate_member_medals
922
+ Reve::API.corp_member_medals_url = XML_BASE + 'corp_member_medals.xml'
923
+ medals = nil
924
+ assert_nothing_raised do
925
+ medals = @api.corporate_member_medals
926
+ end
927
+ assert_equal(9, medals.size)
928
+ medals.each do |medal|
929
+ assert_kind_of(Reve::Classes::CorporateMemberMedal, medal)
930
+ assert_kind_of(Numeric, medal.id)
931
+ assert_kind_of(Time, medal.issued_at)
932
+ assert_kind_of(Numeric, medal.character_id)
933
+ assert_kind_of(String, medal.reason)
934
+ assert_kind_of(Numeric, medal.issuer_id)
935
+ assert_kind_of(String, medal.status)
936
+ assert medal.is_public?
937
+ assert ! medal.is_private?
938
+ end
939
+ end
940
+
941
+ def test_corporate_member_security
942
+ Reve::API.corporation_member_security_url = XML_BASE + 'corp_membersecurity.xml'
943
+ members = nil
944
+ assert_nothing_raised do
945
+ members = @api.corporate_member_security
946
+ end
947
+ assert_equal 2, members.members.size
948
+ first = members.members.first
949
+ assert_equal "Test Pilot", first.name
950
+ assert_equal 194329244, first.id
951
+ assert_equal 0, first.grantableRoles.size
952
+ assert_equal 1, first.titles.size
953
+ last = members.members.last
954
+ assert_equal 5, last.titles.size
955
+ end
956
+
957
+ def test_server_status
958
+ Reve::API.server_status_url = XML_BASE + 'server_status.xml'
959
+ status = nil
960
+ assert_nothing_raised do
961
+ status = @api.server_status
962
+ end
963
+ assert_kind_of(Reve::Classes::ServerStatus, status)
964
+ assert_equal(34444, status.players)
965
+ assert status.open?
966
+ assert status.open
967
+ end
968
+
969
+ def test_character_medals
970
+ Reve::API.character_medals_url = XML_BASE + 'char_medals.xml'
971
+ obj = nil
972
+ assert_nothing_raised do
973
+ obj = @api.character_medals
974
+ end
975
+ assert_kind_of(Reve::Classes::CharacterMedals, obj)
976
+ assert_equal(1, obj.current_corporation.size)
977
+ assert obj.other_corporation.empty?
978
+ obj.current_corporation.each do |medal|
979
+ assert_kind_of(Reve::Classes::CharacterMedal, medal)
980
+ assert_kind_of(Numeric, medal.id)
981
+ assert_kind_of(Time, medal.issued_at)
982
+ assert_kind_of(String, medal.reason)
983
+ assert_kind_of(Numeric, medal.issuer_id)
984
+ assert_kind_of(String, medal.status)
985
+ assert medal.is_public?
986
+ assert ! medal.is_private?
987
+ end
988
+
989
+ end
990
+
991
+ def test_certificate_sheet
992
+ Reve::API.certificate_tree_url = XML_BASE + 'certificate_tree.xml'
993
+ tree = nil
994
+ assert_nothing_raised do
995
+ tree = @api.certificate_tree
996
+ end
997
+ # going to hell
998
+ assert_kind_of(Reve::Classes::CertificateTree, tree)
999
+ assert_equal(1, tree.categories.size)
1000
+ assert tree.categories.all? { |cat| cat.kind_of?(Reve::Classes::CertificateCategory) }
1001
+ assert tree.categories.all? { |cat| cat.id.kind_of?(Numeric) && cat.name.kind_of?(String) }
1002
+ assert_equal(6, tree.categories.first.classes.size) # just 1 category
1003
+ assert tree.categories.first.classes.all? { |klass| klass.kind_of?(Reve::Classes::CertificateClass) }
1004
+ assert tree.categories.first.classes.all? { |klass| klass.id.kind_of?(Numeric) && klass.name.kind_of?(String) }
1005
+ assert tree.categories.first.classes.collect { |klass| klass.certificates }.flatten.all? { |cert| cert.id.kind_of?(Numeric) && cert.grade.kind_of?(Numeric) && cert.corporation_id.kind_of?(Numeric) && cert.description.kind_of?(String) }
1006
+ assert_equal(20, tree.categories.first.classes.collect { |klass| klass.certificates }.flatten.size)
1007
+ assert_equal(54, tree.categories.first.classes.collect { |klass| klass.certificates }.flatten.collect { |cert| cert.required_skills }.flatten.size)
1008
+ assert tree.categories.first.classes.collect { |klass| klass.certificates }.flatten.collect { |cert| cert.required_skills }.flatten.all? { |req| req.id.kind_of?(Numeric) && req.level.kind_of?(Numeric) }
1009
+ assert_equal(29, tree.categories.first.classes.collect { |klass| klass.certificates }.flatten.collect { |cert| cert.required_certificates }.flatten.size)
1010
+ assert tree.categories.first.classes.collect { |klass| klass.certificates }.flatten.collect { |cert| cert.required_certificates }.flatten.all? { |req| req.id.kind_of?(Numeric) && req.grade.kind_of?(Numeric) }
1011
+ end
1012
+
1013
+ def test_character_sheet_clean
1014
+ Reve::API.character_sheet_url = XML_BASE + 'character_sheet.xml'
1015
+ sheet = nil
1016
+ assert_nothing_raised do
1017
+ sheet = @api.character_sheet(:characterid => 1)
1018
+ end
1019
+ assert_not_nil @api.last_hash
1020
+ assert_kind_of Time, @api.cached_until
1021
+
1022
+ assert_not_nil sheet.name
1023
+ assert_not_nil sheet.race
1024
+ assert_not_nil sheet.bloodline
1025
+ assert_not_nil sheet.gender
1026
+ assert_not_nil sheet.id
1027
+ assert_not_nil sheet.corporation_name
1028
+ assert_not_nil sheet.corporation_id
1029
+ assert_not_nil sheet.balance
1030
+
1031
+ assert_not_nil sheet.intelligence
1032
+ assert_not_nil sheet.memory
1033
+ assert_not_nil sheet.charisma
1034
+ assert_not_nil sheet.perception
1035
+ assert_not_nil sheet.willpower
1036
+
1037
+ assert_equal 5, sheet.enhancers.size, "Implant size mismatch"
1038
+ sheet.enhancers.each do |enhancer|
1039
+ assert_kind_of Reve::Classes::AttributeEnhancer, enhancer
1040
+ end
1041
+ assert_equal 44842126, sheet.skills.inject(0) { |sum,s| sum += s.skillpoints }, "Skillpoint total mismatch"
1042
+
1043
+ sheet.skills.each do |skill|
1044
+ assert_kind_of Reve::Classes::Skill, skill
1045
+ end
1046
+ assert_equal(57, sheet.certificate_ids.size,"Certificate ID size mismatch")
1047
+ assert sheet.certificate_ids.all? { |cid| cid.kind_of?(Fixnum) }
1048
+
1049
+ # role aliases
1050
+ assert ! sheet.corporate_roles_at_hq.empty?
1051
+ assert ! sheet.corporate_roles.empty?
1052
+ assert ! sheet.corporate_roles_at_base.empty?
1053
+ assert ! sheet.corporate_roles_at_other.empty?
1054
+ # role proper methods
1055
+ assert ! sheet.corporationRolesAtHQ.empty?
1056
+ assert ! sheet.corporationRoles.empty?
1057
+ assert ! sheet.corporationRolesAtBase.empty?
1058
+ assert ! sheet.corporationRolesAtOther.empty?
1059
+
1060
+ [ :corporate_roles_at_hq, :corporate_roles, :corporate_roles_at_base, :corporate_roles_at_other ].each do |role_kind|
1061
+ r_ary = sheet.send(role_kind)
1062
+ assert r_ary.all? { |r| r.kind_of?(Reve::Classes::CorporateRole) }
1063
+ assert r_ary.all? { |r| r.name.kind_of?(String) }
1064
+ assert r_ary.all? { |r| r.id.kind_of?(Numeric) }
1065
+ end
1066
+
1067
+ assert ! sheet.corporate_titles.empty?
1068
+ assert sheet.corporate_titles.all? { |t| t.kind_of?(Reve::Classes::CorporateTitle) }
1069
+ assert sheet.corporate_titles.all? { |t| t.name.kind_of?(String) }
1070
+ assert sheet.corporate_titles.all? { |t| t.id.kind_of?(Numeric) }
1071
+
1072
+
1073
+
1074
+ end
1075
+
1076
+ # Can we reassign a URL?
1077
+ def test_assignment
1078
+ assert_nothing_raised do
1079
+ Reve::API.character_sheet_url = "hello"
1080
+ end
1081
+ end
1082
+
1083
+ # Laziness pays off I hope
1084
+ def test_all_raise_errors
1085
+ Dir.glob(File.join(XML_BASE,'errors','*.xml')).each do |file|
1086
+ # Using begin/rescue/assert here because assert_raise doesn't work with.
1087
+ # the exception superclass.
1088
+ begin
1089
+ @api.send(:check_exception,(File.open(file).read))
1090
+ rescue Exception => e
1091
+ assert e.kind_of?(Reve::Exceptions::ReveError)
1092
+ end
1093
+ end
1094
+ end
1095
+
1096
+ def test_get_xml_from_filesystem
1097
+ xmldoc = @api.send(:get_xml, File.join(XML_BASE, 'skill_in_training-none.xml'), {} )
1098
+ assert_equal File.open(File.join(XML_BASE, 'skill_in_training-none.xml')).read, xmldoc
1099
+ end
1100
+
1101
+ =begin
1102
+ def test_get_xml_from_web
1103
+ xmldoc = @api.send(:get_xml, 'http://svn.crudvision.com/reve/trunk/test/xml/skill_in_training-none.xml', {} )
1104
+ assert_equal File.open(File.join(XML_BASE, 'skill_in_training-none.xml')).read, xmldoc
1105
+ end
1106
+ =end
1107
+
1108
+ def test_get_xml_from_filesystem_missing_file
1109
+ assert_raise Errno::ENOENT do
1110
+ xmldoc = @api.send(:get_xml, File.join(XML_BASE,rand.to_s), {} )
1111
+ end
1112
+ end
1113
+ =begin
1114
+ # if this starts to fail make sure the 404 ErrorDocument includes '404 Not Found'
1115
+ def test_get_xml_from_web_missing_file
1116
+ begin
1117
+ xmldoc = @api.send(:get_xml, 'http://svn.crudvision.com/reve/trunk/test/' + rand.to_s, {} )
1118
+ rescue Exception => e
1119
+ assert e.kind_of?(Reve::Exceptions::ReveNetworkStatusException)
1120
+ assert e.message.include?('404 Not Found')
1121
+ end
1122
+ end
1123
+ =end
1124
+
1125
+ def test_format_url_request_one_arg
1126
+ req = @api.send(:format_url_request, { :a => "Hello" })
1127
+ assert_equal "?a=Hello", req
1128
+ end
1129
+
1130
+ def test_format_url_request_two_args
1131
+ req = @api.send(:format_url_request, { :a => "Hello", :world => "b" })
1132
+ assert_equal "?a=Hello&world=b", req
1133
+ end
1134
+
1135
+ def test_format_url_request_nil_value
1136
+ req = @api.send(:format_url_request, { :a => "Hello", :world => nil })
1137
+ assert_equal "?a=Hello", req
1138
+ end
1139
+
1140
+ # make sure we can make a Time object
1141
+ def test_to_time_method
1142
+ str = "2008-01-23 10:32:20"
1143
+ real = Time.utc(2008,01,23,10,32,20)
1144
+ time = nil
1145
+ assert_nothing_raised do
1146
+ time = str.to_time
1147
+ end
1148
+ assert_kind_of Time,time
1149
+ assert_equal real,time
1150
+ end
1151
+
1152
+ protected
1153
+ def get_api(userid = nil, apikey = nil, charid = nil)
1154
+ api = Reve::API.new(userid, apikey, charid)
1155
+ api.save_path = nil
1156
+ api
1157
+ end
1158
+
1159
+ # no need to test corporate cos they're the same.
1160
+ # TODO: Test with nested losses
1161
+ def kills_cleanly(meth = :personal_kills,url = File.join(XML_BASE,'kills.xml'))
1162
+ kills = nil
1163
+ assert_nothing_raised do
1164
+ kills = @api.send(meth,{:url =>url})
1165
+ end
1166
+ assert_equal 25, kills.size
1167
+ assert_equal 25, kills.collect { |k| k.victim.name }.compact.length # i should have 10 good victim names to match with 10 kills
1168
+
1169
+ # Process the Kills here to get the number of "Contained Losses" - KillLoss that are contained within another
1170
+ # KillLoss (like a Giant Secure Container); there should only be one contained loss and should be
1171
+ # 64 losses (including the contained_losses)
1172
+ losses = kills.collect { |k| k.losses }.flatten
1173
+ assert_equal 292, losses.size
1174
+ contained_losses = losses.collect { |loss| loss.contained_losses }.flatten
1175
+ assert_equal 0, contained_losses.size
1176
+
1177
+ attacker_names = kills.collect { |k| k.attackers.collect { |a| a.name } }.flatten
1178
+ assert_equal 98, attacker_names.size # total of 25 attackers (24 players + 1 NPC)
1179
+ assert_equal 2, attacker_names.grep(nil).size # npc exists once
1180
+ assert_equal 96, attacker_names.compact.length # 24 player attackers
1181
+
1182
+ assert_kind_of Integer, kills.first.victim.faction_id
1183
+ assert_kind_of String, kills.first.victim.faction_name
1184
+
1185
+ assert_kind_of String, kills.first.attackers.first.faction_name
1186
+
1187
+ kills.each do |kill|
1188
+ assert_kind_of Integer, kill.id
1189
+ assert_kind_of Integer, kill.system_id
1190
+
1191
+ assert_kind_of Time, kill.created_at
1192
+ assert_nil kill.moon_id # the ones in the kills.xml are all nil
1193
+ kill.losses.each do |loss|
1194
+ assert_not_nil(loss.type_id)
1195
+ assert_not_nil(loss.flag)
1196
+ assert_not_nil(loss.quantity_dropped)
1197
+ assert_not_nil(loss.quantity_destroyed)
1198
+ loss.contained_losses.each do |closs|
1199
+ assert_not_nil(closs.type_id)
1200
+ assert_not_nil(closs.flag)
1201
+ assert_not_nil(closs.quantity_dropped)
1202
+ assert_not_nil(closs.quantity_destroyed)
1203
+ end
1204
+ end
1205
+ end
1206
+ end
1207
+
1208
+ end