mirror of https://github.com/laurent22/joplin.git
* Ensure directory exists when export md file. * Add tests.pull/2464/head
parent
56cf5271a2
commit
6973952892
|
@ -334,6 +334,35 @@ describe('services_InteropService', function() {
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it('should export selected notes in md format', asyncTest(async () => {
|
||||||
|
const service = new InteropService();
|
||||||
|
let folder1 = await Folder.save({ title: 'folder1' });
|
||||||
|
let note11 = await Note.save({ title: 'title note11', parent_id: folder1.id });
|
||||||
|
note11 = await Note.load(note11.id);
|
||||||
|
let note12 = await Note.save({ title: 'title note12', parent_id: folder1.id });
|
||||||
|
note12 = await Note.load(note12.id);
|
||||||
|
|
||||||
|
let folder2 = await Folder.save({ title: 'folder2', parent_id: folder1.id });
|
||||||
|
folder2 = await Folder.load(folder2.id);
|
||||||
|
let note21 = await Note.save({ title: 'title note21', parent_id: folder2.id });
|
||||||
|
note21 = await Note.load(note21.id);
|
||||||
|
|
||||||
|
let folder3 = await Folder.save({ title: 'folder3', parent_id: folder1.id });
|
||||||
|
folder3 = await Folder.load(folder2.id);
|
||||||
|
|
||||||
|
const outDir = exportDir();
|
||||||
|
|
||||||
|
await service.export({ path: outDir, format: 'md', sourceNoteIds: [note11.id, note21.id] });
|
||||||
|
|
||||||
|
// verify that the md files exist
|
||||||
|
expect(await shim.fsDriver().exists(`${outDir}/folder1`)).toBe(true);
|
||||||
|
expect(await shim.fsDriver().exists(`${outDir}/folder1/title note11.md`)).toBe(true);
|
||||||
|
expect(await shim.fsDriver().exists(`${outDir}/folder1/title note12.md`)).toBe(false);
|
||||||
|
expect(await shim.fsDriver().exists(`${outDir}/folder1/folder2`)).toBe(true);
|
||||||
|
expect(await shim.fsDriver().exists(`${outDir}/folder1/folder2/title note21.md`)).toBe(true);
|
||||||
|
expect(await shim.fsDriver().exists(`${outDir}/folder3`)).toBe(false);
|
||||||
|
}));
|
||||||
|
|
||||||
it('should export MD with unicode filenames', asyncTest(async () => {
|
it('should export MD with unicode filenames', asyncTest(async () => {
|
||||||
const service = new InteropService();
|
const service = new InteropService();
|
||||||
let folder1 = await Folder.save({ title: 'folder1' });
|
let folder1 = await Folder.save({ title: 'folder1' });
|
||||||
|
|
|
@ -170,6 +170,37 @@ describe('services_InteropService_Exporter_Md', function() {
|
||||||
expect(await shim.fsDriver().exists(`${exportDir}/_resources/${Resource.filename(resource2)}`)).toBe(true, 'Resource file should be copied to _resources directory.');
|
expect(await shim.fsDriver().exists(`${exportDir}/_resources/${Resource.filename(resource2)}`)).toBe(true, 'Resource file should be copied to _resources directory.');
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it('should create folders in fs', asyncTest(async () => {
|
||||||
|
const exporter = new InteropService_Exporter_Md();
|
||||||
|
await exporter.init(exportDir);
|
||||||
|
|
||||||
|
const itemsToExport = [];
|
||||||
|
const queueExportItem = (itemType, itemOrId) => {
|
||||||
|
itemsToExport.push({
|
||||||
|
type: itemType,
|
||||||
|
itemOrId: itemOrId,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
let folder1 = await Folder.save({ title: 'folder1' });
|
||||||
|
|
||||||
|
let folder2 = await Folder.save({ title: 'folder2', parent_id: folder1.id });
|
||||||
|
let note2 = await Note.save({ title: 'note2', parent_id: folder2.id });
|
||||||
|
queueExportItem(BaseModel.TYPE_NOTE, note2);
|
||||||
|
|
||||||
|
let folder3 = await Folder.save({ title: 'folder3', parent_id: folder1.id });
|
||||||
|
queueExportItem(BaseModel.TYPE_FOLDER, folder3.id);
|
||||||
|
|
||||||
|
await exporter.processItem(Folder, folder2);
|
||||||
|
await exporter.processItem(Folder, folder3);
|
||||||
|
await exporter.prepareForProcessingItemType(BaseModel.TYPE_NOTE, itemsToExport);
|
||||||
|
await exporter.processItem(Note, note2);
|
||||||
|
|
||||||
|
expect(await shim.fsDriver().exists(`${exportDir}/folder1`)).toBe(true, 'Folder should be created in filesystem.');
|
||||||
|
expect(await shim.fsDriver().exists(`${exportDir}/folder1/folder2`)).toBe(true, 'Folder should be created in filesystem.');
|
||||||
|
expect(await shim.fsDriver().exists(`${exportDir}/folder1/folder3`)).toBe(true, 'Folder should be created in filesystem.');
|
||||||
|
}));
|
||||||
|
|
||||||
it('should save notes in fs', asyncTest(async () => {
|
it('should save notes in fs', asyncTest(async () => {
|
||||||
const exporter = new InteropService_Exporter_Md();
|
const exporter = new InteropService_Exporter_Md();
|
||||||
await exporter.init(exportDir);
|
await exporter.init(exportDir);
|
||||||
|
@ -197,9 +228,6 @@ describe('services_InteropService_Exporter_Md', function() {
|
||||||
queueExportItem(BaseModel.TYPE_FOLDER, folder3.id);
|
queueExportItem(BaseModel.TYPE_FOLDER, folder3.id);
|
||||||
queueExportItem(BaseModel.TYPE_NOTE, note3);
|
queueExportItem(BaseModel.TYPE_NOTE, note3);
|
||||||
|
|
||||||
await exporter.processItem(Folder, folder1);
|
|
||||||
await exporter.processItem(Folder, folder2);
|
|
||||||
await exporter.processItem(Folder, folder3);
|
|
||||||
await exporter.prepareForProcessingItemType(BaseModel.TYPE_NOTE, itemsToExport);
|
await exporter.prepareForProcessingItemType(BaseModel.TYPE_NOTE, itemsToExport);
|
||||||
await exporter.processItem(Note, note1);
|
await exporter.processItem(Note, note1);
|
||||||
await exporter.processItem(Note, note2);
|
await exporter.processItem(Note, note2);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
const InteropService_Exporter_Base = require('lib/services/InteropService_Exporter_Base');
|
const InteropService_Exporter_Base = require('lib/services/InteropService_Exporter_Base');
|
||||||
const { basename, friendlySafeFilename } = require('lib/path-utils.js');
|
const { basename, dirname, friendlySafeFilename } = require('lib/path-utils.js');
|
||||||
const BaseModel = require('lib/BaseModel');
|
const BaseModel = require('lib/BaseModel');
|
||||||
const Folder = require('lib/models/Folder');
|
const Folder = require('lib/models/Folder');
|
||||||
const Note = require('lib/models/Note');
|
const Note = require('lib/models/Note');
|
||||||
|
@ -119,6 +119,7 @@ class InteropService_Exporter_Md extends InteropService_Exporter_Base {
|
||||||
let noteBody = await this.relaceLinkedItemIdsByRelativePaths_(item);
|
let noteBody = await this.relaceLinkedItemIdsByRelativePaths_(item);
|
||||||
const modNote = Object.assign({}, item, { body: noteBody });
|
const modNote = Object.assign({}, item, { body: noteBody });
|
||||||
const noteContent = await Note.serializeForEdit(modNote);
|
const noteContent = await Note.serializeForEdit(modNote);
|
||||||
|
await shim.fsDriver().mkdir(dirname(noteFilePath));
|
||||||
await shim.fsDriver().writeFile(noteFilePath, noteContent, 'utf-8');
|
await shim.fsDriver().writeFile(noteFilePath, noteContent, 'utf-8');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue