spacex 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe SPACEX::History do
4
+ context '#info', vcr: { cassette_name: 'history/info' } do
5
+ subject do
6
+ SPACEX::History.info
7
+ end
8
+
9
+ it 'returns all historical events when no id is passed' do
10
+ first_subject = subject.first
11
+ expect(first_subject.id).to eq 1
12
+ expect(first_subject.title).to eq 'Falcon 1 Makes History'
13
+ expect(first_subject.event_date_utc).to eq '2008-09-28T23:15:00Z'
14
+ expect(first_subject.event_date_unix).to eq 1_222_643_700
15
+ expect(first_subject.flight_number).to eq 4
16
+ expect(first_subject.details).to eq(
17
+ 'Falcon 1 becomes the first privately '\
18
+ 'developed liquid fuel rocket to reach Earth orbit.'
19
+ )
20
+ expect(first_subject.links).to eq(
21
+ 'reddit' => nil,
22
+ 'article' => 'http://www.spacex.com/news/2013/02/11/flight-4-launch-update-0',
23
+ 'wikipedia' => 'https://en.wikipedia.org/wiki/Falcon_1'
24
+ )
25
+ end
26
+ end
27
+
28
+ context '#info(4)', vcr: { cassette_name: 'history/info/4' } do
29
+ subject do
30
+ SPACEX::History.info(4)
31
+ end
32
+
33
+ it 'returns Historical event info for event id 4' do
34
+ expect(subject.id).to eq 4
35
+ expect(subject.title).to eq 'Falcon 9 First Flight'
36
+ expect(subject.event_date_utc).to eq '2010-06-04T18:45:00Z'
37
+ expect(subject.event_date_unix).to eq 1_275_677_100
38
+ expect(subject.flight_number).to eq 6
39
+ expect(subject.details).to eq(
40
+ 'Met 100% of mission objectives on the first flight!'
41
+ )
42
+ expect(subject.links).to eq(
43
+ 'reddit' => nil,
44
+ 'article' => 'http://www.bbc.com/news/10209704',
45
+ 'wikipedia' =>
46
+ 'https://en.wikipedia.org/wiki/Dragon_Spacecraft_Qualification_Unit'
47
+ )
48
+ end
49
+ end
50
+ end
@@ -73,7 +73,7 @@ describe SPACEX::Launches do
73
73
  end
74
74
  end
75
75
 
76
- context '#info', vcr: { cassette_name: 'launches' } do
76
+ context '#info', vcr: { cassette_name: 'launches/info' } do
77
77
  subject do
78
78
  SPACEX::Launches.info
79
79
  end
@@ -151,7 +151,7 @@ describe SPACEX::Launches do
151
151
  end
152
152
 
153
153
  it 'returns the subject.last scheduled launch' do
154
- expect(subject.last.flight_number).to eq 90
154
+ expect(subject.last.flight_number).to eq 91
155
155
  expect(subject.last.mission_name).to eq 'GPS IIIA-3'
156
156
  expect(subject.last.launch_year).to eq '2019'
157
157
  expect(subject.last.launch_date_unix).to eq 1_569_888_000
@@ -208,6 +208,124 @@ describe SPACEX::Launches do
208
208
  end
209
209
  end
210
210
 
211
+ context '#info(68)', vcr: { cassette_name: 'launches/68' } do
212
+ subject do
213
+ SPACEX::Launches.info(68)
214
+ end
215
+
216
+ it 'returns info for flight number 68' do
217
+ expect(subject.flight_number).to eq(68)
218
+ expect(subject.rocket.rocket_name).to eq('Falcon 9')
219
+ expect(subject.rocket.first_stage.cores.first.core_serial).to eq('B1049')
220
+ expect(subject.rocket.second_stage.payloads.first.orbit_params.regime).to eq('geostationary')
221
+
222
+ expect(subject).to eq(
223
+ 'flight_number' => 68,
224
+ 'mission_name' => 'Telstar 18V',
225
+ 'mission_id' => [
226
+ 'F4F83DE'
227
+ ],
228
+ 'launch_year' => '2018',
229
+ 'launch_date_unix' => 1_536_554_700,
230
+ 'launch_date_utc' => '2018-09-10T04:45:00.000Z',
231
+ 'launch_date_local' => '2018-09-10T00:45:00-04:00',
232
+ 'is_tentative' => false,
233
+ 'tentative_max_precision' => 'hour',
234
+ 'rocket' => {
235
+ 'rocket_id' => 'falcon9',
236
+ 'rocket_name' => 'Falcon 9',
237
+ 'rocket_type' => 'FT',
238
+ 'first_stage' => {
239
+ 'cores' => [{
240
+ 'core_serial' => 'B1049',
241
+ 'flight' => 1,
242
+ 'block' => 5,
243
+ 'reused' => false,
244
+ 'land_success' => true,
245
+ 'landing_intent' => true,
246
+ 'landing_type' => 'ASDS',
247
+ 'landing_vehicle' => 'OCISLY'
248
+ }]
249
+ },
250
+ 'second_stage' => {
251
+ 'block' => 5,
252
+ 'payloads' => [{
253
+ 'payload_id' => 'Telstar 18V',
254
+ 'norad_id' => [43_611],
255
+ 'reused' => false,
256
+ 'customers' => ['Telesat'],
257
+ 'nationality' => 'Canada',
258
+ 'manufacturer' => 'SSL',
259
+ 'payload_type' => 'Satellite',
260
+ 'payload_mass_kg' => 7060,
261
+ 'payload_mass_lbs' => 15_564.64,
262
+ 'orbit' => 'GTO',
263
+ 'orbit_params' => {
264
+ 'reference_system' => 'geocentric',
265
+ 'regime' => 'geostationary',
266
+ 'longitude' => 138,
267
+ 'semi_major_axis_km' => 7226.647,
268
+ 'eccentricity' => 0.0013608,
269
+ 'periapsis_km' => 838.677,
270
+ 'apoapsis_km' => 858.346,
271
+ 'inclination_deg' => 98.8086,
272
+ 'period_min' => 101.897,
273
+ 'lifespan_years' => 15,
274
+ 'epoch' => '2018-09-07T06:29:40.000Z',
275
+ 'mean_motion' => 14.13180055,
276
+ 'raan' => 322.194,
277
+ 'arg_of_pericenter' => 130.3173,
278
+ 'mean_anomaly' => 328.1487
279
+ }
280
+ }]
281
+ },
282
+ 'fairings' => {
283
+ 'reused' => false,
284
+ 'recovery_attempt' => false,
285
+ 'recovered' => false,
286
+ 'ship' => nil
287
+ }
288
+ },
289
+ 'ships' => %w[OCISLY HAWK GOQUEST],
290
+ 'telemetry' => {
291
+ 'flight_club' => 'https://www.flightclub.io/result/2d?code=T18V'
292
+ },
293
+ 'launch_site' => {
294
+ 'site_id' => 'ccafs_slc_40',
295
+ 'site_name' => 'CCAFS SLC 40',
296
+ 'site_name_long' => 'Cape Canaveral Air Force Station Space Launch Complex 40'
297
+ },
298
+ 'launch_success' => true,
299
+ 'links' => {
300
+ 'mission_patch' => 'https://images2.imgbox.com/ba/db/3plcm5IB_o.png',
301
+ 'mission_patch_small' => 'https://images2.imgbox.com/2d/d2/jStsqeLC_o.png',
302
+ 'reddit_campaign' => 'https://www.reddit.com/r/spacex/comments/95cte4/telstar_18v_apstar_5c_launch_campaign_thread/',
303
+ 'reddit_launch' => 'https://www.reddit.com/r/spacex/comments/9e7bmq/rspacex_telstar_18v_official_launch_discussion/',
304
+ 'reddit_recovery' => 'https://www.reddit.com/r/spacex/comments/9erxlh/telstar_18_vantage_recovery_thread/',
305
+ 'reddit_media' => 'https://www.reddit.com/r/spacex/comments/9ebkqw/rspacex_telstar_18v_media_thread_videos_images/',
306
+ 'presskit' => 'https://www.spacex.com/sites/spacex/files/telstar18vantagepresskit.pdf',
307
+ 'article_link' => 'https://spaceflightnow.com/2018/09/10/spacex-telesat-achieve-repeat-success-with-midnight-hour-launch/',
308
+ 'wikipedia' => 'https://en.wikipedia.org/wiki/Telstar_18V',
309
+ 'video_link' => 'https://www.youtube.com/watch?v=Apw3xqwsG1U',
310
+ 'flickr_images' => [
311
+ 'https://farm2.staticflickr.com/1878/43690848045_492ef182dd_o.jpg',
312
+ 'https://farm2.staticflickr.com/1856/43881229604_6d42e838b6_o.jpg',
313
+ 'https://farm2.staticflickr.com/1852/43881223704_93777e34af_o.jpg',
314
+ 'https://farm2.staticflickr.com/1841/43881217094_558b7b214e_o.jpg',
315
+ 'https://farm2.staticflickr.com/1869/43881193934_423eff8c86_o.jpg'
316
+ ]
317
+ },
318
+ 'details' => 'SpaceX\'s sixteenth flight of 2018 launched the Telstar '\
319
+ '18v GEO communication satellite for Telesat, the second launch for '\
320
+ 'the canadian company in a few months. The first stage was a new '\
321
+ 'Falcon 9 V1.2 Block 5 which was successfully recovered on OCISLY.',
322
+ 'upcoming' => false,
323
+ 'static_fire_date_utc' => '2018-09-05T07:21:00.000Z',
324
+ 'static_fire_date_unix' => 1_536_132_060
325
+ )
326
+ end
327
+ end
328
+
211
329
  context '#next', vcr: { cassette_name: 'launches/next' } do
212
330
  subject do
213
331
  SPACEX::Launches.next
@@ -274,4 +392,261 @@ describe SPACEX::Launches do
274
392
  expect(subject.static_fire_date_utc).to eq nil
275
393
  end
276
394
  end
395
+
396
+ context '#upcoming', vcr: { cassette_name: 'launches/upcoming' } do
397
+ subject do
398
+ SPACEX::Launches.upcoming
399
+ end
400
+
401
+ it 'returns and array of upcoming launch hashes' do
402
+ expect(subject).to be_an Array
403
+ expect(subject.first).to be_a Hash
404
+ expect(subject.all?(&:upcoming)).to be true
405
+ end
406
+
407
+ it 'returns launches scheduled in the future' do
408
+ subject.each do |launch|
409
+ expect(launch.launch_year).to be >= Time.now.year.to_s
410
+ expect(Time.parse(launch.launch_date_utc)).to be >= Time.now.utc
411
+ expect(launch.rocket.first_stage.cores.first.land_success).to be nil
412
+ expect(launch.launch_success).to be nil
413
+ end
414
+ end
415
+
416
+ context 'returns upcoming launches' do
417
+ it 'returns the next upcoming launch' do
418
+ expect(subject.first.flight_number).to eq 70
419
+ expect(subject.first.mission_name).to eq 'Es’hail 2'
420
+ expect(subject.first.mission_id).to eq []
421
+ expect(subject.first.launch_year).to eq '2018'
422
+ expect(subject.first.launch_date_unix).to eq 1_542_228_360
423
+ expect(subject.first.launch_date_utc).to eq '2018-11-14T20:46:00.000Z'
424
+ expect(subject.first.launch_date_local).to eq '2018-11-14T15:46:00-05:00'
425
+ expect(subject.first.is_tentative).to eq true
426
+ expect(subject.first.tentative_max_precision).to eq 'hour'
427
+ expect(subject.first.rocket.rocket_id).to eq 'falcon9'
428
+ expect(subject.first.rocket.rocket_name).to eq 'Falcon 9'
429
+ expect(subject.first.rocket.rocket_type).to eq 'FT'
430
+ expect(subject.first.rocket.first_stage.cores).to be_an(Array)
431
+ expect(subject.first.rocket.first_stage.cores.first).to eq(
432
+ 'core_serial' => nil,
433
+ 'flight' => nil,
434
+ 'block' => 5,
435
+ 'gridfins' => true,
436
+ 'legs' => true,
437
+ 'reused' => false,
438
+ 'land_success' => nil,
439
+ 'landing_intent' => true,
440
+ 'landing_type' => 'ASDS',
441
+ 'landing_vehicle' => 'OCISLY'
442
+ )
443
+ expect(subject.first.rocket.second_stage.block).to eq 5
444
+ expect(subject.first.rocket.second_stage.payloads).to be_an(Array)
445
+ expect(subject.first.rocket.second_stage.payloads.first).to eq(
446
+ 'payload_id' => 'Es’hail 2',
447
+ 'norad_id' => [],
448
+ 'reused' => false,
449
+ 'customers' => ['Es’hailSat'],
450
+ 'nationality' => 'Qatar',
451
+ 'manufacturer' => 'Mitsubishi Electric',
452
+ 'payload_type' => 'Satellite',
453
+ 'payload_mass_kg' => 3000,
454
+ 'payload_mass_lbs' => 6613.868,
455
+ 'orbit' => 'GTO',
456
+ 'orbit_params' => {
457
+ 'reference_system' => 'geocentric',
458
+ 'regime' => 'geostationary',
459
+ 'longitude' => 25.5,
460
+ 'semi_major_axis_km' => nil,
461
+ 'eccentricity' => nil,
462
+ 'periapsis_km' => nil,
463
+ 'apoapsis_km' => nil,
464
+ 'inclination_deg' => nil,
465
+ 'period_min' => nil,
466
+ 'lifespan_years' => 15,
467
+ 'epoch' => nil,
468
+ 'mean_motion' => nil,
469
+ 'raan' => nil,
470
+ 'arg_of_pericenter' => nil,
471
+ 'mean_anomaly' => nil
472
+ }
473
+ )
474
+ expect(subject.first.rocket.fairings).to eq(
475
+ 'reused' => false,
476
+ 'recovery_attempt' => false,
477
+ 'recovered' => false,
478
+ 'ship' => nil
479
+ )
480
+ expect(subject.first.ships).to eq []
481
+ expect(subject.first.telemetry.flight_club).to eq nil
482
+ expect(subject.first.launch_site).to eq(
483
+ 'site_id' => 'ccafs_slc_40',
484
+ 'site_name' => 'CCAFS SLC 40',
485
+ 'site_name_long' => 'Cape Canaveral Air Force Station Space Launch Complex 40'
486
+ )
487
+ expect(subject.first.launch_success).to eq nil
488
+ expect(subject.first.links).to eq(
489
+ 'mission_patch' => nil,
490
+ 'mission_patch_small' => nil,
491
+ 'reddit_campaign' => 'https://www.reddit.com/r/spacex/comments/9p82jt/eshail_2_launch_campaign_thread/',
492
+ 'reddit_launch' => nil,
493
+ 'reddit_recovery' => nil,
494
+ 'reddit_media' => nil,
495
+ 'presskit' => nil,
496
+ 'article_link' => nil,
497
+ 'wikipedia' => nil,
498
+ 'video_link' => nil,
499
+ 'flickr_images' => []
500
+ )
501
+ expect(subject.first.details).to eq 'SpaceX\'s eighteenth flight of 2018 will '\
502
+ 'be its first for Es\'hailSat. Es\'hail-2 is a communications satellite '\
503
+ 'that will deliver television and internet to Qatar and the surrounding '\
504
+ 'region. It will be launched into a geostationary transfer orbit from '\
505
+ 'LC-39A at Kennedy Space Center. The booster is expected to land on OCISLY.'
506
+ expect(subject.first.upcoming).to eq true
507
+ expect(subject.first.static_fire_date_utc).to eq nil
508
+ expect(subject.first.static_fire_date_unix).to eq nil
509
+ end
510
+
511
+ it 'returns the last upcoming launch' do
512
+ expect(subject.last.flight_number).to eq 91
513
+ expect(subject.last.mission_name).to eq 'GPS IIIA-3'
514
+ expect(subject.last.mission_id).to eq []
515
+ expect(subject.last.launch_year).to eq '2019'
516
+ expect(subject.last.launch_date_unix).to eq 1_569_888_000
517
+ expect(subject.last.launch_date_utc).to eq '2019-10-01T00:00:00.000Z'
518
+ expect(subject.last.launch_date_local).to eq '2019-09-30T20:00:00-04:00'
519
+ expect(subject.last.is_tentative).to eq true
520
+ expect(subject.last.tentative_max_precision).to eq 'month'
521
+ expect(subject.last.rocket.rocket_id).to eq 'falcon9'
522
+ expect(subject.last.rocket.rocket_name).to eq 'Falcon 9'
523
+ expect(subject.last.rocket.rocket_type).to eq 'FT'
524
+ expect(subject.last.rocket.first_stage.cores).to be_an(Array)
525
+ expect(subject.last.rocket.first_stage.cores.first).to eq(
526
+ 'core_serial' => nil,
527
+ 'flight' => nil,
528
+ 'block' => nil,
529
+ 'gridfins' => nil,
530
+ 'legs' => nil,
531
+ 'reused' => false,
532
+ 'land_success' => nil,
533
+ 'landing_intent' => nil,
534
+ 'landing_type' => nil,
535
+ 'landing_vehicle' => nil
536
+ )
537
+ expect(subject.last.rocket.second_stage.block).to eq nil
538
+ expect(subject.last.rocket.second_stage.payloads).to be_an(Array)
539
+ expect(subject.last.rocket.second_stage.payloads.first).to eq(
540
+ 'payload_id' => 'GPS IIIA-3',
541
+ 'norad_id' => [],
542
+ 'reused' => false,
543
+ 'customers' => ['USAF'],
544
+ 'nationality' => 'United States',
545
+ 'manufacturer' => 'Lockheed Martin',
546
+ 'payload_type' => 'Satellite',
547
+ 'payload_mass_kg' => 3880,
548
+ 'payload_mass_lbs' => 8553.94,
549
+ 'orbit' => 'MEO',
550
+ 'orbit_params' => {
551
+ 'reference_system' => nil,
552
+ 'regime' => nil,
553
+ 'longitude' => nil,
554
+ 'semi_major_axis_km' => nil,
555
+ 'eccentricity' => nil,
556
+ 'periapsis_km' => nil,
557
+ 'apoapsis_km' => nil,
558
+ 'inclination_deg' => nil,
559
+ 'period_min' => nil,
560
+ 'lifespan_years' => 15,
561
+ 'epoch' => nil,
562
+ 'mean_motion' => nil,
563
+ 'raan' => nil,
564
+ 'arg_of_pericenter' => nil,
565
+ 'mean_anomaly' => nil
566
+ }
567
+ )
568
+ expect(subject.last.rocket.fairings).to eq(
569
+ 'reused' => false,
570
+ 'recovery_attempt' => nil,
571
+ 'recovered' => nil,
572
+ 'ship' => nil
573
+ )
574
+ expect(subject.last.ships).to eq []
575
+ expect(subject.last.telemetry.flight_club).to eq nil
576
+ expect(subject.last.launch_site).to eq(
577
+ 'site_id' => 'ccafs_slc_40',
578
+ 'site_name' => 'CCAFS SLC 40',
579
+ 'site_name_long' => 'Cape Canaveral Air Force Station Space Launch Complex 40'
580
+ )
581
+ expect(subject.last.launch_success).to eq nil
582
+ expect(subject.last.links).to eq(
583
+ 'mission_patch' => nil,
584
+ 'mission_patch_small' => nil,
585
+ 'reddit_campaign' => nil,
586
+ 'reddit_launch' => nil,
587
+ 'reddit_recovery' => nil,
588
+ 'reddit_media' => nil,
589
+ 'presskit' => nil,
590
+ 'article_link' => nil,
591
+ 'wikipedia' => nil,
592
+ 'video_link' => nil,
593
+ 'flickr_images' => []
594
+ )
595
+ expect(subject.last.details).to eq nil
596
+ expect(subject.last.upcoming).to eq true
597
+ expect(subject.last.static_fire_date_utc).to eq nil
598
+ expect(subject.last.static_fire_date_unix).to eq nil
599
+ end
600
+ end
601
+ end
602
+
603
+ context '#all', vcr: { cassette_name: 'launches/all' } do
604
+ subject do
605
+ SPACEX::Launches.all
606
+ end
607
+
608
+ it 'returns all launches' do
609
+ expect(subject.first.flight_number).to eq 1
610
+ expect(subject.first.mission_name).to eq 'FalconSat'
611
+ end
612
+ end
613
+
614
+ context '#past', vcr: { cassette_name: 'launches/past' } do
615
+ subject do
616
+ SPACEX::Launches.past
617
+ end
618
+
619
+ it 'returns and array of launch hashes' do
620
+ expect(subject).to be_an Array
621
+ expect(subject.first).to be_a Hash
622
+ end
623
+
624
+ it 'returns the correct number of launches' do
625
+ expect(subject.count).to eq 69
626
+ end
627
+
628
+ context 'returns past launches' do
629
+ it 'returns the first launch' do
630
+ expect(subject.first.flight_number).to eq(1)
631
+ expect(subject.first.mission_name).to eq('FalconSat')
632
+ expect(subject.first.rocket.rocket_name).to eq('Falcon 1')
633
+ expect(subject.first.rocket.first_stage.cores.first.core_serial).to eq('Merlin1A')
634
+ expect(subject.first.rocket.second_stage.payloads.first.payload_id).to eq('FalconSAT-2')
635
+ expect(subject.first.rocket.second_stage.payloads.first.orbit_params.regime).to eq('low-earth')
636
+ expect(subject.first.launch_site.site_id).to eq('kwajalein_atoll')
637
+ expect(subject.first.launch_success).to eq(false)
638
+ end
639
+
640
+ it 'returns the last past launch' do
641
+ expect(subject.last.flight_number).to eq(69)
642
+ expect(subject.last.mission_name).to eq('SAOCOM 1A')
643
+ expect(subject.last.rocket.rocket_name).to eq('Falcon 9')
644
+ expect(subject.last.rocket.first_stage.cores.first.core_serial).to eq('B1048')
645
+ expect(subject.last.rocket.second_stage.payloads.first.payload_id).to eq('SAOCOM 1A')
646
+ expect(subject.last.rocket.second_stage.payloads.first.orbit_params.regime).to eq('sun-synchronous')
647
+ expect(subject.last.launch_site.site_id).to eq('vafb_slc_4e')
648
+ expect(subject.last.launch_success).to eq(true)
649
+ end
650
+ end
651
+ end
277
652
  end