Files
NodeBB/test/build.js

221 lines
6.7 KiB
JavaScript
Raw Normal View History

2017-02-03 11:39:31 +03:00
'use strict';
2021-02-04 00:06:15 -07:00
const path = require('path');
const fs = require('fs');
const assert = require('assert');
const mkdirp = require('mkdirp');
const rimraf = require('rimraf');
const async = require('async');
2017-02-03 11:39:31 +03:00
2021-02-04 00:06:15 -07:00
const db = require('./mocks/databasemock');
const file = require('../src/file');
2017-02-03 11:39:31 +03:00
2021-02-04 00:01:39 -07:00
describe('minifier', () => {
before(async () => {
2020-01-31 14:10:00 -05:00
await mkdirp(path.join(__dirname, '../build/test'));
});
2021-02-04 00:06:15 -07:00
const minifier = require('../src/meta/minifier');
const scripts = [
2017-05-21 18:20:01 -06:00
path.resolve(__dirname, './files/1.js'),
path.resolve(__dirname, './files/2.js'),
2021-02-04 00:01:39 -07:00
].map(script => ({
srcPath: script,
destPath: path.resolve(__dirname, '../build/test', path.basename(script)),
filename: path.basename(script),
}));
2017-05-25 01:33:04 -06:00
2021-02-04 00:01:39 -07:00
it('.js.bundle() should concat scripts', (done) => {
2021-02-04 00:06:15 -07:00
const destPath = path.resolve(__dirname, '../build/test/concatenated.js');
2017-05-25 01:33:04 -06:00
minifier.js.bundle({
files: scripts,
destPath: destPath,
filename: 'concatenated.js',
2021-02-04 00:01:39 -07:00
}, false, false, (err) => {
2017-02-03 11:39:31 +03:00
assert.ifError(err);
2017-05-25 01:33:04 -06:00
assert(file.existsSync(destPath));
2017-05-21 18:20:01 -06:00
assert.strictEqual(
2017-05-26 12:51:05 -06:00
fs.readFileSync(destPath).toString().replace(/\r\n/g, '\n'),
'(function (window, document) {' +
'\n\twindow.doStuff = function () {' +
'\n\t\tdocument.body.innerHTML = \'Stuff has been done\';' +
'\n\t};' +
'\n})(window, document);' +
'\n' +
'\n;function foo(name, age) {' +
'\n\treturn \'The person known as "\' + name + \'" is \' + age + \' years old\';' +
'\n}' +
'\n'
2017-05-21 18:20:01 -06:00
);
done();
});
});
2021-02-04 00:01:39 -07:00
it('.js.bundle() should minify scripts', (done) => {
2021-02-04 00:06:15 -07:00
const destPath = path.resolve(__dirname, '../build/test/minified.js');
2017-05-25 01:33:04 -06:00
minifier.js.bundle({
files: scripts,
destPath: destPath,
filename: 'minified.js',
2021-02-04 00:01:39 -07:00
}, true, false, (err) => {
2017-05-21 18:20:01 -06:00
assert.ifError(err);
2017-05-25 01:33:04 -06:00
assert(file.existsSync(destPath));
2017-05-21 18:20:01 -06:00
assert.strictEqual(
2017-05-25 01:33:04 -06:00
fs.readFileSync(destPath).toString(),
'(function(n,o){n.doStuff=function(){o.body.innerHTML="Stuff has been done"}})(window,document);function foo(n,o){return\'The person known as "\'+n+\'" is \'+o+" years old"}' +
'\n//# sourceMappingURL=minified.js.map'
2017-05-21 18:20:01 -06:00
);
done();
});
});
2021-02-04 00:01:39 -07:00
it('.js.minifyBatch() should minify each script', (done) => {
minifier.js.minifyBatch(scripts, false, (err) => {
2017-05-21 18:20:01 -06:00
assert.ifError(err);
2017-05-25 01:33:04 -06:00
assert(file.existsSync(scripts[0].destPath));
assert(file.existsSync(scripts[1].destPath));
2017-05-21 18:20:01 -06:00
2021-02-04 00:01:39 -07:00
fs.readFile(scripts[0].destPath, (err, buffer) => {
2017-05-21 18:20:01 -06:00
assert.ifError(err);
assert.strictEqual(
buffer.toString(),
'(function(n,o){n.doStuff=function(){o.body.innerHTML="Stuff has been done"}})(window,document);' +
'\n//# sourceMappingURL=1.js.map'
2017-05-21 18:20:01 -06:00
);
done();
});
});
});
2021-02-04 00:06:15 -07:00
const styles = [
2017-05-21 18:20:01 -06:00
'@import (inline) "./1.css";',
'@import "./2.less";',
].join('\n');
2021-02-04 00:06:15 -07:00
const paths = [
2017-05-21 18:20:01 -06:00
path.resolve(__dirname, './files'),
];
2021-02-04 00:01:39 -07:00
it('.css.bundle() should concat styles', (done) => {
minifier.css.bundle(styles, paths, false, false, (err, bundle) => {
2017-05-21 18:20:01 -06:00
assert.ifError(err);
assert.strictEqual(bundle.code, '.help { margin: 10px; } .yellow { background: yellow; }\n.help {\n display: block;\n}\n.help .blue {\n background: blue;\n}\n');
done();
});
});
2021-02-04 00:01:39 -07:00
it('.css.bundle() should minify styles', (done) => {
minifier.css.bundle(styles, paths, true, false, (err, bundle) => {
2017-05-21 18:20:01 -06:00
assert.ifError(err);
assert.strictEqual(bundle.code, '.help{margin:10px}.yellow{background:#ff0}.help{display:block}.help .blue{background:#00f}');
2017-05-21 18:20:01 -06:00
done();
});
});
});
2017-02-03 11:39:31 +03:00
2021-02-04 00:01:39 -07:00
describe('Build', (done) => {
2021-02-04 00:06:15 -07:00
const build = require('../src/meta/build');
2017-05-21 19:01:41 -06:00
2021-02-04 00:01:39 -07:00
before((done) => {
async.parallel([
2017-05-23 18:00:52 -06:00
async.apply(rimraf, path.join(__dirname, '../build/public')),
2019-10-05 17:05:52 -04:00
async.apply(db.sortedSetAdd, 'plugins:active', Date.now(), 'nodebb-plugin-markdown'),
2017-05-23 18:00:52 -06:00
], done);
2017-05-21 19:01:41 -06:00
});
2021-02-04 00:01:39 -07:00
it('should build plugin static dirs', (done) => {
build.build(['plugin static dirs'], (err) => {
2017-05-21 19:01:41 -06:00
assert.ifError(err);
done();
});
});
2021-02-04 00:01:39 -07:00
it('should build requirejs modules', (done) => {
build.build(['requirejs modules'], (err) => {
2017-05-21 19:01:41 -06:00
assert.ifError(err);
2021-02-04 00:06:15 -07:00
const filename = path.join(__dirname, '../build/public/src/modules/Chart.js');
2017-05-21 19:01:41 -06:00
assert(file.existsSync(filename));
assert(fs.readFileSync(filename).toString().startsWith('/*!\n * Chart.js'));
done();
});
});
2021-02-04 00:01:39 -07:00
it('should build client js bundle', (done) => {
build.build(['client js bundle'], (err) => {
2017-05-21 19:01:41 -06:00
assert.ifError(err);
2021-02-04 00:06:15 -07:00
const filename = path.join(__dirname, '../build/public/nodebb.min.js');
2017-05-21 19:01:41 -06:00
assert(file.existsSync(filename));
assert(fs.readFileSync(filename).length > 1000);
done();
});
});
2021-02-04 00:01:39 -07:00
it('should build admin js bundle', (done) => {
build.build(['admin js bundle'], (err) => {
2017-05-21 19:01:41 -06:00
assert.ifError(err);
2021-02-04 00:06:15 -07:00
const filename = path.join(__dirname, '../build/public/acp.min.js');
2017-05-21 19:01:41 -06:00
assert(file.existsSync(filename));
assert(fs.readFileSync(filename).length > 1000);
done();
});
});
2021-02-04 00:01:39 -07:00
it('should build client side styles', (done) => {
build.build(['client side styles'], (err) => {
2017-05-21 19:01:41 -06:00
assert.ifError(err);
2021-02-04 00:06:15 -07:00
const filename = path.join(__dirname, '../build/public/client.css');
2017-05-21 19:01:41 -06:00
assert(file.existsSync(filename));
assert(fs.readFileSync(filename).toString().startsWith('/*! normalize.css'));
done();
});
});
2021-02-04 00:01:39 -07:00
it('should build admin control panel styles', (done) => {
build.build(['admin control panel styles'], (err) => {
2017-05-21 19:01:41 -06:00
assert.ifError(err);
2021-02-04 00:06:15 -07:00
const filename = path.join(__dirname, '../build/public/admin.css');
2017-05-21 19:01:41 -06:00
assert(file.existsSync(filename));
2021-02-04 00:06:15 -07:00
const adminCSS = fs.readFileSync(filename).toString();
if (global.env === 'production') {
assert(adminCSS.startsWith('@charset "UTF-8";') || adminCSS.startsWith('@import url'));
} else {
assert(adminCSS.startsWith('.recent-replies'));
}
2017-05-21 19:01:41 -06:00
done();
});
});
it('should build templates', function (done) {
2018-10-05 14:24:51 -04:00
this.timeout(0);
2021-02-04 00:01:39 -07:00
build.build(['templates'], (err) => {
2017-05-21 19:01:41 -06:00
assert.ifError(err);
2021-02-04 00:06:15 -07:00
const filename = path.join(__dirname, '../build/public/templates/admin/header.tpl');
2017-05-21 19:01:41 -06:00
assert(file.existsSync(filename));
assert(fs.readFileSync(filename).toString().startsWith('<!DOCTYPE html>'));
done();
});
});
2021-02-04 00:01:39 -07:00
it('should build languages', (done) => {
build.build(['languages'], (err) => {
2017-05-21 19:01:41 -06:00
assert.ifError(err);
2021-02-04 00:06:15 -07:00
const globalFile = path.join(__dirname, '../build/public/language/en-GB/global.json');
2017-05-24 17:19:04 -06:00
assert(file.existsSync(globalFile), 'global.json exists');
2021-02-04 00:06:15 -07:00
const global = fs.readFileSync(globalFile).toString();
2017-05-24 17:19:04 -06:00
assert.strictEqual(JSON.parse(global).home, 'Home', 'global.json contains correct translations');
2021-02-04 00:06:15 -07:00
const mdFile = path.join(__dirname, '../build/public/language/en-GB/markdown.json');
2017-05-24 17:19:04 -06:00
assert(file.existsSync(mdFile), 'markdown.json exists');
2021-02-04 00:06:15 -07:00
const md = fs.readFileSync(mdFile).toString();
2017-05-24 17:19:04 -06:00
assert.strictEqual(JSON.parse(md).bold, 'bolded text', 'markdown.json contains correct translations');
2017-05-21 19:01:41 -06:00
done();
});
});
2017-02-03 11:39:31 +03:00
});