示例#1
0
  it('should set a session cookie', function(done) {

    config.set('api.enabled', false);
    config.set('sessions.enabled', true);
    config.set('sessions.name', 'dadiweb.sid');

    // create a page
    var name = 'test';
    var schema = help.getPageSchema();
    var page = Page(name, schema);

    page.contentType = 'application/json';
    page.template = 'session.dust';
    page.route.paths[0] = '/session';
    page.datasources = [];
    page.events = ['session'];
    delete page.route.constraint;

    startServer(page);

    var client = request(connectionString);

    client
    .get(page.route.paths[0])
    .expect(200)
    .expect('content-type', page.contentType)
    .expect(help.shouldSetCookie('dadiweb.sid'))
    .end(function (err, res) {
        if (err) return done(err);
        cleanup(done);
    });
  })
示例#2
0
    it('should use specified type when adding requestParams to the endpoint', function (done) {
      var name = 'test';
      var schema = help.getPageSchema();
      var p = page(name, schema);
      var dsName = 'car-makes';
      var options = help.getPathOptions();
      var dsSchema = help.getSchemaFromFile(options.datasourcePath, dsName);
      sinon.stub(datasource.Datasource.prototype, "loadDatasource").yields(null, dsSchema);

      // add type
      dsSchema.datasource.requestParams[0].type = 'Number'

      var params = { "make": "1337" };
      var req = { params: params, url: '/1.0/cars/makes' };

      var ds = datasource(p, dsName, options, function() {});

      datasource.Datasource.prototype.loadDatasource.restore();

      ds.processRequest(dsName, req);

      ds.endpoint.should.eql('http://127.0.0.1:3000/1.0/cars/makes?count=20&page=1&filter={"name":1337}&fields={"name":1,"_id":0}&sort={"name":1}');

      done();
    });
示例#3
0
  it('should have a session object attached to the request', function(done) {

    config.set('api.enabled', false);
    config.set('sessions.enabled', true);
    config.set('sessions.name', 'dadiweb.sid');

    // create a page
    var name = 'test';
    var schema = help.getPageSchema();
    var page = Page(name, schema);

    page.contentType = 'application/json';
    page.template = 'session.dust';
    page.route.paths[0] = '/session';
    page.datasources = [];
    page.events = ['session'];
    delete page.route.constraint;

    startServer(page);

    var client = request(connectionString);

    client
    .get(page.route.paths[0])
    .expect(200)
    .expect('content-type', page.contentType)
    .end(function (err, res) {
        if (err) return done(err);

        var data = JSON.parse(JSON.stringify(res.body));
        (data.session_id !== null).should.eql(true);

        cleanup(done);
    });
  })
示例#4
0
    it('should return generated url for specified page path', function (done) {

      Server.app = api();
      Server.components = {};

      var name = 'test';
      var schema = help.getPageSchema();
      var p = page(name, schema);

      Server.addComponent({
          key: p.key,
          route: p.route,
          component: { page: p }
      }, false);

      var tmpl = "{@url page=\"test\" make=\"bmw\" model=\"1-series\"/}";

      var expected = "/car-reviews/bmw/1-series";

      dust.renderSource(tmpl, {  }, function (err, out) {
        if (err) done(err);
        out.should.eql(expected);
        done();
      });
    });
示例#5
0
  it('should load a domain specific config file if available', function(done) {

    config.set('api.enabled', false);
    loadConfig(config.get('server'));

    // create a page
    var name = 'test';
    var schema = help.getPageSchema();
    var page = Page(name, schema);

    page.contentType = 'application/json';
    page.template = 'session.dust';
    page.route.paths[0] = '/session';
    page.datasources = [];
    page.events = ['session'];
    delete page.route.constraint;

    startServer(page);

    var client = request(connectionString);

    client
    .get(page.route.paths[0])
    .expect(200)
    .expect('content-type', page.contentType)
    .end(function (err, res) {
        if (err) return done(err);

        config.get('app.name').should.eql('Domain Loaded Config');

        cleanup(done);
    });
  });
示例#6
0
 it('should attach null `filterEvent` when not specified', function (done) {
   var name = 'test';
   var schema = help.getPageSchema();
   var p = page(name, schema);
   var dsName = 'car-makes';
   (datasource(p, dsName, help.getPathOptions(), function() {}).filterEvent === null).should.eql(true);
   done();
 });
示例#7
0
 it('should attach specified `options` to datasource', function (done) {
   var name = 'test';
   var schema = help.getPageSchema();
   var p = page(name, schema);
   var dsName = 'car-makes';
   datasource(p, dsName, help.getPathOptions(), function() {}).options.datasourcePath.should.exist;
   done();
 });
示例#8
0
 it('should export a `loadDatasource()` function', function (done) {
   var name = 'test';
   var schema = help.getPageSchema();
   var p = page(name, schema);
   var dsName = 'car-makes';
   datasource(p, dsName, help.getPathOptions(), function() {}).loadDatasource.should.be.Function;
   done();
 });
示例#9
0
 it('should export function that returns an instance', function (done) {
   datasource.should.be.Function;
   var name = 'test';
   var schema = help.getPageSchema();
   var p = page(name, schema);
   var dsName = 'car-makes';
   datasource(p, dsName, help.getPathOptions(), function() {}).should.be.an.instanceOf(datasource.Datasource);
   done();
 });
示例#10
0
  it('should build an endpoint string from schema properties when no page is specified', function (done) {
    var name = 'test';
    var schema = help.getPageSchema();
    var dsName = 'car-makes';

    datasource(name, dsName, help.getPathOptions(), function(err, ds) {
      ds.endpoint.should.eql('http://127.0.0.1:3000/1.0/cars/makes?count=20&page=1&filter={}&fields={"name":1,"_id":0}&sort={"name":1}');
      done();
    });
  });
示例#11
0
  it('should attach `source` to datasource', function (done) {
    var name = 'test';
    var schema = help.getPageSchema();
    var p = page(name, schema);
    var dsName = 'car-makes';
    var options = help.getPathOptions();
    var ds = datasource(p, dsName, options, function() {});

    ds.source.should.eql(help.getSchemaFromFile(options.datasourcePath, dsName, null).datasource.source);

    done();
  });
示例#12
0
  it('should attach `requestParams` to datasource if specified', function (done) {
    var name = 'test';
    var schema = help.getPageSchema();
    var p = page(name, schema);
    var dsName = 'car-makes';
    var options = help.getPathOptions();

    var ds = datasource(p, dsName, options, function() {} );

    ds.requestParams[0].param.should.eql("make");

    done();
  });
示例#13
0
  it('should use main config api settings if no port specified', function(done) {
    var name = 'test';
    var schema = help.getPageSchema();
    var dsName = 'car-makes';

    config.set('api.host', 'api.example.com');
    config.set('api.port', 80);

    var ds = datasource(name, dsName, help.getPathOptions(), function() {});
    delete ds.schema.datasource.source.port;
    ds.buildEndpoint(ds.schema, function() {});
    ds.endpoint.should.eql('http://127.0.0.1:80/1.0/cars/makes?count=20&page=1&filter={}&fields={"name":1,"_id":0}&sort={"name":1}');
    done();
  });
示例#14
0
  it('should attach `authStrategy` to datasource if specified', function (done) {
    var name = 'test';
    var schema = help.getPageSchema();
    var p = page(name, schema);
    var dsName = 'car-makes';
    var options = help.getPathOptions();

    var ds = datasource(p, dsName, options, function() {} );

    should.exist(ds.authStrategy);
    ds.authStrategy.config.type.should.eql('bearer');

    done();
  });
示例#15
0
  it('should attach `chained` property to datasource if specified', function (done) {
    var name = 'test';
    var schema = help.getPageSchema();
    var p = page(name, schema);
    var dsName = 'car-makes';
    var options = help.getPathOptions();

    var ds = datasource(p, dsName, options, function() {} );

    should.exist(ds.chained);
    ds.chained.datasource.should.eql('global');

    done();
  });
示例#16
0
  it('should load the referenced datasource file from the filesystem', function (done) {
    var name = 'test';
    var schema = help.getPageSchema();
    var p = page(name, schema);
    var dsName = 'car-makes';
    var options = help.getPathOptions();
    var dsSchema = help.getSchemaFromFile(options.datasourcePath, dsName, '');

    var ds = datasource(p, dsName, options, function() {} );

    ds.schema.should.eql(dsSchema);

    done();
  });
示例#17
0
    it('should run an attached `filterEvent` before datasource loads', function(done) {

      var name = 'test';
      var schema = testHelper.getPageSchema();
      schema.datasources = ['car-makes-unchained', 'filters']
      schema.events = []
      var page = Page(name, schema);
      page.template = 'test.dust';
      page.route.paths[0] = '/test';
      page.settings.cache = false;
      startServer(page);

      // provide API response
      var apiResults = { results: [{_id: 1, title: 'books'}] }
      //var dataStub = sinon.stub(help.DataHelper.prototype, 'load');
      // dataStub.onCall(0).returns(null, apiResults);
      // dataStub.onCall(1).returns(null, apiResults);

      sinon.stub(help.DataHelper.prototype, 'load').yields(null, apiResults);

      var client = request(connectionString);

      client
      .get(page.route.paths[0] + '?json=true')
      .expect(200)
      .end(function (err, res) {
        if (err) return done(err);

        cleanup(function() {
          help.DataHelper.prototype.load.restore();

          res.body['car-makes-unchained'].should.exist;
          res.body['filters'].should.exist;

          controller.datasources['filters'].schema.datasource.filterEventResult.should.exist;
          controller.datasources['filters'].schema.datasource.filterEventResult.x.should.exist;
          controller.datasources['filters'].schema.datasource.filterEventResult.x.should.eql('1');

          controller.datasources['filters'].schema.datasource.filter.x.should.exist;
          controller.datasources['filters'].schema.datasource.filter.x.should.eql('1');

          controller.datasources['filters'].schema.datasource.filter.y.should.exist;
          controller.datasources['filters'].schema.datasource.filter.y.should.eql('2');

          done();
        })
      })
    })
示例#18
0
    it.skip('should pass querystring id param to the endpoint when page.passFilters is true', function (done) {
      var name = 'test';
      var schema = help.getPageSchema();
      schema.settings.passFilters = true;
      var p = page(name, schema);
      var dsName = 'car-makes';

      var req = { params: {}, url: '/1.0/cars/makes?id=1234567890' };

      var ds = datasource(p, dsName, help.getPathOptions(), function() {});

      ds.processRequest(dsName, req);
      ds.endpoint.should.eql('http://127.0.0.1:3000/1.0/cars/makes?count=20&page=1&filter={"_id":"1234567890"}&fields={"name":1,"_id":0}&sort={"name":1}');

      done();
    });
示例#19
0
  it('should use the `skip` property when building an endpoint string', function (done) {
    var name = 'test';
    var schema = help.getPageSchema();
    var p = page(name, schema);
    var dsName = 'car-makes';

    var req = { params: {}, url: '/1.0/cars/makes' };

    var ds = datasource(p, dsName, help.getPathOptions(), function() {});
    ds.schema.datasource.skip = 5;

    ds.processRequest(dsName, req);
    ds.endpoint.should.eql('http://127.0.0.1:3000/1.0/cars/makes?count=20&skip=5&page=1&filter={}&fields={"name":1,"_id":0}&sort={"name":1}');

    done();
  });
示例#20
0
    it('should add requestParams to the endpoint', function (done) {
      var name = 'test';
      var schema = help.getPageSchema();
      var p = page(name, schema);
      var dsName = 'car-makes';

      var params = { "make": "bmw" };
      var req = { params: params, url: '/1.0/cars/makes' };

      var ds = datasource(p, dsName, help.getPathOptions(), function() {});

      ds.processRequest(dsName, req);
      ds.endpoint.should.eql('http://127.0.0.1:3000/1.0/cars/makes?count=20&page=1&filter={"name":"bmw"}&fields={"name":1,"_id":0}&sort={"name":1}');

      done();
    });
示例#21
0
文件: app.js 项目: eduardoboucas/web
  it('should use https when the datasource specifies https protocol', function(done) {
    var host = 'http://' + config.get('api.host') + ':' + config.get('api.port')
    var authscope1 = nock(host).post('/token').times(4).reply(200, { accessToken: 'xx' });

    var endpoint1 = '/1.0/library/categories?count=20&page=1&filter=%7B%22name%22:%22Crime%22%7D&fields=%7B%22name%22:1%7D&sort=%7B%22name%22:1%7D';
    var categoriesResult1 = JSON.stringify({ results: [ { name: 'Crime' } ] });
    var scope2 = nock(host).get(endpoint1).reply(200, categoriesResult1);

    var dsName = 'categories_no_cache';
    var options = help.getPathOptions();
    var dsSchema = help.getSchemaFromFile(options.datasourcePath, dsName);
    dsSchema.datasource.source.protocol = 'https'

    sinon.stub(datasource.Datasource.prototype, "loadDatasource").yields(null, dsSchema);

    var page1 = Page('page1', help.getPageSchema());
    page1.datasources = ['categories_no_cache'];
    page1.template = 'test.dust';
    page1.route.paths[0] = '/categories/:category';
    page1.events = [];

    var pages = [];
    pages.push(page1)

    help.startServer(pages, function() {
      var spy = sinon.spy(libHelp, 'DataHelper');
      var client = request(clientHost);

      client
      .get('/categories/Crime')
      .expect('content-type', 'text/html')
      .expect(200)
      .end(function (err, res) {
        if (err) return done(err);
        // check the args that the data loader was called with
        var dataHelperArgs = spy.args[0];
        spy.restore();
        datasource.Datasource.prototype.loadDatasource.restore()
        var datasourceArg = dataHelperArgs[0];
        var urlArg = dataHelperArgs[1];

        spy.firstCall.thisValue.options.protocol.should.eql('https:')
        spy.firstCall.thisValue.options.agent.protocol.should.eql('https:')
        done()
      })
    })
  })
示例#22
0
  function getPage() {
    // create a page
    var name = 'test';
    var schema = testHelper.getPageSchema();
    var page = Page(name, schema);

    page.contentType = 'application/json';
    page.template = 'test.dust';
    page.route.paths[0] = '/test';
    page.settings.cache = false;

    page.datasources = [];
    page.events = [];
    delete page.route.constraint;

    return page;
  }
示例#23
0
  it('should attach default `chained` property to datasource if not specified', function (done) {
    var name = 'test';
    var schema = help.getPageSchema();
    var p = page(name, schema);
    var dsName = 'car-makes';
    var options = help.getPathOptions();
    var dsSchema = help.getSchemaFromFile(options.datasourcePath, dsName, 'chained');

    sinon.stub(datasource.Datasource.prototype, "loadDatasource").yields(null, dsSchema);

    var ds = datasource(p, dsName, options, function() {} );

    should.not.exist(ds.chained);

    datasource.Datasource.prototype.loadDatasource.restore();
    done();
  });
示例#24
0
  it('should pass referer header to datasource', function (done) {
    var name = 'test';
    var schema = help.getPageSchema();
    schema.settings.passFilters = true;
    var p = page(name, schema);

    var params = { "make": "bmw", "model": "i3", "page": 3 };
    var req = { params: params, url: '/1.0/cars/makes', headers: {'referer': 'http://www.example.com'} };

    var ds1 = datasource(p, 'car-makes', help.getPathOptions(), function() {});

    ds1.processRequest('car-makes', req);

    ds1.endpoint.should.eql('http://127.0.0.1:3000/1.0/cars/makes?count=20&page=3&referer=' + encodeURIComponent('http://www.example.com') + '&filter={"name":"bmw"}&fields={"name":1,"_id":0}&sort={"name":1}');

    done();
  });
示例#25
0
  it('should attach default `requestParams` to datasource if not specified', function (done) {
    var name = 'test';
    var schema = help.getPageSchema();
    var p = page(name, schema);
    var dsName = 'car-makes';
    var options = help.getPathOptions();
    var dsSchema = help.getSchemaFromFile(options.datasourcePath, dsName, 'requestParams');

    sinon.stub(datasource.Datasource.prototype, "loadDatasource").yields(null, dsSchema);

    var ds = datasource(p, dsName, options, function() {} );

    ds.requestParams.should.eql([]);

    datasource.Datasource.prototype.loadDatasource.restore();
    done();
  });
示例#26
0
    it.skip('should pass req.params id param to the endpoint when the datasource matches the page name', function (done) {
      var name = 'test';
      var schema = help.getPageSchema();
      schema.settings.passFilters = false;
      var p = page(name, schema);
      var dsName = 'test-cars-ds';

      var params = { 'id': '1234567890' };
      var req = { params: params, url: '/1.0/cars/makes' };

      var ds = datasource(p, dsName, help.getPathOptions(), function() {});

      ds.processRequest(dsName, req);
      ds.endpoint.should.eql('http://127.0.0.1:3000/1.0/cars/makes?count=20&page=1&filter={"_id":"1234567890"}&fields={"name":1,"_id":0}&sort={"name":1}');

      done();
    });
示例#27
0
  it('should allow getting components by key', function (done) {

    Server.app = api();

    var name = 'test';
    var schema = help.getPageSchema();
    var page = Page(name, schema);

    Server.addComponent({
        key: page.key,
        route: page.route,
        component: { page: page }
    }, false);

    Server.getComponent('test').should.not.be.null;

    done();
  });
示例#28
0
    it('should pass filter param to the endpoint', function (done) {
      var name = 'test';
      var schema = help.getPageSchema();
      schema.settings.passFilters = true;
      var p = page(name, schema);
      var dsName = 'car-makes';

      var filter = JSON.stringify( { "model": "x3" } );
      var params = { "make": "bmw", "page": 3 };
      var req = { params: params, url: '/1.0/cars/makes?filter=' + filter };

      var ds = datasource(p, dsName, help.getPathOptions(), function() {});

      ds.processRequest(dsName, req);
      ds.endpoint.should.eql('http://127.0.0.1:3000/1.0/cars/makes?count=20&page=3&filter={"model":"x3","name":"bmw"}&fields={"name":1,"_id":0}&sort={"name":1}');

      done();
    });
示例#29
0
  it('should log an error if the specified datasource file can\'t be found', function (done) {
    var name = 'test';
    var schema = help.getPageSchema();
    var p = page(name, schema);
    var dsName = 'carzzz';

    var method = sinon.spy(log, 'error');

    datasource(p, dsName, help.getPathOptions(), function() {})

    method.called.should.be.true;

    log.error.restore();

    //should.throws(function() { datasource(p, dsName, help.getPathOptions(), function() {}) }, Error);

    done();
  });
示例#30
0
文件: app.js 项目: eduardoboucas/web
  it('should not redirect if the router redirect datasource returns unmatching results', function (done) {
    var host = 'http://' + config.get('api.host') + ':' + config.get('api.port')
    config.set('rewrites.datasource', 'redirects')

    var scope = nock(host)
      .post('/token')
      .times(2)
      .reply(200, {
        accessToken: 'xx'
      });

    var dsEndpoint = '/1.0/test/redirects?count=3&page=1&filter=%7B%22rule%22:%22/news/whatever?hello=world&foo=bar%22%7D&fields=%7B%7D&sort=%7B%7D';
    var dsResult = JSON.stringify({ results: [ {  _id: "56ec1c", source: "import", rule: "/car-reviews/alfa-romeo/4c-coupe/", replacement: "/alfa-romeo/4c/coupe/", redirectType: "301", stopProcessing: 1, apiVersion: "1.0" } ]});

    var scope2 = nock(host)
      .get(dsEndpoint)
      .reply(200, dsResult);

    // create page 1
    var page1 = Page('page1', help.getPageSchema());
    page1.datasources = [];
    page1.template = 'test.dust';
    page1.route.paths[0] = '/news/:seoUrlNews?';
    page1.events = [];
    delete page1.route.constraint;

    var pages = [];
    pages.push(page1)

    help.startServer(pages, function() {
      var client = request(clientHost);

      client
      .get('/news/whatever?hello=world&foo=bar')
      .expect(200)
      .end(function (err, res) {
        if (err) return done(err);

        config.set('rewrites.datasource', '')

        done()
      })
    })
  });