Skip to content

Commit

Permalink
added tests for the inatjs wrapper methods
Browse files Browse the repository at this point in the history
  • Loading branch information
pleary committed Apr 15, 2016
1 parent 231ac34 commit d4a2fe9
Show file tree
Hide file tree
Showing 14 changed files with 212 additions and 73 deletions.
3 changes: 2 additions & 1 deletion .eslintrc
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"env": {
"node": true,
"mocha": true
"mocha": true,
"es6": true
},
"extends": "eslint:recommended",
"parser": "babel-eslint"
Expand Down
4 changes: 2 additions & 2 deletions lib/controllers/v1/comments_controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ var CommentsController = class CommentsController {
static create( req, callback ) {
InaturalistAPI.iNatJSWrap( comments.create, req ).then( function( r ) {
var arr = [ { comment: r } ];
Comment.preloadInto( arr, function( ) {
Comment.preloadInto( arr, null, function( ) {
return callback( null, arr[0].comment );
});
}).catch( callback );
Expand All @@ -17,7 +17,7 @@ var CommentsController = class CommentsController {
static update( req, callback ) {
InaturalistAPI.iNatJSWrap( comments.update, req ).then( function( r ) {
var arr = [ { comment: r } ];
Comment.preloadInto( arr, function( ) {
Comment.preloadInto( arr, null, function( ) {
return callback( null, arr[0].comment );
});
}).catch( callback );
Expand Down
8 changes: 4 additions & 4 deletions lib/controllers/v1/observation_field_values_controller.js
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
"use strict";
var observation_field_values = require( "inaturalistjs" ).observation_field_values,
var observationFieldValues = require( "inaturalistjs" ).observationFieldValues,
InaturalistAPI = require( "../../inaturalist_api" );

var ObservationFieldValuesController = class ObservationFieldValuesController {

static create( req, callback ) {
InaturalistAPI.iNatJSWrap( observation_field_values.create, req ).then( function( r ) {
InaturalistAPI.iNatJSWrap( observationFieldValues.create, req ).then( function( r ) {
return callback( null, r );
}).catch( callback );
}

static update( req, callback ) {
InaturalistAPI.iNatJSWrap( observation_field_values.update, req ).then( function( r ) {
InaturalistAPI.iNatJSWrap( observationFieldValues.update, req ).then( function( r ) {
return callback( null, r );
}).catch( callback );
}

static delete( req, callback ) {
InaturalistAPI.iNatJSWrap( observation_field_values.delete, req ).then( function( r ) {
InaturalistAPI.iNatJSWrap( observationFieldValues.delete, req ).then( function( r ) {
return callback( null, r );
}).catch( callback );
}
Expand Down
37 changes: 28 additions & 9 deletions lib/inaturalist_api.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ InaturalistAPI.server = function( ) {
var CommentsController = require( "./controllers/v1/comments_controller" ),
IdentificationsController = require( "./controllers/v1/identifications_controller" ),
ObservationFieldValuesContoller = require( "./controllers/v1/observation_field_values_controller" ),
ObservationsController = require( "./controllers/v1/observations_controller" ),
PhotosController = require( "./controllers/v1/photos_controller" );

// log request times. Doing this outside prepareApp since
Expand All @@ -66,20 +67,38 @@ InaturalistAPI.server = function( ) {

app.get( "/v1", routesV1.docs );
app.get( "/v1/swagger.json", routesV1.swaggerJSON );
app.post( "/v1/observations", routesV1.observations_create );
app.put( "/v1/observations/:id", routesV1.observations_update );
app.delete( "/v1/observations/:id", routesV1.observations_delete );
app.post( "/v1/observations", ( req, res ) => {
routesV1.default( ObservationsController.create, req, res );
});
app.put( "/v1/observations/:id", ( req, res ) => {
routesV1.default( ObservationsController.update, req, res );
});
app.delete( "/v1/observations/:id", ( req, res ) => {
routesV1.default( ObservationsController.delete, req, res );
});
app.get( "/v1/observations", routesV1.observations_index );
app.get( "/v1/observations/identifiers", routesV1.observations_identifiers );
app.get( "/v1/observations/observers", routesV1.observations_observers );
app.get( "/v1/observations/species_counts", routesV1.species_counts );
app.get( "/v1/observations/:id", routesV1.observations_show );
app.post( "/v1/observations/:id/fave", routesV1.observations_fave );
app.delete( "/v1/observations/:id/unfave", routesV1.observations_unfave );
app.post( "/v1/observations/:id/review", routesV1.observations_review );
app.delete( "/v1/observations/:id/review", routesV1.observations_unreview );
app.post( "/v1/observations/:id/quality/:metric", routesV1.observations_set_quality_metric );
app.delete( "/v1/observations/:id/quality/:metric", routesV1.observations_delete_quality_metric );
app.post( "/v1/observations/:id/fave", ( req, res ) => {
routesV1.default( ObservationsController.fave, req, res );
});
app.delete( "/v1/observations/:id/unfave", ( req, res ) => {
routesV1.default( ObservationsController.unfave, req, res );
});
app.post( "/v1/observations/:id/review", ( req, res ) => {
routesV1.default( ObservationsController.review, req, res );
});
app.delete( "/v1/observations/:id/review", ( req, res ) => {
routesV1.default( ObservationsController.unreview, req, res );
});
app.post( "/v1/observations/:id/quality/:metric", ( req, res ) => {
routesV1.default( ObservationsController.setQualityMetric, req, res );
});
app.delete( "/v1/observations/:id/quality/:metric", ( req, res ) => {
routesV1.default( ObservationsController.deleteQualityMetric, req, res );
});
app.get( "/v1/taxa/autocomplete", routesV1.taxa_autocomplete );
app.get( "/v1/taxa/:id", routesV1.taxa_show );
app.get( "/v1/places/autocomplete", routesV1.places_autocomplete );
Expand Down
2 changes: 1 addition & 1 deletion lib/models/comment.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ var Comment = class Comment extends Model {
DBModel.fetchBelongsTo( comments, User, callback );
}

static preloadInto( arr, callback ) {
static preloadInto( arr, localeOpts, callback ) {
DBModel.fetchBelongsTo( arr, Comment, function( ) {
var comments = arr.map( function( i ) { return i.comment; } );
Comment.preloadUsers( comments, function( ) {
Expand Down
54 changes: 0 additions & 54 deletions lib/routes_v1.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,60 +40,6 @@ routesV1.swaggerJSON = function( req, res ) {
// Observations
//

routesV1.observations_create = function( req, res ) {
ObservationsController.create( req, function( err, data ) {
util.renderJSONPresponse( req, res, err, data );
});
};

routesV1.observations_update = function( req, res ) {
ObservationsController.update( req, function( err, data ) {
util.renderJSONPresponse( req, res, err, data );
});
};

routesV1.observations_delete = function( req, res ) {
ObservationsController.delete( req, function( err, data ) {
util.renderJSONPresponse( req, res, err, data );
});
};

routesV1.observations_fave = function( req, res ) {
ObservationsController.fave( req, function( err, data ) {
util.renderJSONPresponse( req, res, err, data );
});
};

routesV1.observations_unfave = function( req, res ) {
ObservationsController.unfave( req, function( err, data ) {
util.renderJSONPresponse( req, res, err, data );
});
};

routesV1.observations_review = function( req, res ) {
ObservationsController.review( req, function( err, data ) {
util.renderJSONPresponse( req, res, err, data );
});
};

routesV1.observations_unreview = function( req, res ) {
ObservationsController.unreview( req, function( err, data ) {
util.renderJSONPresponse( req, res, err, data );
});
};

routesV1.observations_set_quality_metric = function( req, res ) {
ObservationsController.setQualityMetric( req, function( err, data ) {
util.renderJSONPresponse( req, res, err, data );
});
};

routesV1.observations_delete_quality_metric = function( req, res ) {
ObservationsController.deleteQualityMetric( req, function( err, data ) {
util.renderJSONPresponse( req, res, err, data );
});
};

routesV1.observations_index = function( req, res ) {
req.query.ttl = req.query.ttl || 300;
ObservationsController.search( req, function( err, data ) {
Expand Down
42 changes: 41 additions & 1 deletion lib/test_helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ var fs = require( "fs" ),
_ = require( "underscore" ),
async = require( "async" ),
Promise = require( "bluebird" ),
expect = require( "chai" ).expect,
sinon = require( "sinon" ),
pgClient = require( "./pg_client" ),
esClient = require( "./es_client" ),
environment = process.env.NODE_ENV || global.config.environment,
Expand Down Expand Up @@ -86,9 +88,47 @@ testHelper.loadPostgresqlFixtures = function( callback ) {
})
};

testHelper.testInatJSPreload = function( controller, endpoint, method, klass, done ) {
var endpointStub = sinon.stub( endpoint, method, function( ) {
return new Promise( function( resolve ) {
var r = { id: 1 }
if( klass.modelName === "observation" &&
( method === "create" || method === "update" ) ) {
r = [ r ];
}
resolve( r );
});
});
var preloadStub = sinon.stub( klass, "preloadInto", function( arr, l, cb ) {
arr[0] = { [klass.modelName]: "success" };
cb( );
});
controller[ method ]( { params: { id: 1 }, headers: { authorization: "auth" } }, function( e, c ) {
expect( c ).to.deep.eq( "success" )
endpointStub.restore( );
preloadStub.restore( );
done( );
});
};

testHelper.testInatJSNoPreload = function( controller, endpoint, method, done ) {
var endpointStub = sinon.stub( endpoint, method, function( ) {
return new Promise( function( resolve ) {
resolve( "success" );
});
});
controller[ method ]( { headers: { authorization: "auth" } }, function( e, c ) {
expect( c ).to.eq( "success" )
endpointStub.restore( );
done( );
});
};

module.exports = {
createIndices: testHelper.createIndices,
deleteIndices: testHelper.deleteIndices,
loadElasticsearchFixtures: testHelper.loadElasticsearchFixtures,
loadPostgresqlFixtures: testHelper.loadPostgresqlFixtures
loadPostgresqlFixtures: testHelper.loadPostgresqlFixtures,
testInatJSPreload: testHelper.testInatJSPreload,
testInatJSNoPreload: testHelper.testInatJSNoPreload
};
1 change: 1 addition & 0 deletions lib/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ var util = class util {

static localeOpts( req ) {
var localeOpts = { };
if( !req.query ) { return localeOpts; }
if( req.query.locale ) { localeOpts.locale = req.query.locale; }
localeOpts.locale = localeOpts.locale || "en";
if( req.inat && req.inat.preferredPlace ) {
Expand Down
18 changes: 18 additions & 0 deletions test/controllers/v1/comments_controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
var comments = require( "inaturalistjs" ).comments,
testHelper = require( "../../../lib/test_helper" ),
Comment = require( "../../../lib/models/comment" ),
CommentsController = require( "../../../lib/controllers/v1/comments_controller" );

describe( "CommentsController", function( ) {
it( "creates", function( done ) {
testHelper.testInatJSPreload( CommentsController, comments, "create", Comment, done );
});

it( "updates", function( done ) {
testHelper.testInatJSPreload( CommentsController, comments, "update", Comment, done );
});

it( "deletes", function( done ) {
testHelper.testInatJSNoPreload( CommentsController, comments, "delete", done );
});
});
21 changes: 21 additions & 0 deletions test/controllers/v1/identifications_controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
var identifications = require( "inaturalistjs" ).identifications,
testHelper = require( "../../../lib/test_helper" ),
Identification = require( "../../../lib/models/identification" ),
IdentificationsController = require( "../../../lib/controllers/v1/identifications_controller" );

describe( "IdentificationsController", function( ) {
it( "creates", function( done ) {
testHelper.testInatJSPreload(
IdentificationsController, identifications, "create", Identification, done );
});

it( "updates", function( done ) {
testHelper.testInatJSPreload(
IdentificationsController, identifications, "update", Identification, done );
});

it( "deletes", function( done ) {
testHelper.testInatJSNoPreload(
IdentificationsController, identifications, "delete", done );
});
});
21 changes: 21 additions & 0 deletions test/controllers/v1/observation_field_values_controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
var observationFieldValues = require( "inaturalistjs" ).observationFieldValues,
testHelper = require( "../../../lib/test_helper" ),
ObservationFieldValuesController =
require( "../../../lib/controllers/v1/observation_field_values_controller" );

describe( "ObservationFieldValuesController", function( ) {
it( "creates", function( done ) {
testHelper.testInatJSNoPreload(
ObservationFieldValuesController, observationFieldValues, "create", done );
});

it( "updates", function( done ) {
testHelper.testInatJSNoPreload(
ObservationFieldValuesController, observationFieldValues, "update", done );
});

it( "deletes", function( done ) {
testHelper.testInatJSNoPreload(
ObservationFieldValuesController, observationFieldValues, "delete", done );
});
});
50 changes: 49 additions & 1 deletion test/controllers/v1/observations_controller.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
var expect = require( "chai" ).expect,
moment = require( "moment" ),
_ = require( "underscore" ),
observations = require( "inaturalistjs" ).observations,
testHelper = require( "../../../lib/test_helper" ),
Observation = require( "../../../lib/models/observation" ),
Project = require( "../../../lib/models/project" ),
List = require( "../../../lib/models/list" ),
// testHelper = require( "../../../lib/test_helper" ),
Expand All @@ -19,11 +22,56 @@ var Q = function( params, callback ) {
_parsedUrl: { query: queryString }}, callback );
};

describe( "InaturalistAPI", function( ) {
describe( "ObservationsController", function( ) {
it( "uses the test ENV", function( ) {
expect( process.env.NODE_ENV ).to.eq( "test" );
});

it( "creates", function( done ) {
testHelper.testInatJSPreload(
ObservationsController, observations, "create", Observation, done );
});

it( "updates", function( done ) {
testHelper.testInatJSPreload(
ObservationsController, observations, "update", Observation, done );
});

it( "deletes", function( done ) {
testHelper.testInatJSNoPreload(
ObservationsController, observations, "delete", done );
});

it( "faves", function( done ) {
testHelper.testInatJSPreload(
ObservationsController, observations, "fave", Observation, done );
});

it( "unfaves", function( done ) {
testHelper.testInatJSPreload(
ObservationsController, observations, "unfave", Observation, done );
});

it( "reviews", function( done ) {
testHelper.testInatJSNoPreload(
ObservationsController, observations, "review", done );
});

it( "unreviews", function( done ) {
testHelper.testInatJSNoPreload(
ObservationsController, observations, "unreview", done );
});

it( "sets quality metrics", function( done ) {
testHelper.testInatJSNoPreload(
ObservationsController, observations, "setQualityMetric", done );
});

it( "deletes quality metrics", function( done ) {
testHelper.testInatJSNoPreload(
ObservationsController, observations, "deleteQualityMetric", done );
});

describe( "reqToElasticQuery", function( ) {
it( "can apply params from project rules", function( done ) {
Project.findByID( 543, function( err, p ) {
Expand Down
9 changes: 9 additions & 0 deletions test/controllers/v1/photos_controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
var photos = require( "inaturalistjs" ).photos,
testHelper = require( "../../../lib/test_helper" ),
PhotosController = require( "../../../lib/controllers/v1/photos_controller" );

describe( "PhotosController", function( ) {
it( "creates", function( done ) {
testHelper.testInatJSNoPreload( PhotosController, photos, "create", done );
});
});
Loading

0 comments on commit d4a2fe9

Please sign in to comment.