Ghost/ghost/importer-handler-content-files/test/ImporterContentFileHandler.test.js

129 lines
5.0 KiB
JavaScript
Raw Normal View History

const assert = require('assert/strict');
const ImporterContentFileHandler = require('../index');
describe('ImporterContentFileHandler', function () {
it('creates an instance', function () {
const contentFileImporter = new ImporterContentFileHandler({
type: 'media',
storage: {},
config: {},
urlUtils: {}
});
assert.ok(contentFileImporter);
assert.equal(contentFileImporter.type, 'media');
});
it('returns configured extensions', function () {
const contentFileImporter = new ImporterContentFileHandler({
storage: {},
extensions: ['mp4'],
urlUtils: {}
});
assert.deepEqual(contentFileImporter.extensions, ['mp4']);
});
it('returns configured contentTypes', function () {
const contentFileImporter = new ImporterContentFileHandler({
storage: {},
contentTypes: ['video/mp4'],
urlUtils: {}
});
assert.deepEqual(contentFileImporter.contentTypes, ['video/mp4']);
});
// @NOTE: below tests need more work, they are just covering the basics
// the cases are based on a fact that the implementation was a copy
// from the image importer and the tests were adapted to the media importer
describe('loadFile', function () {
it('loads files and decorates them with newPath with subdirectory', async function () {
const contentFileImporter = new ImporterContentFileHandler({
storage: {
staticFileURLPrefix: 'content/media',
getUniqueFileName: (file, targetDir) => Promise.resolve(targetDir + '/' + file.name)
},
contentPath: '/var/www/ghost/content/media',
urlUtils: {
getSubdir: () => 'blog',
urlJoin: (...args) => args.join('/')
}
});
const files = [{
name: 'content/media/1.mp4'
}];
const subDir = 'blog';
await contentFileImporter.loadFile(files, subDir);
assert.equal(files[0].name, '1.mp4');
assert.equal(files[0].originalPath, 'content/media/1.mp4');
assert.equal(files[0].targetDir, '/var/www/ghost/content/media');
assert.equal(files[0].newPath, '//blog/content/media/1.mp4');
});
it('loads files and decorates them with newPath with NO subdirectory', async function () {
const contentFileImporter = new ImporterContentFileHandler({
storage: {
staticFileURLPrefix: 'content/media',
getUniqueFileName: (file, targetDir) => Promise.resolve(targetDir + '/' + file.name)
},
contentPath: '/var/www/ghost/content/media',
urlUtils: {
getSubdir: () => 'blog',
urlJoin: (...args) => args.join('/')
}
});
const files = [{
name: 'content/media/1.mp4'
}];
await contentFileImporter.loadFile(files);
assert.equal(files[0].name, '1.mp4');
assert.equal(files[0].originalPath, 'content/media/1.mp4');
assert.equal(files[0].targetDir, '/var/www/ghost/content/media');
assert.equal(files[0].newPath, '//blog/content/media/1.mp4');
});
it('ignores files in root folder', async function () {
const contentFileImporter = new ImporterContentFileHandler({
storage: {
staticFileURLPrefix: 'content/media',
getUniqueFileName: (file, targetDir) => Promise.resolve(targetDir + '/' + file.name)
},
contentPath: '/var/www/ghost/content/media',
ignoreRootFolderFiles: true,
urlUtils: {
getSubdir: () => 'blog',
urlJoin: (...args) => args.join('/')
}
});
const files = [{
name: 'root.mp4'
}, {
name: 'content/media/1.mp4'
}];
await contentFileImporter.loadFile(files);
// @NOTE: the root file is ignored. It's a weird test because ideally the file
// should be removed completely from the list, but the importer works
// by modifying the list in place and it's not easy to remove the file
assert.equal(files[0].name, 'root.mp4');
assert.equal(files[0].originalPath, undefined);
assert.equal(files[0].targetDir, undefined);
assert.equal(files[0].newPath, undefined);
assert.equal(files[1].name, '1.mp4');
assert.equal(files[1].originalPath, 'content/media/1.mp4');
assert.equal(files[1].targetDir, '/var/www/ghost/content/media');
assert.equal(files[1].newPath, '//blog/content/media/1.mp4');
});
});
});