joplin/CliClient/tests/test-utils.js

110 lines
2.7 KiB
JavaScript
Raw Normal View History

2017-06-14 19:59:02 +00:00
import fs from 'fs-extra';
2017-06-24 18:06:28 +00:00
import { Database } from 'lib/database.js';
import { DatabaseDriverNode } from 'lib/database-driver-node.js';
import { BaseModel } from 'lib/base-model.js';
import { Folder } from 'lib/models/folder.js';
import { Note } from 'lib/models/note.js';
2017-06-25 15:17:40 +00:00
import { Logger } from 'lib/logger.js';
2017-06-24 18:06:28 +00:00
import { Setting } from 'lib/models/setting.js';
import { BaseItem } from 'lib/models/base-item.js';
import { Synchronizer } from 'lib/synchronizer.js';
import { FileApi } from 'lib/file-api.js';
import { FileApiDriverMemory } from 'lib/file-api-driver-memory.js';
2017-06-14 19:59:02 +00:00
2017-06-18 20:19:13 +00:00
let databases_ = [];
let synchronizers_ = [];
2017-06-14 19:59:02 +00:00
let fileApi_ = null;
2017-06-18 20:19:13 +00:00
let currentClient_ = 1;
2017-06-14 19:59:02 +00:00
2017-06-25 15:17:40 +00:00
const logger = new Logger();
logger.addTarget('file', { path: __dirname + '/data/log-test.txt' });
logger.setLevel(Logger.LEVEL_DEBUG);
2017-06-18 20:19:13 +00:00
function sleep(n) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
2017-06-19 19:18:22 +00:00
}, Math.round(n * 1000));
2017-06-18 20:19:13 +00:00
});
}
function switchClient(id) {
2017-06-20 19:18:19 +00:00
Setting.saveAll();
2017-06-18 20:19:13 +00:00
currentClient_ = id;
BaseModel.db_ = databases_[id];
Folder.db_ = databases_[id];
Note.db_ = databases_[id];
BaseItem.db_ = databases_[id];
2017-06-20 19:18:19 +00:00
Setting.db_ = databases_[id];
return Setting.load();
2017-06-18 20:19:13 +00:00
}
function clearDatabase(id = null) {
if (id === null) id = currentClient_;
let queries = [
'DELETE FROM changes',
'DELETE FROM notes',
'DELETE FROM folders',
'DELETE FROM item_sync_times',
];
return databases_[id].transactionExecBatch(queries);
}
function setupDatabase(id = null) {
if (id === null) id = currentClient_;
if (databases_[id]) {
2017-06-19 18:58:49 +00:00
return clearDatabase(id).then(() => {
return Setting.load();
});
2017-06-14 19:59:02 +00:00
}
2017-06-18 20:19:13 +00:00
const filePath = __dirname + '/data/test-' + id + '.sqlite';
2017-06-14 19:59:02 +00:00
return fs.unlink(filePath).catch(() => {
// Don't care if the file doesn't exist
}).then(() => {
2017-06-18 20:19:13 +00:00
databases_[id] = new Database(new DatabaseDriverNode());
2017-06-25 15:17:40 +00:00
databases_[id].setLogger(logger);
2017-06-18 20:19:13 +00:00
return databases_[id].open({ name: filePath }).then(() => {
BaseModel.db_ = databases_[id];
return setupDatabase(id);
2017-06-14 19:59:02 +00:00
});
});
}
2017-06-18 20:19:13 +00:00
async function setupDatabaseAndSynchronizer(id = null) {
if (id === null) id = currentClient_;
2017-06-17 23:49:52 +00:00
2017-06-18 20:19:13 +00:00
await setupDatabase(id);
if (!synchronizers_[id]) {
synchronizers_[id] = new Synchronizer(db(id), fileApi());
2017-06-25 15:17:40 +00:00
synchronizers_[id].setLogger(logger);
2017-06-17 23:49:52 +00:00
}
2017-06-18 20:19:13 +00:00
await fileApi().format();
2017-06-14 19:59:02 +00:00
}
2017-06-18 20:19:13 +00:00
function db(id = null) {
if (id === null) id = currentClient_;
return databases_[id];
2017-06-14 19:59:02 +00:00
}
2017-06-18 20:19:13 +00:00
function synchronizer(id = null) {
if (id === null) id = currentClient_;
return synchronizers_[id];
2017-06-14 19:59:02 +00:00
}
function fileApi() {
2017-06-18 20:19:13 +00:00
if (fileApi_) return fileApi_;
fileApi_ = new FileApi('/root', new FileApiDriverMemory());
2017-06-25 15:17:40 +00:00
fileApi_.setLogger(logger);
2017-06-14 19:59:02 +00:00
return fileApi_;
}
2017-06-18 20:19:13 +00:00
export { setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient };