2018-09-27 10:14:05 +02:00
|
|
|
require('app-module-path').addPath(__dirname);
|
|
|
|
|
|
|
|
const { time } = require('lib/time-utils.js');
|
|
|
|
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
|
|
|
const markdownUtils = require('lib/markdownUtils.js');
|
|
|
|
const Api = require('lib/services/rest/Api');
|
|
|
|
const Folder = require('lib/models/Folder');
|
2018-09-27 20:35:10 +02:00
|
|
|
const Note = require('lib/models/Note');
|
2018-09-27 10:14:05 +02:00
|
|
|
const Resource = require('lib/models/Resource');
|
|
|
|
|
2018-09-27 20:35:10 +02:00
|
|
|
jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;
|
|
|
|
|
2018-09-27 10:14:05 +02:00
|
|
|
process.on('unhandledRejection', (reason, p) => {
|
|
|
|
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
|
|
|
});
|
|
|
|
|
|
|
|
let api = null;
|
|
|
|
|
|
|
|
describe('services_rest_Api', function() {
|
|
|
|
|
|
|
|
beforeEach(async (done) => {
|
|
|
|
api = new Api();
|
|
|
|
await setupDatabaseAndSynchronizer(1);
|
|
|
|
await switchClient(1);
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should ping', async (done) => {
|
|
|
|
const response = await api.route('GET', 'ping');
|
|
|
|
expect(response).toBe('JoplinClipperServer');
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should handle Not Found errors', async (done) => {
|
|
|
|
const hasThrown = await checkThrowAsync(async () => await api.route('GET', 'pong'));
|
|
|
|
expect(hasThrown).toBe(true);
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should get folders', async (done) => {
|
|
|
|
let f1 = await Folder.save({ title: "mon carnet" });
|
|
|
|
const response = await api.route('GET', 'folders');
|
|
|
|
expect(response.length).toBe(1);
|
|
|
|
expect(response[0].title).toBe('mon carnet');
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
|
2018-09-27 20:35:10 +02:00
|
|
|
it('should get notes', async (done) => {
|
|
|
|
let response = null;
|
|
|
|
const f1 = await Folder.save({ title: "mon carnet" });
|
|
|
|
const f2 = await Folder.save({ title: "mon deuxième carnet" });
|
|
|
|
const n1 = await Note.save({ title: 'un', parent_id: f1.id });
|
|
|
|
const n2 = await Note.save({ title: 'deux', parent_id: f1.id });
|
|
|
|
const n3 = await Note.save({ title: 'trois', parent_id: f2.id });
|
|
|
|
|
|
|
|
response = await api.route('GET', 'notes');
|
|
|
|
expect(response.length).toBe(3);
|
|
|
|
|
|
|
|
response = await api.route('GET', 'notes', { parent_id: f1.id });
|
|
|
|
expect(response.length).toBe(2);
|
|
|
|
|
|
|
|
response = await api.route('GET', 'notes', { parent_id: f2.id });
|
|
|
|
expect(response.length).toBe(1);
|
|
|
|
expect(response[0].id).toBe(n3.id);
|
|
|
|
|
|
|
|
response = await api.route('GET', 'notes/' + n1.id);
|
|
|
|
expect(response.id).toBe(n1.id);
|
|
|
|
|
|
|
|
response = await api.route('GET', 'notes/' + n3.id, { fields: 'id,title' });
|
|
|
|
expect(Object.getOwnPropertyNames(response).length).toBe(3);
|
|
|
|
expect(response.id).toBe(n3.id);
|
|
|
|
expect(response.title).toBe('trois');
|
|
|
|
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
|
2018-09-27 10:14:05 +02:00
|
|
|
it('should create notes', async (done) => {
|
|
|
|
let response = null;
|
|
|
|
const f = await Folder.save({ title: "mon carnet" });
|
|
|
|
|
|
|
|
response = await api.route('POST', 'notes', null, JSON.stringify({
|
|
|
|
title: 'testing',
|
|
|
|
parent_id: f.id,
|
|
|
|
}));
|
|
|
|
expect(response.title).toBe('testing');
|
|
|
|
expect(!!response.id).toBe(true);
|
|
|
|
|
|
|
|
response = await api.route('POST', 'notes', null, JSON.stringify({
|
|
|
|
title: 'testing',
|
|
|
|
parent_id: f.id,
|
|
|
|
}));
|
|
|
|
expect(response.title).toBe('testing');
|
|
|
|
expect(!!response.id).toBe(true);
|
|
|
|
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should create notes with images', async (done) => {
|
|
|
|
let response = null;
|
|
|
|
const f = await Folder.save({ title: "mon carnet" });
|
|
|
|
|
|
|
|
response = await api.route('POST', 'notes', null, JSON.stringify({
|
|
|
|
title: 'testing image',
|
|
|
|
parent_id: f.id,
|
|
|
|
image_data_url: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUeNoAyAA3/wFwtO3K6gUB/vz2+Prw9fj/+/r+/wBZKAAExOgF4/MC9ff+MRH6Ui4E+/0Bqc/zutj6AgT+/Pz7+vv7++nu82c4DlMqCvLs8goA/gL8/fz09fb59vXa6vzZ6vjT5fbn6voD/fwC8vX4UiT9Zi//APHyAP8ACgUBAPv5APz7BPj2+DIaC2o3E+3o6ywaC5fT6gD6/QD9/QEVf9kD+/dcLQgJA/7v8vqfwOf18wA1IAIEVycAyt//v9XvAPv7APz8LhoIAPz9Ri4OAgwARgx4W/6fVeEAAAAASUVORK5CYII="
|
|
|
|
}));
|
|
|
|
|
|
|
|
const resources = await Resource.all();
|
|
|
|
expect(resources.length).toBe(1);
|
|
|
|
|
|
|
|
const resource = resources[0];
|
|
|
|
expect(response.body.indexOf(resource.id) >= 0).toBe(true);
|
|
|
|
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should create notes from HTML', async (done) => {
|
|
|
|
let response = null;
|
|
|
|
const f = await Folder.save({ title: "mon carnet" });
|
|
|
|
|
|
|
|
response = await api.route('POST', 'notes', null, JSON.stringify({
|
|
|
|
title: 'testing HTML',
|
|
|
|
parent_id: f.id,
|
|
|
|
body_html: '<b>Bold text</b>',
|
|
|
|
}));
|
|
|
|
|
|
|
|
expect(response.body).toBe('**Bold text**');
|
|
|
|
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should filter fields', async (done) => {
|
|
|
|
let f = api.fields_({ query: { fields: 'one,two' } }, []);
|
|
|
|
expect(f.length).toBe(2);
|
|
|
|
expect(f[0]).toBe('one');
|
|
|
|
expect(f[1]).toBe('two');
|
|
|
|
|
|
|
|
f = api.fields_({ query: { fields: 'one ,, two ' } }, []);
|
|
|
|
expect(f.length).toBe(2);
|
|
|
|
expect(f[0]).toBe('one');
|
|
|
|
expect(f[1]).toBe('two');
|
|
|
|
|
|
|
|
f = api.fields_({ query: { fields: ' ' } }, ['def']);
|
|
|
|
expect(f.length).toBe(1);
|
|
|
|
expect(f[0]).toBe('def');
|
|
|
|
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
|
2018-09-27 20:35:10 +02:00
|
|
|
it('should handle tokens', async (done) => {
|
|
|
|
api = new Api('mytoken');
|
|
|
|
|
|
|
|
const hasThrown = await checkThrowAsync(async () => await api.route('GET', 'notes'));
|
|
|
|
expect(hasThrown).toBe(true);
|
|
|
|
|
|
|
|
const response = await api.route('GET', 'notes', { token: 'mytoken' })
|
|
|
|
expect(response.length).toBe(0);
|
|
|
|
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
|
2018-09-27 10:14:05 +02:00
|
|
|
});
|