Skip to content

Commit

Permalink
Merge pull request #74 from rafaelramalho19/master
Browse files Browse the repository at this point in the history
Added support for fetching information about a certain launch
  • Loading branch information
jakewmeyer committed Feb 14, 2018
2 parents 21c8425 + 1d4be2c commit e75731e
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 16 deletions.
11 changes: 11 additions & 0 deletions src/helpers/launch-database.js
@@ -0,0 +1,11 @@
const launch = require('../builders/launch-query');
const sort = require('../builders/launch-sort');

module.exports.fetchLaunch = async (collection, req) => {
return global.db
.collection(collection)
.find(launch.launchQuery(req))
.project({ _id: 0 })
.sort(sort.launchSort(req))
.toArray();
};
18 changes: 10 additions & 8 deletions src/v2-routes/v2-launches.js
Expand Up @@ -2,8 +2,7 @@

const express = require('express');
const asyncHandle = require('express-async-handler');
const launch = require('../builders/launch-query');
const sort = require('../builders/launch-sort');
const { fetchLaunch } = require('../helpers/launch-database');

const v2 = express.Router();

Expand All @@ -21,12 +20,15 @@ v2.get('/latest', asyncHandle(async (req, res) => {

// Return all past launches filtered by querystrings
v2.get('/', asyncHandle(async (req, res) => {
const data = await global.db
.collection('launch_v2')
.find(launch.launchQuery(req))
.project({ _id: 0 })
.sort(sort.launchSort(req))
.toArray();
const data = await fetchLaunch('launch_v2', req);
res.json(data);
}));

v2.get('/all', asyncHandle(async (req, res) => {
const pastData = await fetchLaunch('launch_v2', req);
const upcomingData = await fetchLaunch('upcoming_v2', req);
const data = pastData.concat(upcomingData);

res.json(data);
}));

Expand Down
10 changes: 2 additions & 8 deletions src/v2-routes/v2-upcoming.js
Expand Up @@ -2,19 +2,13 @@

const express = require('express');
const asyncHandle = require('express-async-handler');
const launch = require('../builders/launch-query');
const sort = require('../builders/launch-sort');
const { fetchLaunch } = require('../helpers/launch-database');

const v2 = express.Router();

// Return upcoming launches filtered by querystrings
v2.get('/', asyncHandle(async (req, res) => {
const data = await global.db
.collection('upcoming_v2')
.find(launch.launchQuery(req))
.project({ _id: 0 })
.sort(sort.launchSort(req))
.toArray();
const data = await fetchLaunch('upcoming_v2', req);
res.json(data);
}));

Expand Down
42 changes: 42 additions & 0 deletions test/helpers/launch-database.test.js
@@ -0,0 +1,42 @@
const { fetchLaunch } = require('../../src/helpers/launch-database');
const app = require('../../src/app');
const queryBuilder = require('../../src/builders/launch-query');
const sortBuilder = require('../../src/builders/launch-sort');

describe('Helpers - Launch database', () => {
beforeAll((done) => {
app.on('ready', () => {
done();
});
});

it('Should call the launchQuery and launchSort functions', async (done) => {
const querySpy = jest.spyOn(queryBuilder, 'launchQuery');
const sortSpy = jest.spyOn(sortBuilder, 'launchSort');

await fetchLaunch('launches_v2', { query: [] });

expect(querySpy).toHaveBeenCalled();
expect(sortSpy).toHaveBeenCalled();

done();
});

it('Should work for the launches collections', async (done) => {
const launches = await fetchLaunch('launches_v2', { query: [] });

expect(launches).not.toBeUndefined();
expect(Array.isArray(launches)).toBe(true);

done();
});

it('Should work for the upcoming collections', async (done) => {
const launches = await fetchLaunch('upcoming_v2', { query: [] });

expect(launches).toBeDefined();
expect(Array.isArray(launches)).toBe(true);

done();
});
});
67 changes: 67 additions & 0 deletions test/routes/v2-launches.test.js
Expand Up @@ -83,3 +83,70 @@ test('It should return the latest launch', () => {
expect(response.statusCode).toBe(200);
});
});


//------------------------------------------------------------
// Launch Info Test
//------------------------------------------------------------

test('It should return a specific Launch info', () => {
return request(app.listen()).get('/v2/launches/all?flight_number=40').then((response) => {
expect(response.statusCode).toBe(200);
response.body.forEach((item) => {
expect(item).toHaveProperty('flight_number', expect.anything());
expect(item).toHaveProperty('launch_year', expect.stringMatching(/^[0-9]{4}$/));
expect(item).toHaveProperty('launch_date_unix');
expect(item).toHaveProperty('launch_date_utc', expect.anything());
expect(item).toHaveProperty('launch_date_local', expect.anything());
expect(item).toHaveProperty('rocket.rocket_id');
expect(item).toHaveProperty('rocket.rocket_name');
expect(item).toHaveProperty('rocket.rocket_type');
expect(item.rocket.first_stage.cores.length).toBeGreaterThan(0);
item.rocket.first_stage.cores.forEach((core) => {
expect(core).toHaveProperty('core_serial');
expect(core).toHaveProperty('flight', expect.any(Number));
expect(core).toHaveProperty('reused');
expect(core).toHaveProperty('land_success');
expect(core).toHaveProperty('landing_type');
expect(core).toHaveProperty('landing_vehicle');
});
expect(item.rocket.second_stage.payloads.length).toBeGreaterThan(0);
if (item.hasOwnProperty.call('cap_serial')) {
item.rocket.second_stage.payloads.forEach((payload) => {
expect(payload).toHaveProperty('payload_id');
expect(payload).toHaveProperty('reused');
expect(payload).toHaveProperty('cap_serial');
expect(payload.customers.length).toBeGreaterThan(0);
expect(payload).toHaveProperty('payload_mass_kg');
expect(payload).toHaveProperty('payload_mass_lbs');
expect(payload).toHaveProperty('orbit');
expect(payload).toHaveProperty('mass_returned_kg');
expect(payload).toHaveProperty('mass_returned_lbs');
expect(payload).toHaveProperty('flight_time_sec');
expect(payload).toHaveProperty('cargo_manifest');
});
} else {
item.rocket.second_stage.payloads.forEach((payload) => {
expect(payload).toHaveProperty('payload_id');
expect(payload).toHaveProperty('reused');
expect(payload.customers.length).toBeGreaterThan(0);
expect(payload).toHaveProperty('payload_mass_kg');
expect(payload).toHaveProperty('payload_mass_lbs');
expect(payload).toHaveProperty('orbit');
});
}
expect(item).toHaveProperty('telemetry.flight_club');
expect(item).toHaveProperty('reuse.core');
expect(item).toHaveProperty('reuse.side_core1');
expect(item).toHaveProperty('reuse.side_core2');
expect(item).toHaveProperty('reuse.fairings');
expect(item).toHaveProperty('reuse.capsule');
expect(item).toHaveProperty('launch_site.site_id');
expect(item).toHaveProperty('launch_site.site_name');
expect(item).toHaveProperty('launch_site.site_name_long');
expect(item).toHaveProperty('launch_success');
expect(item).toHaveProperty('links');
expect(item).toHaveProperty('details');
});
});
});

0 comments on commit e75731e

Please sign in to comment.