diff --git a/packages/core/__mocks__/storage.mock.js b/packages/core/__mocks__/storage.mock.js index f2767e841..d0e5b9faa 100644 --- a/packages/core/__mocks__/storage.mock.js +++ b/packages/core/__mocks__/storage.mock.js @@ -25,7 +25,9 @@ function clear() { } function encrypt(password, data) { - return new Promise((resolve, reject) => resolve({ iv: "", cipher: data })); + return new Promise((resolve, reject) => + resolve({ iv: "some iv", cipher: data }) + ); } function decrypt(password, data) { return new Promise((resolve, reject) => resolve(data.cipher)); diff --git a/packages/core/__tests__/notes.test.js b/packages/core/__tests__/notes.test.js index 242c983b1..8269d3c08 100644 --- a/packages/core/__tests__/notes.test.js +++ b/packages/core/__tests__/notes.test.js @@ -230,38 +230,6 @@ test("favorite note", () => note = db.notes.note(id); expect(note.data.favorite).toBe(true); })); -/* -test("lock a note", () => - noteTest().then(async ({ db, id }) => { - let note = db.notes.note(id); - await note.lock("password123"); - note = db.notes.note(id); - expect(note.data.locked).toBe(true); - expect(note.data.content.iv).toBeDefined(); - expect((await note.delta()).iv).toBeDefined(); - })); - -test("unlock a locked note", () => - noteTest().then(async ({ db, id }) => { - let note = db.notes.note(id); - await note.lock("password123"); - note = db.notes.note(id); - note = await note.unlock("password123"); - expect(note.id).toBe(id); - expect(note.content.text).toBe(TEST_NOTE.content.text); - expect(note.content.delta.ops).toBeDefined(); - })); - -test("permanently unlock a locked note", () => - noteTest().then(async ({ db, id }) => { - let note = db.notes.note(id); - await note.lock("password123"); - note = db.notes.note(id); - await note.unlock("password123", true); - note = db.notes.note(id); - expect((await note.delta()).ops).toBeDefined(); - expect(note.data.locked).toBe(false); - })); */ test("add note to topic", () => noteTest().then(async ({ db, id }) => { diff --git a/packages/core/__tests__/vault.test.js b/packages/core/__tests__/vault.test.js new file mode 100644 index 000000000..7c6ffd9ad --- /dev/null +++ b/packages/core/__tests__/vault.test.js @@ -0,0 +1,74 @@ +import { StorageInterface, databaseTest, noteTest, TEST_NOTE } from "./utils"; + +beforeEach(async () => { + StorageInterface.clear(); +}); + +test("create vault", () => + databaseTest().then(async db => { + expect(await db.vault.create("password")).toBe(true); + const lockKey = await db.context.read("lockKey"); + expect(lockKey).toBeDefined(); + expect(lockKey.iv).toBeDefined(); + expect(lockKey.cipher).toBeDefined(); + })); + +test("unlock vault", () => + databaseTest().then(async db => { + expect(await db.vault.create("password")).toBe(true); + expect(await db.vault.unlock("password")).toBe(true); + })); + +test("unlock non-existent vault", () => + databaseTest().then(async db => { + db.vault + .unlock("password") + .catch(err => expect(err.message).toBe("ERR_NO_VAULT")); + })); + +test("unlock vault with wrong password", () => + databaseTest().then(async db => { + await db.vault.create("password"); + db.vault + .unlock("passwrd") + .catch(err => expect(err.message).toBe("ERR_WRNG_PWD")); + })); + +test("lock a note when no vault has been created", () => + noteTest().then(({ db, id }) => { + db.vault.add(id).catch(err => { + expect(err.message).toBe("ERR_NO_VAULT"); + }); + })); + +test("lock a note", () => + noteTest().then(async ({ db, id }) => { + await db.vault.create("password"); + await db.vault.add(id); + const note = db.notes.note(id); + const { content } = note.data; + expect(content.iv).toBeDefined(); + expect(content.cipher).toBeDefined(); + expect((await note.delta()).iv).toBeDefined(); + })); + +test("unlock a note", () => + noteTest().then(async ({ db, id }) => { + await db.vault.create("password"); + await db.vault.add(id); + const note = await db.vault.open(id, "password"); + expect(note.id).toBe(id); + expect(note.content.text).toBe(TEST_NOTE.content.text); + expect(note.content.delta.ops).toBeDefined(); + })); + +test("unlock a note permanently", () => + noteTest().then(async ({ db, id }) => { + await db.vault.create("password"); + await db.vault.add(id); + await db.vault.remove(id, "password"); + const note = db.notes.note(id); + expect(note.id).toBe(id); + expect(note.data.content.text).toBe(TEST_NOTE.content.text); + expect((await note.delta()).ops).toBeDefined(); + })); diff --git a/packages/core/api/vault.js b/packages/core/api/vault.js index 45a94d181..2c10fc0a9 100644 --- a/packages/core/api/vault.js +++ b/packages/core/api/vault.js @@ -28,7 +28,7 @@ export default class Vault { async unlock(password) { const lockKey = await this._context.read("lockKey"); - if (!this._exists(lockKey)) throw new Error("ERR_NO_VAULT"); + if (!(await this._exists(lockKey))) throw new Error("ERR_NO_VAULT"); var data; try { data = await this._context.decrypt(password, lockKey); @@ -102,7 +102,6 @@ export default class Vault { this._password, JSON.stringify(deltaArg) ); - console.log(delta); await this._context.write(this._deltaId(id), delta); }