UNPKG

jsharmony-cms

Version:
321 lines (294 loc) 11.2 kB
/* Copyright 2020 apHarmony This file is part of jsHarmony. jsHarmony is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. jsHarmony is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this package. If not, see <http://www.gnu.org/licenses/>. */ // Test files must be run from an application with a configured database // e.g. "mocha node_modules/jsharmony-cms/test --reporter spec" var assert = require('assert'); var jsHarmonyCMS = require('../jsHarmonyCMS.js'); var async = require('async'); var _ = require('lodash'); describe('Merges', function() { var jsh = new jsHarmonyCMS.Application(); jsh.Config.appbasepath = process.cwd(); jsh.Config.silentStart = true; jsh.Config.interactive = true; jsh.Config.onConfigLoaded.push(function(cb){ jsh.Config.system_settings.automatic_schema = false; return cb(); }); var dbconfig; var db; var testBaseBranchId = -1; var testEditBranchId = -1; function assertBranchState(branch_id, state, done) { var sql = 'select branch_page_action, page_title, page_path from cms.branch_page inner join cms.page on (page.page_id=branch_page.page_id) where branch_id='+branch_id+" and (branch_page_action<>'DELETE' or branch_page_action is null)\ union\ select branch_page_action, page_title, page_path from cms.branch_page inner join cms.page on (page.page_id=branch_page.page_orig_id) where branch_id="+branch_id+" and branch_page_action='DELETE'\ order by page_path;"; //"select branch_page_action from cms.branch_page where branch_id="+branch_id+" and branch_page_action='DELETE';"; db.Recordset('', sql, [], {}, function (err, dbrslt, stats) { assert.ifError(err); try{ assert.deepStrictEqual(dbrslt, state); } catch(ex){ console.log('Found'); console.log('-----'); console.log(JSON.stringify(dbrslt,null,4)); console.log('Expected'); console.log('--------'); console.log(JSON.stringify(state,null,4)); throw(ex); } done(); }); } function basicBranchSetup(name, done) { var results = {}; async.waterfall([ function(cb){ jsh.Modules.jsHarmonyCMS.funcs.merge_clone('S1', {branch_parent_id: testBaseBranchId, branch_name: 'Merge Test Data: '+name+' master', new_branch_changes: 'RESET'}, function(err, id, stats) { results.master_branch_id = id; cb(); }); }, function(cb){ jsh.Modules.jsHarmonyCMS.funcs.merge_clone('S1', {branch_parent_id: testEditBranchId, branch_name: 'Merge Test Data: '+name+' edit', new_branch_changes: 'COPY'}, function(err, id, stats) { results.edit_branch_id = id; cb(); }); }, function(cb){ jsh.Modules.jsHarmonyCMS.funcs.merge_begin_merge('S1', {dst_branch_id: results.master_branch_id, src_branch_id: results.edit_branch_id, merge_type: name.toUpperCase()}, function(err, id, stats) { cb(); }); }, ], function(err){ if(err) console.log(err); done(err, results); }); } function clearTestData(cb){ /* Clear previous branchs */ var sql = "\ delete from cms.branch_page where branch_id in (select branch_id from cms.branch where branch_name like 'Merge Test Data:%');\ delete from cms.page where page_path like 'Merge Test Data:%';\ delete from cms.branch_media where branch_id in (select branch_id from cms.branch where branch_name like 'Merge Test Data:%');\ delete from cms.branch_menu where branch_id in (select branch_id from cms.branch where branch_name like 'Merge Test Data:%');\ delete from cms.branch_redirect where branch_id in (select branch_id from cms.branch where branch_name like 'Merge Test Data:%');\ delete from cms.branch where branch_name like 'Merge Test Data:%';"; db.Command('S1', sql, [], {}, function(err, dbrslt, stats) { assert.ifError(err); cb(); }); } before(function(done) { this.timeout(0); jsh.Init(function(){ var dbid = 'default'; db = jsh.DB[dbid]; dbconfig = jsh.DBConfig[dbid]; if(dbconfig.admin_user){ dbconfig = _.extend({}, dbconfig); dbconfig.user = dbconfig.admin_user; dbconfig.password = dbconfig.admin_password; } async.waterfall([ clearTestData, function(cb){ console.log('Initializing test data'); db.RunScripts(jsh, ['jsHarmonyCMS','test_data','merge'], { dbconfig: dbconfig, context: 'S1' }, function(err, rslt){ if(err){ console.log('Error initializing database'); console.log(err); return; } return cb(); }); }, function(cb){ var sql = "select branch_id from cms.branch where branch_name='Merge Test Data: Base Branch';\ select branch_id from cms.branch where branch_name='Merge Test Data: Edit Branch';"; db.MultiRecordset('', sql, [], {}, function (err, dbrslt, stats) { testBaseBranchId = dbrslt[0][0].branch_id; testEditBranchId = dbrslt[1][0].branch_id; cb(); }); }, ], function(err){ if(err) console.log(err); done(); }); }); }); after(function(done) { clearTestData(function(err){ if(err) console.log(err); db.Close(); done(); }); }); it('database initialized', function(done) { var sql = "select count(*) from cms.branch where branch_name='Merge Test Data: Base Branch';"; db.Scalar('', sql, [], {}, function (err, dbrslt, stats) { assert.strictEqual(parseInt(dbrslt), 1, 'test branch should exist'); assert.notStrictEqual(testBaseBranchId, -1, 'base branch id should be captured'); assert.notStrictEqual(testEditBranchId, -1, 'edit branch id should be captured'); done(); }); }); describe('Apply', function() { var dst_branch_id; var src_branch_id; before(function(done) { basicBranchSetup('apply', function(err, results) { dst_branch_id = results.master_branch_id; src_branch_id = results.edit_branch_id; done(); }); }); it('apply', function(done) { jsh.Modules.jsHarmonyCMS.funcs.merge_apply('S1', {dst_branch_id: dst_branch_id, src_branch_id: src_branch_id}, function(err) { assert.ifError(err); assertBranchState(dst_branch_id, [ { branch_page_action: null, page_title: 'Add', page_path: '/test/add/index.html', }, { branch_page_action: null, page_title: 'Untouched', page_path: '/test/untouched/index.html', }, { branch_page_action: null, page_title: 'Update After', page_path: '/test/update/index.html', }, ], done); }); }); }); describe('Overwrite', function() { var dst_branch_id; var src_branch_id; before(function(done) { basicBranchSetup('overwrite', function(err, results) { dst_branch_id = results.master_branch_id; src_branch_id = results.edit_branch_id; done(); }); }); it('overwrite', function(done) { jsh.Modules.jsHarmonyCMS.funcs.merge_overwrite('S1', {dst_branch_id: dst_branch_id, src_branch_id: src_branch_id}, function(err) { assert.ifError(err); assertBranchState(dst_branch_id, [ { branch_page_action: 'ADD', page_title: 'Add', page_path: '/test/add/index.html', }, { branch_page_action: 'DELETE', page_title: 'Delete', page_path: '/test/delete/index.html', }, { branch_page_action: null, page_title: 'Untouched', page_path: '/test/untouched/index.html', }, { branch_page_action: 'UPDATE', page_title: 'Update After', page_path: '/test/update/index.html', }, ], done); }); }); }); describe('Changes', function() { var dst_branch_id; var src_branch_id; before(function(done) { basicBranchSetup('changes', function(err, results) { dst_branch_id = results.master_branch_id; src_branch_id = results.edit_branch_id; done(); }); }); it('changes', function(done) { jsh.Modules.jsHarmonyCMS.funcs.merge_changes('S1', {dst_branch_id: dst_branch_id, src_branch_id: src_branch_id}, function(err) { assert.ifError(err); assertBranchState(dst_branch_id, [ { branch_page_action: 'ADD', page_title: 'Add', page_path: '/test/add/index.html', }, { branch_page_action: 'DELETE', page_title: 'Delete', page_path: '/test/delete/index.html', }, { branch_page_action: null, page_title: 'Untouched', page_path: '/test/untouched/index.html', }, { branch_page_action: 'UPDATE', page_title: 'Update After', page_path: '/test/update/index.html', }, ], done); }); }); }); describe('Rebase', function() { var dst_branch_id; var src_branch_id; before(function(done) { basicBranchSetup('rebase', function(err, results) { dst_branch_id = results.edit_branch_id; src_branch_id = results.master_branch_id; done(); }); }); it('rebase', function(done) { jsh.Modules.jsHarmonyCMS.funcs.merge_rebase('S1', {dst_branch_id: dst_branch_id, src_branch_id: src_branch_id}, function(err) { assert.ifError(err); assertBranchState(dst_branch_id, [ { branch_page_action: 'ADD', page_title: 'Add', page_path: '/test/add/index.html', }, { branch_page_action: 'DELETE', page_title: 'Delete', page_path: '/test/delete/index.html', }, { branch_page_action: null, page_title: 'Untouched', page_path: '/test/untouched/index.html', }, { branch_page_action: 'UPDATE', page_title: 'Update After', page_path: '/test/update/index.html', }, ], done); }); }); }); });