UNPKG

periodicjs

Version:

Periodic is a rapid enterprise application framework for data driven web and mobile applications.

218 lines (214 loc) 7.99 kB
'use strict'; /*jshint expr: true*/ const path = require('path'); const events = require('events'); const chai = require('chai'); const sinon = require('sinon'); const fs = require('fs-extra'); const expect = require('chai').expect; const periodic = require('../../../index'); const periodicClass = require('../../../lib/periodicClass'); const CRUD_config = require('../../../lib/crud/config'); const testPathDir = path.resolve(__dirname, '../../mock/spec/periodic'); const initTestPathDir = path.join(testPathDir, 'crudCONFIGTest'); const initTestConfigJsonFile = path.join(initTestPathDir, 'content/config/config.json'); const configTestConfigJson = require('../../mock/config/config_test_config'); let configPeriodic; const sample_configs_dir = path.resolve(__dirname, '../../mock/sample_configs'); chai.use(require('sinon-chai')); chai.use(require('chai-as-promised')); require('mocha-sinon'); let TEST_file_config; let TEST_obj_config; describe('Periodic Crud Config', function() { this.timeout(10000); before('initialize config test periodic dir', (done) => { fs.ensureDir(initTestPathDir) .then(() => { return fs.ensureDir(path.join(initTestPathDir, 'content/config')); }) .then(() => { return fs.ensureFile(initTestConfigJsonFile); }) .then(() => { return fs.outputJson(initTestConfigJsonFile, configTestConfigJson({ dbpathprefix: initTestPathDir, settingsProp: { logger: { use_winston_logger: false, }, }, })); }) .then(() => { // process.env.ENV = 'test'; configPeriodic = new periodicClass({}); configPeriodic.init({ app_root: initTestPathDir, cli: true, environment: 'test', }) .then(done.bind(done, undefined)) .catch(done); }).catch(done); }); describe('create', () => { it('should handle errors', (done) => { // expect(CRUD_config.create()).to.eventually.be.rejected; CRUD_config.create() .then(() => { done(new Error('should have rejected')); }) .catch(e => { expect(e).to.be.an('error'); // console.log(e); done(); }); }); it('should add config to config db from filepath', (done) => { const dummy_config_filepath = path.join(sample_configs_dir, 'dummy_config.json'); CRUD_config.create.call(configPeriodic, dummy_config_filepath) .then(createdConfig => { TEST_file_config = createdConfig; expect(createdConfig).to.be.ok; expect(createdConfig.filepath).to.eql('content/config/appconfig/dummy.json'); expect(createdConfig.environment).to.eql('test'); expect(createdConfig.container).to.eql('default'); expect(createdConfig._id).to.be.ok; return configPeriodic.datas.get('configuration').load({ query: createdConfig._id, }); }) .then(loadedExtension => { expect(loadedExtension._id).to.eql(TEST_file_config._id); done(); }) .catch(done); }); it('should add config to config db from object', (done) => { CRUD_config.create.call(configPeriodic, { filepath: 'content/config/appconfig/dummy2.json', environment: 'test', container: 'default', config: { 'some': 'data2', 'test': true, }, }) .then(createdConfig => { TEST_obj_config = createdConfig; expect(createdConfig).to.be.ok; expect(createdConfig.filepath).to.eql('content/config/appconfig/dummy2.json'); expect(createdConfig.environment).to.eql('test'); expect(createdConfig.container).to.eql('default'); expect(createdConfig._id).to.be.ok; return configPeriodic.datas.get('configuration').load({ query: createdConfig._id, }); }) .then(loadedExtension => { expect(loadedExtension._id).to.eql(TEST_obj_config._id); done(); }) .catch(done); }); }); describe('update', () => { it('should handle errors', (done) => { // expect(CRUD_config.create()).to.eventually.be.rejected; CRUD_config.update() .then(() => { done(new Error('should have rejected')); }) .catch(e => { expect(e).to.be.an('error'); // console.log(e); done(); }); }); it('should update config in config db', (done) => { const updatedConf = Object.assign({}, TEST_file_config, { container: 'default-updated', config: { now: 'updated', works: true, }, }); // console.log({ updatedConf }); CRUD_config.update.call(configPeriodic, { config: updatedConf, }) .then(updatedConfigStatus => { expect(updatedConfigStatus.status).to.eql('ok'); return configPeriodic.datas.get('configuration').load({ docid: 'filepath', query: TEST_file_config.filepath, }); }) .then(updatedConfig => { // console.log({ updatedConfig }); expect(updatedConfig._id).to.eql(TEST_file_config._id); expect(updatedConfig).to.be.ok; expect(updatedConfig.filepath).to.eql('content/config/appconfig/dummy.json'); expect(updatedConfig.container).to.eql('default-updated'); expect(updatedConfig.config).to.eql(updatedConf.config); expect(updatedConfig._id).to.be.ok; done(); }) .catch(done); }); }); describe('remove', () => { it('should handle errors', (done) => { // expect(CRUD_config.create()).to.eventually.be.rejected; CRUD_config.remove() .then(() => { done(new Error('should have rejected')); }) .catch(e => { expect(e).to.be.an('error'); // console.log(e); done(); }); }); it('should remove extension from extension db', (done) => { const server_config_filepath = path.join(sample_configs_dir, 'server_config.json'); const display_config_filepath = path.join(sample_configs_dir, 'display_config.json'); Promise.all([ CRUD_config.create.call(configPeriodic, server_config_filepath), CRUD_config.create.call(configPeriodic, display_config_filepath), ]) .then(() => { return configPeriodic.datas.get('configuration').query(); }) .then(confs => { expect(confs.length).to.eql(5); return CRUD_config.remove.call(configPeriodic, TEST_file_config._id); }) .then(removedConf => { if (Array.isArray(removedConf)) { expect(removedConf[0].filepath).to.eql(TEST_file_config.filepath); } else { expect(removedConf.filepath).to.eql(TEST_file_config.filepath); } return configPeriodic.datas.get('configuration').query(); }) .then(confs => { expect(confs.length).to.eql(4); // console.log({confs}) return Promise.all([ CRUD_config.remove.call(configPeriodic, { _id: confs[0]._id, }), CRUD_config.remove.call(configPeriodic, { filepath: confs[1].filepath, }), ]); // done(); }) .then(() => { return configPeriodic.datas.get('configuration').query(); }) .then(confs => { expect(confs.length).to.eql(2); done(); }) .catch(done); }); }); after('remove config test periodic dir', (done) => { fs.remove(initTestPathDir) .then(() => { done(); }).catch(done); }); });