UNPKG

mlcl_elements

Version:

Elements / Data type definition module for the molecuel CMS

205 lines (184 loc) 5.63 kB
/** * Created by Dominic Böttger on 11.05.2014 * INSPIRATIONlabs GmbH * http://www.inspirationlabs.com */ var should = require('should'), util = require('util'), EventEmitter = require('events').EventEmitter, express = require('express'), mlcl_database = require('mlcl_database'), mlcl_elastic = require('mlcl_elastic'), mlcl_url = require('mlcl_url'), mlcl_log = require('mlcl_log'), request = require('request'), assert = require('assert'), mlcl_elements = require('../'); describe('mlcl_elastic', function() { var mlcl; var molecuel; var mongo; var elastic; var elements; before(function(done) { // init fake molecuel mlcl = function() { return this; }; util.inherits(mlcl, EventEmitter); molecuel = new mlcl(); molecuel.config = { }; molecuel.config.log = { ttl: '1d', overwriteConsole: false, pathdebug: false, 'transports': { 'console': { 'level': 'debug' }, 'elasticsearch': { 'level': 'error' } } }; molecuel.config.search = { hosts: ['http://localhost:9200'], prefix: 'mlcl-elements-unit' }; molecuel.config.database = { type: 'mongodb', uri: 'mongodb://localhost/mlcl-elements-unit' }; molecuel.config.elements = { schemaDir: __dirname + '/definitions' }; molecuel.config.routes = [ { url: '/api/maintenance/sync', get: true, callbacks: [{ module: 'elements', function: 'syncMiddleware' }] }, ]; molecuel.setContent = function(res, region, data) { res.locals = res.locals || {}; res.locals.data = res.locals.data || {}; res.locals.data[region] = res.locals.data[region] || {}; res.locals.data[region] = data; }; mongo = mlcl_database(molecuel); elastic = mlcl_elastic(molecuel); elements = mlcl_elements(molecuel); log = new mlcl_log(molecuel); mlcl_url(molecuel); done(); }); describe('elements', function() { var elements; var app; var pagemodel; it('should initialize db connection', function(done) { molecuel.once('mlcl::elements::init:post', function(ele) { elements = ele; ele.should.be.a.object; done(); }); molecuel.emit('mlcl::core::init:post', molecuel); }); it('should initialize the middleware', function(done) { app = express(); //elements.initApplication(app); elements.middleware({type: 'formserver'}, app); app.get(elements.get); app.get('*',function(req, res) { res.send(JSON.stringify(res.locals)); }); app.listen(8000); //elements.appInitialized.should.be.true; done(); }); it('should return the registered page model', function(done) { pagemodel = elements.getModel('page'); pagemodel.should.be.a.object; done(); }); var testobject; it('should save a object to database and let the url generate', function(done) { var mypage = new pagemodel(); mypage.lang = 'en'; mypage.title = 'This is a testpage'; elements.save(mypage, function(err, result) { testobject = result; should.not.exist(err); done(); }); }); it('should wait for saved objects be refreshed in index', function(done) { setTimeout(function() { done(); }, 1000); }); it('should search and return a object via url and lang', function(done) { elements.searchByUrl(testobject.url, 'en', function(err, result) { should.not.exists(err); should.exist(result); result.should.be.an.Object; result.hits.should.be.an.Object; result.hits.hits.should.be.an.Array; result.hits.hits[0].should.be.an.Object; done(); }); }); it('should find and return a object via url and lang', function(done) { elements.findByUrl(testobject.url, 'en', function(err, result) { should.not.exists(err); should.exist(result); done(); }); }); it('should register a type handler', function(done) { /** * register a function to handle a specific object type */ elements.registerTypeHandler('page', function(req, res) { res.send('special page message'); }); assert(typeof elements.getTypeHandler('page') === 'function'); done(); }); it('should unregister a type handler', function(done) { /** * register a function to handle a specific object type */ elements.unregisterTypeHandler('page'); should.not.exists(elements.getTypeHandler('page')); done(); }); it('should answer the request for the model list', function(done) { request('http://localhost:8000/api/models', function (error, response, body) { assert(response.statusCode === 200); var bodyres = JSON.parse(body); bodyres.should.be.instanceof(Array); assert(bodyres.length > 0); done(); }); }); it('should answer sync function', function(done) { request('http://localhost:8000/api/maintenance/sync?model=page', function (error, response) { assert(response.statusCode === 200); done(); }); }); after(function(done) { elements.database.database.connection.db.dropDatabase(function(error) { should.not.exists(error); elements.elastic.deleteIndex('*', function(error) { should.not.exists(error); done(); }); }); }); }); });