diff --git a/package.json b/package.json index 8cbf94490..492abd2ba 100644 --- a/package.json +++ b/package.json @@ -15,13 +15,15 @@ "scripts": { "start-server": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon ./src/www", "start-server-no-dir": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon ./src/www", - "qstart-server": "rm -r ./node_modules/better-sqlite3/bin ; mkdir -p ./node_modules/better-sqlite3/build ; cp ./bin/better-sqlite3/linux-server-better_sqlite3.node ./node_modules/better-sqlite3/build/better_sqlite3.node && TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon ./src/www", + "qstart-server": "npm run qswitch-server && TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon ./src/www", "start-electron": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron --inspect=5858 .", "start-electron-no-dir": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 electron --inspect=5858 .", - "qstart-electron": "rm -r ./node_modules/better-sqlite3/bin ; mkdir -p ./node_modules/better-sqlite3/build ; cp ./bin/better-sqlite3/linux-desktop-better_sqlite3.node ./node_modules/better-sqlite3/build/better_sqlite3.node && TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron --inspect=5858 .", - "start-test-server": "rm -rf ./data-test; cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 node ./src/www", + "qstart-electron": "npm run qswitch-electron && TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron --inspect=5858 .", + "start-test-server": "npm run qswitch-server; rm -rf ./data-test; cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 node ./src/www", "switch-server": "rm -rf ./node_modules/better-sqlite3 && npm install", "switch-electron": "./node_modules/.bin/electron-rebuild", + "qswitch-server": "rm -rf ./node_modules/better-sqlite3/bin ; mkdir -p ./node_modules/better-sqlite3/build ; cp ./bin/better-sqlite3/linux-server-better_sqlite3.node ./node_modules/better-sqlite3/build/better_sqlite3.node", + "qswitch-electron": "rm -rf ./node_modules/better-sqlite3/bin ; mkdir -p ./node_modules/better-sqlite3/build ; cp ./bin/better-sqlite3/linux-desktop-better_sqlite3.node ./node_modules/better-sqlite3/build/better_sqlite3.node", "build-backend-docs": "rm -rf ./docs/backend_api && ./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/backend_api src/becca/entities/*.js src/services/backend_script_api.js src/services/sql.js", "build-frontend-docs": "rm -rf ./docs/frontend_api && ./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/app/entities/*.js src/public/app/services/frontend_script_api.js src/public/app/widgets/basic_widget.js src/public/app/widgets/note_context_aware_widget.js src/public/app/widgets/right_panel_widget.js", "build-docs": "npm run build-backend-docs && npm run build-frontend-docs", diff --git a/spec/etapi/app_info.js b/spec/etapi/app_info.js new file mode 100644 index 000000000..dff253a5b --- /dev/null +++ b/spec/etapi/app_info.js @@ -0,0 +1,12 @@ +const { + describeEtapi, postEtapi, + putEtapiContent +} = require("../support/etapi"); +const {getEtapi} = require("../support/etapi.js"); + +describeEtapi("app_info", () => { + it("get", async () => { + const appInfo = await getEtapi("app-info"); + expect(appInfo.clipperProtocolVersion).toEqual("1.0"); + }); +}); diff --git a/spec/etapi/backup.js b/spec/etapi/backup.js new file mode 100644 index 000000000..d22625b56 --- /dev/null +++ b/spec/etapi/backup.js @@ -0,0 +1,12 @@ +const { + describeEtapi, postEtapi, + getEtapi, +} = require("../support/etapi"); +const {putEtapiContent} = require("../support/etapi.js"); + +describeEtapi("backup", () => { + it("create", async () => { + const response = await putEtapiContent("backup/etapi_test"); + expect(response.status).toEqual(204); + }); +}); diff --git a/spec/etapi/import.js b/spec/etapi/import.js new file mode 100644 index 000000000..45db2890b --- /dev/null +++ b/spec/etapi/import.js @@ -0,0 +1,24 @@ +const { + describeEtapi, postEtapi, + postEtapiContent, +} = require("../support/etapi"); +const fs = require("fs"); +const path = require("path"); +const {getEtapiContent} = require("../support/etapi.js"); + +describeEtapi("import", () => { + it("import", async () => { + const zipFileBuffer = fs.readFileSync(path.resolve(__dirname, 'test-export.zip')); + + const response = await postEtapiContent("notes/root/import", zipFileBuffer); + expect(response.status).toEqual(201); + + const {note, branch} = await response.json(); + + expect(note.title).toEqual("test-export"); + expect(branch.parentNoteId).toEqual("root"); + + const content = await (await getEtapiContent(`notes/${note.noteId}/content`)).text(); + expect(content).toContain("test export content"); + }); +}); diff --git a/spec/etapi/notes.js b/spec/etapi/notes.js index a27d6ff69..f63acee0a 100644 --- a/spec/etapi/notes.js +++ b/spec/etapi/notes.js @@ -1,6 +1,13 @@ -const {describeEtapi, postEtapi, getEtapi, getEtapiContent, patchEtapi, putEtapi, putEtapiContent} = require("../support/etapi"); const crypto = require('crypto'); -const {deleteEtapi, getEtapiResponse} = require("../support/etapi.js"); +const { + deleteEtapi, + getEtapiResponse, + describeEtapi, postEtapi, + getEtapi, + getEtapiContent, + patchEtapi, putEtapi, + putEtapiContent +} = require("../support/etapi"); describeEtapi("notes", () => { it("create", async () => { diff --git a/spec/support/etapi.js b/spec/support/etapi.js index 0675d630b..97bf5aee1 100644 --- a/spec/support/etapi.js +++ b/spec/support/etapi.js @@ -90,6 +90,21 @@ async function postEtapi(url, data = {}) { return await processEtapiResponse(response); } +async function postEtapiContent(url, data) { + const response = await fetch(`${HOST}/etapi/${url}`, { + method: 'POST', + headers: { + "Content-Type": "application/octet-stream", + Authorization: getEtapiAuthorizationHeader() + }, + body: data + }); + + checkStatus(response); + + return response; +} + async function putEtapi(url, data = {}) { const response = await fetch(`${HOST}/etapi/${url}`, { method: 'PUT', @@ -113,6 +128,8 @@ async function putEtapiContent(url, data) { }); checkStatus(response); + + return response; } async function patchEtapi(url, data = {}) { @@ -159,6 +176,7 @@ module.exports = { getEtapiResponse, getEtapiContent, postEtapi, + postEtapiContent, putEtapi, putEtapiContent, patchEtapi,