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/unit/router.bind.test.js
/**
 * Module dependencies
 */
var supertest = require('supertest');
var assert = require('assert');

var $Sails = require('../helpers/sails');
var $Router = require('../helpers/router');

// Middleware fixtures
var RESPOND = require('../fixtures/middleware');


describe('Router.bind', function() {

  var sails = $Sails.load.withAllHooksDisabled();

  it('Should not allow routes with :length as a parameter', function() {
    assert.throws(function() {
      this.sails.router.bind('get /foo/:length', RESPOND.HELLO);
    });
    assert.throws(function() {
      this.sails.router.bind('get /foo/:length/foo', RESPOND.HELLO);
    });
  });

  $Router.bind('get /foo', RESPOND.HELLO)
    .expectBoundRoute({
      path: '/foo',
      method: 'get'
    })
    .test(function() {
      $Router.bind('get /FOO', RESPOND.GOODBYE)
        .expectBoundRoute({
          path: '/FOO',
          method: 'get'
        }).test(function() {
          it('should send expected response (get /foo)', function(done) {
            this.sails.request({
              url: '/foo',
              method: 'get'
            }, function(err, res, body) {
              if (err) {
                return done(err);
              }
              res.statusCode.should.be.equal(200);
              body.should.be.equal('hello world!');
              return done();
            });
          });
          it('router should not be case-sensitive', function(done) {
            this.sails.request({
              url: '/FOO',
              method: 'get'
            }, function(err, res, body) {
              if (err) {
                return done(err);
              }
              res.statusCode.should.be.equal(200);
              body.should.be.equal('hello world!');
              return done();
            });
          });
        });
    });

  $Router.bind('get /footarg', {
      target: RESPOND.HELLO
    })
    .expectBoundRoute({
      path: '/footarg',
      method: 'get'
    })
    .test(function() {
      it('should send expected response (get /footarg)', function(done) {
        this.sails.request({
          url: '/footarg',
          method: 'get'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    });

  $Router.bind('get /foofn', {
      fn: RESPOND.HELLO
    })
    .expectBoundRoute({
      path: '/foofn',
      method: 'get'
    })
    .test(function() {
      it('should send expected response (get /foofn)', function(done) {
        this.sails.request({
          url: '/foofn',
          method: 'get'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    });


  $Router.bind('/bar', RESPOND.HELLO)
    .expectBoundRoute({
      path: '/bar',
      method: 'get'
    })
    .expectBoundRoute({
      path: '/bar',
      method: 'put'
    })
    .expectBoundRoute({
      path: '/bar',
      method: 'post'
    })
    .expectBoundRoute({
      path: '/bar',
      method: 'patch'
    })
    .expectBoundRoute({
      path: '/bar',
      method: 'delete'
    })
    .test(function() {
      it('should send expected response (get /bar)', function(done) {
        this.sails.request({
          url: '/bar',
          method: 'get'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    })
    .test(function() {
      it('should send expected response (post /bar)', function(done) {
        this.sails.request({
          url: '/bar',
          method: 'post'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    })
    .test(function() {
      it('should send expected response (put /bar)', function(done) {
        this.sails.request({
          url: '/bar',
          method: 'put'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    })
    .test(function() {
      it('should send expected response (delete /bar)', function(done) {
        this.sails.request({
          url: '/bar',
          method: 'delete'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    })
    .test(function() {
      it('should send expected response (patch /bar)', function(done) {
        this.sails.request({
          url: '/bar',
          method: 'patch'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    })
    .test(function() {
      it('should send expected response (options /bar)', function(done) {
        var sails = this.sails;
        this.sails.request({
          url: '/bar',
          method: 'options'
        }, function(err, res, body) {
          // console.dir(sails.router._privateRouter, {depth: null});
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          return done();
        });
      });
    })
    .test(function() {
      it('should send a 404 response (copy /bar)', function(done) {
        this.sails.request({
          url: '/bar',
          method: 'copy'
        }, function(err, res, body) {
          err.status.should.be.equal(404);
          return done();
        });
      });
    });

  $Router.bind('all /boop', RESPOND.HELLO)
    .expectBoundRoute({
      path: '/boop',
      method: 'get'
    })
    .expectBoundRoute({
      path: '/boop',
      method: 'put'
    })
    .expectBoundRoute({
      path: '/boop',
      method: 'post'
    })
    .expectBoundRoute({
      path: '/boop',
      method: 'patch'
    })
    .expectBoundRoute({
      path: '/boop',
      method: 'delete'
    })
    .test(function() {
      it('should send expected response (get /boop)', function(done) {
        this.sails.request({
          url: '/boop',
          method: 'get'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    })
    .test(function() {
      it('should send expected response (post /boop)', function(done) {
        this.sails.request({
          url: '/boop',
          method: 'post'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    })
    .test(function() {
      it('should send expected response (put /boop)', function(done) {
        this.sails.request({
          url: '/boop',
          method: 'put'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    })
    .test(function() {
      it('should send expected response (delete /boop)', function(done) {
        this.sails.request({
          url: '/boop',
          method: 'delete'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    })
    .test(function() {
      it('should send expected response (patch /boop)', function(done) {
        this.sails.request({
          url: '/boop',
          method: 'patch'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    })
    .test(function() {
      it('should send expected response (options /boop)', function(done) {
        this.sails.request({
          url: '/boop',
          method: 'options'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    })
    .test(function() {
      it('should send expected response (options /boop)', function(done) {
        this.sails.request({
          url: '/boop',
          method: 'copy'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('hello world!');
          return done();
        });
      });
    });


  $Router.bind('options /blap', RESPOND.GOODBYE)
    .expectBoundRoute({
      path: '/boop',
      method: 'options'
    })
    .test(function() {
      it('should send expected response (options /blap)', function(done) {
        this.sails.request({
          url: '/blap',
          method: 'options'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.equal('goodbye world!');
          return done();
        });
      });
    });


  $Router.bind('post /bar_baz_beezzz', RESPOND.HELLO_500)
    .expectBoundRoute({
      path: '/bar_baz_beezzz',
      method: 'post'
    })
    .test(function() {
      it('should send expected response (post /bar_baz_beezzz)', function(done) {
        this.sails.request({
          url: '/bar_baz_beezzz',
          method: 'post'
        }, function(err, res, body) {
          err.status.should.be.equal(500);
          err.body.should.be.equal('hello world!');
          return done();
        });
      });
    });



  $Router.bind('patch /user', RESPOND.JSON_HELLO)
    .expectBoundRoute({
      path: '/user',
      method: 'patch'
    })
    .test(function() {
      it('should send expected response (patch /user)', function(done) {
        this.sails.request({
          url: '/user',
          method: 'patch'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.instanceOf(Object);
          body.hello.should.be.equal('world');
          return done();
        });
      });
    });

  $Router.bind('   /whitespace1 ', RESPOND.JSON_HELLO)
    .expectBoundRoute({
      path: '/whitespace1',
      method: 'get'
    })
    .test(function() {
      it('should send expected response (get /whitespace1)', function(done) {
        this.sails.request({
          url: '/whitespace1',
          method: 'get'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.instanceOf(Object);
          body.hello.should.be.equal('world');
          return done();
        });
      });
    });

  $Router.bind('  GET   /whitespace2 ', RESPOND.JSON_HELLO)
    .expectBoundRoute({
      path: '/whitespace',
      method: 'get'
    })
    .test(function() {
      it('should send expected response (get /whitespace2)', function(done) {
        this.sails.request({
          url: '/whitespace2',
          method: 'get'
        }, function(err, res, body) {
          if (err) {
            return done(err);
          }
          res.statusCode.should.be.equal(200);
          body.should.be.instanceOf(Object);
          body.hello.should.be.equal('world');
          return done();
        });
      });
      it('should send 404 response (put /whitespace2)', function(done) {
        this.sails.request({
          url: '/whitespace2',
          method: 'put'
        }, function(err, res, body) {
          if (err && err.status === 404) {
            return done();
          } else if (err) {
            return done(err);
          } else {
            return done(new Error('Should have returned 404!'));
          }
        });
      });

    });


  $Router
    .test(function() {
      it('should respond with 404 handler', function(done) {
        this.sails.request({
          url: '/something_undefined',
          method: 'get'
        }, function(err, res, body) {
          err.status.should.be.equal(404);
          return done();
        });
      });
    });


  $Router.bind('post /something_that_throws', RESPOND.SOMETHING_THAT_THROWS)
    .test(function() {
      it('should respond with 500 handler if something throws', function(done) {
        this.sails.request({
          url: '/something_that_throws',
          method: 'post'
        }, function(err, res, body) {
          err.status.should.be.equal(500);
          return done();
        });
      });
    });

});