UNPKG

iss_node

Version:

A module that returns a readable stream based on the position of the International Space Station

109 lines (91 loc) 3.1 kB
var assert = require("assert"); var SpaceStream = require('../lib/index.js'); var stream = require('stream'); describe('SpaceStream', function () { describe('identity', function () { var testerStream1 = new SpaceStream(25554, 59); it('should be a function', function () { assert.equal(typeof SpaceStream, 'function'); }); it('should be subclassed from stream.Readable', function () { assert.equal(testerStream1 instanceof stream.Readable, true); }); }); describe('userErrorCases', function () { it('should throw an error if no arguments are provided', function () { assert.throws(function () { var a = new SpaceStream(); }, Error); }); it('should throw an error if a non-number Sattelite ID is provided', function () { assert.throws(function () { var b = new SpaceStream('ISS', 30); }, Error); }); it('should throw an error if a non-number frequency is provided', function () { assert.throws(function () { var c = new SpaceStream(255544, 'Often'); }, Error); }); it('should throw an error if an out-of-range frequency is provided', function () { assert.throws(function () { var d = new SpaceStream(255544, 61); }, Error); }); }); describe('expected data retrieval behavior', function () { this.timeout(4000); var receivedData = false; var e = new SpaceStream(25544, 55); e.setEncoding('utf8'); it('should emit "readable" events when data is available to be read', function (done) { e.on('readable', function getData(){ receivedData = e.read(); e.removeListener('readable', getData); done(); assert.ok(receivedData); }); }); it('should return JSON-stringified ISS location data from wheretheiss.at API', function(){ receivedData = JSON.parse(receivedData); assert.equal(receivedData.name, 'iss'); }); }); describe('timing', function(){ it('should not receive data before data is expected', function(done){ this.timeout(3000); var timesDataReceived = 0; var f = new SpaceStream(25544, 30); f.on('readable', function(){ timesDataReceived++; }); setTimeout(function(){ assert.equal(timesDataReceived, 0); done(); }, 1900); }); it('should receive chunks within the user-described frequency, discounting I/O delay', function(done){ this.timeout(3000); var timesDataReceived = 0; var g = new SpaceStream(25544, 59); g.on('readable', function(){ timesDataReceived++; }); setTimeout(function(){ assert(timesDataReceived >= 1); done(); }, 2000); }); }); describe('stream termination', function(){ it('should have a stop method that emits an "end" event, stopping an active stream', function(){ var ended = false; var h = new SpaceStream(25544, 30); h.on('end', function(){ ended = true; assert(ended); }); h.stopStream(); }); }); });