@@ -19,6 +19,11 @@ var TestDataBuilder = require('./helpers/test-data-builder');
1919var ref = TestDataBuilder . ref ;
2020var given = require ( './helpers/given' ) ;
2121var should = require ( 'chai' ) . should ( ) ;
22+ // This may not work when the scaffolded application uses a different
23+ // loopback or loopback-boot version than the one used in loopback-workspace
24+ // Please make sure that versions are conform.
25+ var loopback = require ( 'loopback' ) ;
26+ var boot = require ( 'loopback-boot' ) ;
2227
2328var Workspace = workspace . models . Workspace ;
2429
@@ -983,6 +988,51 @@ describe('end-to-end', function() {
983988 } ) ;
984989} ) ;
985990
991+ it ( 'includes sensitive error details in development mode' , function ( done ) {
992+ var app = loopback ( { localRegistry : true , loadBuiltinModels : true } ) ;
993+ var bootOptions = {
994+ appRootDir : SANDBOX + '/server' ,
995+ env : 'development'
996+ } ;
997+ boot ( app , bootOptions , function ( err ) {
998+ request ( app )
999+ . get ( '/url-does-not-exist' )
1000+ . expect ( 404 )
1001+ . end ( function ( err , res ) {
1002+ if ( err ) return done ( err ) ;
1003+ var responseBody = JSON . stringify ( res . body ) ;
1004+ expect ( responseBody ) . to . include ( 'stack' ) ;
1005+
1006+ done ( ) ;
1007+ } ) ;
1008+ } ) ;
1009+ } ) ;
1010+
1011+ it ( 'omits sensitive error details in production mode' , function ( done ) {
1012+ var app = loopback ( { localRegistry : true , loadBuiltinModels : true } ) ;
1013+ var bootOptions = {
1014+ appRootDir : SANDBOX + '/server' ,
1015+ env : 'production'
1016+ } ;
1017+ boot ( app , bootOptions , function ( err ) {
1018+ request ( app )
1019+ . get ( '/url-does-not-exist' )
1020+ . expect ( 404 )
1021+ . end ( function ( err , res ) {
1022+ // Assert that the response body does not contain stack trace.
1023+ // We want the assertion to be robust and keep working even
1024+ // if the property name storing stack trace changes in the future,
1025+ // therefore we test full response body.
1026+ if ( err ) return done ( err ) ;
1027+ var responseBody = JSON . stringify ( res . body ) ;
1028+ expect ( responseBody ) . to . not . have . property ( 'stack' ) ;
1029+ expect ( responseBody ) . to . not . include ( 'stack' ) ;
1030+ expect ( JSON . stringify ( res . body , null , 2 ) ) . to . not . contain ( __filename ) ;
1031+ done ( ) ;
1032+ } ) ;
1033+ } ) ;
1034+ } ) ;
1035+
9861036function setupConnection ( done ) {
9871037 var connection = mysql . createConnection ( {
9881038 database : MYSQL_DATABASE ,
0 commit comments