HEX
Server: nginx/1.24.0
System: Linux nowruzgan 6.8.0-57-generic #59-Ubuntu SMP PREEMPT_DYNAMIC Sat Mar 15 17:40:59 UTC 2025 x86_64
User: babak (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/dev/nowruzgan/rest/node_modules/sails/test/helpers/router.js
/**
 * Module dependencies
 */
var _ = require('@sailshq/lodash');



var $Router = {


  /**
   * Run custom tests if provided
   * @param  {Function} customTests
   * @return {$Router}
   */
  test: function(customTests) {
    customTests();

    // Chainable
    return $Router;
  },


  /**
   * unbind(route)
   *   .expect(expectations)
   *
   */
  unbind: function(route) {
    var args = Array.prototype.slice.call(arguments);

    it('binds the given route', function() {
      this.sails.router.bind.should.be.ok;
      this.sails.router.bind.apply(this.sails.router, args);
    });

    it('unbinds the given route', function() {
      this.sails.router.unbind.should.be.ok;
      var route = {verb: args[0].split(' ')[0], path: args[0].split(' ')[1]};
      this.sails.router.unbind.call(this.sails.router, route);
    });

    var Chainable = {
      shouldDelete: function(expected) {
        it('should delete route in _privateRouter', function() {
          var routeFound = false;
          _.each(this.sails.router._privateRouter.stack, function(stack){
            var samePath = stack.route.path === expected.path;
            var sameMethod = stack.route.methods[expected.method] || stack.route.methods['_all'];
            if(samePath && sameMethod) routeFound = true;
          });
          routeFound.should.be.false;
        });

        return Chainable;
      }
    };

    return Chainable;
  },


  /**
   * bindRoute(route, handler)
   *   .expectBoundRoute(expectedRoute)
   *   .test(fnContainingCustomMochaTests)
   *
   */
  bind: function (route, handler) {
    var args = Array.prototype.slice.call(arguments);

    it('binds the given route', function() {
      this.sails.router.bind.should.be.ok;
      this.sails.router.bind.apply(this.sails.router, args);
    });

    var Chainable = {
      expectBoundRoute: function(expected) {
        var readableRoute = expected.method + ' ' + expected.path;

        it('should create ' + readableRoute + ' in _privateRouter router', function() {
          var routeFound = false;
          _.each(this.sails.router._privateRouter.stack, function(stack){
            var samePath = stack.route.path === expected.path;
            var sameMethod = stack.route.methods[expected.method] || stack.route.methods['_all'];
            if(samePath && sameMethod) routeFound = true;
          });
          routeFound.should.be.true;
        });
        return Chainable;
      },

      // Run custom tests if provided
      test: function(customTests) {
        customTests();

        return Chainable;
      }
    };

    return Chainable;
  }

};

module.exports = $Router;














// var helper = {

//  /**
//   * Send a mock request to the instance of Sails in the test context.
//   *
//   * @param {String} url    [relative URL]
//   * @param {Object} options
//   *
//   * @return {Function}   [bdd]
//   */
//  request: function ( url, options ) {
//    return function (done) {

//      var self = this;
//      var _fakeClient = function (err, response) {
//        if (err) return done(err);
//        self.response = response;
//        done();
//      };

//      // Emit a request event (will be intercepted by the Router)
//      this.sails.emit('router:request', _req(), _res(), _fakeClient);
//    };
//  },



//  /**
//   * Bind a route.
//   *
//   * @param {String|RegExp} path
//   * @param {String|Object|Array|Function} target
//   * @param {String} verb (optional)
//   * @param {Object} options (optional)
//   *
//   * @return {Function}   [bdd]
//   */

//  bind: function () {
//    var args = Array.prototype.slice.call(arguments);
//    return function () {
//      this.sails.router.bind.apply(this.sails.router, args);
//    };
//  }
// };
// module.exports = helper;



// // Private methods

// /**
//  * Test fixture to send requests to Sails.
//  *
//  * @api private
//  */

// function _req ( req ) {
//  var _enhancedReq = util.defaults(req || {}, {
//    params: {},
//    url: '/',
//    param: function(paramName) {
//      return _enhancedReq.params[paramName];
//    },
//    wantsJSON: true,
//    method: 'get'
//  });

//  return _enhancedReq;
// }


// /**
//  * Test fixture to receive responses from Sails.
//  *
//  * @api private
//  */

// function _res (res) {

//  var _enhancedRes = util.defaults(res || {}, {
//    send: function(/* ... */) {
//      var args = _normalizeResArgs(Array.prototype.slice.call(arguments));

//      _enhancedRes._cb(null, {
//        body: args.other,
//        headers: {},
//        status: args.statusCode || 200
//      });
//    },
//    json: function(body, statusCode) {

//      // Tolerate bad JSON
//      var json = util.stringify(body);
//      if ( !json ) {
//        var failedStringify = new Error(
//          'Failed to stringify specified JSON response body :: ' + body
//        );
//        return _enhancedRes.send(failedStringify.stack, 500);
//      }

//      return _enhancedRes.send(json,statusCode);
//    }
//  });

//  return _enhancedRes;
// }


// /**
//  * As long as one of them is a number (i.e. a status code),
//  * allows a 2-nary method to be called with flip-flopped arguments:
//  *   method( [statusCode|other], [statusCode|other] )
//  *
//  * This avoids confusing errors & provides Express 2.x backwards compat.
//  *
//  * E.g. usage in res.send():
//  *   var args    = normalizeResArgs.apply(this, arguments),
//  *     body    = args.other,
//  *     statusCode  = args.statusCode;
//  *
//  * @api private
//  */
// function _normalizeResArgs( args ) {

//  // Traditional usage:
//  // `method( other [,statusCode] )`
//  var isTraditionalUsage =
//    'number' !== typeof args[0] &&
//    ( !args[1] || 'number' === typeof args[1] );

//  if ( isTraditionalUsage ) {
//    return {
//      statusCode: args[1],
//      other: args[0]
//    };
//  }

//  // Explicit usage, i.e. Express 3:
//  // `method( statusCode [,other] )`
//  return {
//    statusCode: args[0],
//    other: args[1]
//  };
// }



// describe('receives a request', function() {
//  to('home route (/)', function() {
//    before(RouterHelper.request('/'));
//    __it('should trigger the default notFound (404) handler');
//    __it('should receive a 404 response from default handler', expect.equal('response.status', 404));
//    __it('should not receive a reponse body', expect.notExists('response.body'));
//  });
// });

// to('a simple fn which calls res.send()', function () {
//  var route = 'get /simple';
//  var fn = function (req, res) { res.send('ok!'); };
//  var expectedResponse = { status: 200 };

//  __it('binds the route', RouterHelper.bind(route, fn));
//  __it('should now exist in the _privateRouter router');
//  __it('receives a request to the route',RouterHelper.request(route));
//  __it('should have called the proper fn');
//  __it('should have sent the expected status code in the response', expect.equal('response.status', expectedResponse.status));
//  __it('should have sent the expected response body', expect.equal('response.body', expectedResponse.body));
//  __it('should have sent the expected response headers', expect.equal('response.headers', expectedResponse.headers));
// });

// to('a simple fn which throws', function () {
//  var route = 'get /throws';
//  var fn = function (req, res) { throw new Error('heh heh'); };
//  var expectedResponse = { status: 500 };

//  __it('binds the route', RouterHelper.bind(route, fn));
//  __it('should now exist in the _privateRouter router');
//  __it('receives a request to the route', RouterHelper.request(route));
//  __it('should have called the proper fn');
//  __it('should have sent the proper response', expect.equal('response', expectedResponse));
// });
// });


// // private bdd helpers
// function __it(name, fn) {
//  it('\n\t    ...it ' + name, fn);
// }
// function to(name,fn) {
//  describe('\n\t-- to ' +name+'...', fn);
// }