116 lines
2.5 KiB
JavaScript
116 lines
2.5 KiB
JavaScript
var hippie = require( "hippie" ),
|
|
nock = require( "nock" ),
|
|
expect = require( "chai" ).expect,
|
|
replies = require( "./replies" ),
|
|
expected = require( "./expected" ),
|
|
server = require( "../server" ).app;
|
|
|
|
describe( "Weather API", function() {
|
|
describe( "/:method endpoint", function() {
|
|
it( "The Weather Channel Source Test", function( done ) {
|
|
for ( var test in expected.WSI ) {
|
|
if ( expected.WSI.hasOwnProperty( test ) ) {
|
|
apiTest( {
|
|
method: 1,
|
|
loc: test,
|
|
expected: expected.WSI[test],
|
|
callback: function( reply ) {
|
|
done();
|
|
}
|
|
} );
|
|
}
|
|
}
|
|
} );
|
|
|
|
it( "Weather Underground Source Test", function( done ) {
|
|
for ( var test in expected.WU ) {
|
|
if ( expected.WU.hasOwnProperty( test ) ) {
|
|
apiTest( {
|
|
method: 1,
|
|
loc: test,
|
|
key: process.env.WU_API_KEY,
|
|
expected: expected.WU[test],
|
|
callback: function( reply ) {
|
|
done();
|
|
}
|
|
} );
|
|
}
|
|
}
|
|
} );
|
|
|
|
it( "Information lookup without weather lookup", function( done ) {
|
|
for ( var test in expected.noWeather ) {
|
|
if ( expected.noWeather.hasOwnProperty( test ) ) {
|
|
apiTest( {
|
|
method: 0,
|
|
loc: test,
|
|
expected: expected.noWeather[test],
|
|
callback: function( reply ) {
|
|
done();
|
|
}
|
|
} );
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
} );
|
|
|
|
function apiTest( opt ) {
|
|
|
|
var opt = extend( {}, {
|
|
method: 0,
|
|
key: "",
|
|
format: "json"
|
|
}, opt ),
|
|
url = "/" + opt.method + "?loc=" + opt.loc + "&key=" + opt.key + "&format=" + opt.format;
|
|
|
|
setupMocks( opt.loc );
|
|
|
|
hippie( server )
|
|
.json()
|
|
.get( url )
|
|
.expectStatus( 200 )
|
|
.end( function( err, res, body ) {
|
|
if ( err ) {
|
|
throw err;
|
|
}
|
|
expect( body ).to.eql( opt.expected );
|
|
opt.callback( body );
|
|
} );
|
|
}
|
|
|
|
function setupMocks( location ) {
|
|
nock.cleanAll();
|
|
|
|
nock( "http://autocomplete.wunderground.com" )
|
|
.filteringPath( function( path ) {
|
|
return "/";
|
|
} )
|
|
.get( "/" )
|
|
.reply( 200, replies[location].WUautoComplete );
|
|
|
|
nock( "http://api.wunderground.com" )
|
|
.filteringPath( function( path ) {
|
|
return "/";
|
|
} )
|
|
.get( "/" )
|
|
.reply( 200, replies[location].WUyesterday );
|
|
|
|
nock( "http://api.weather.com" )
|
|
.filteringPath( function( path ) {
|
|
return "/";
|
|
} )
|
|
.get( "/" )
|
|
.reply( 200, replies[location].WSIcurrent );
|
|
}
|
|
|
|
function extend( target ) {
|
|
var sources = [].slice.call( arguments, 1 );
|
|
sources.forEach( function( source ) {
|
|
for ( var prop in source ) {
|
|
target[prop] = source[prop];
|
|
}
|
|
} );
|
|
return target;
|
|
}
|