diff --git a/apps/web/__e2e__/editor.test.js b/apps/web/__e2e__/editor.test.js
index 4319fd0f2..0678591f9 100644
--- a/apps/web/__e2e__/editor.test.js
+++ b/apps/web/__e2e__/editor.test.js
@@ -1,6 +1,16 @@
const { Page, test, expect } = require("@playwright/test");
-const { createNote, NOTE, getTestId } = require("./utils");
-const { checkNotePresence } = require("./utils/conditions");
+const {
+ createNote,
+ NOTE,
+ getTestId,
+ getEditorTitle,
+ getEditorContent,
+ getEditorContentAsHTML,
+} = require("./utils");
+const {
+ checkNotePresence,
+ createNoteAndCheckPresence,
+} = require("./utils/conditions");
/**
* @type {Page}
*/
@@ -78,3 +88,99 @@ test("normal mode from focus mode", async () => {
await page.screenshot({ fullPage: true, quality: 100, type: "jpeg" })
).toMatchSnapshot("normal-mode-from-focus-mode.jpg", { threshold: 99 });
});
+
+test("creating a new note should clear the editor contents & title", async () => {
+ await createNoteAndCheckPresence();
+
+ await page.click(getTestId("notes-action-button"));
+
+ expect(await getEditorTitle()).toBe("");
+
+ expect(await getEditorContent()).toBe("");
+});
+
+test("creating a new note should clear the word count", async () => {
+ const selector = await createNoteAndCheckPresence();
+
+ await page.click(getTestId("notes-action-button"));
+
+ await page.click(selector);
+
+ await createNote({ title: "Hello World" }, "notes");
+
+ await expect(page.innerText(getTestId("editor-word-count"))).resolves.toBe(
+ "0 words"
+ );
+});
+
+test("creating a new title-only note should add it to the list", async () => {
+ const selector = await createNoteAndCheckPresence();
+
+ await page.click(getTestId("notes-action-button"));
+
+ await page.click(selector);
+
+ await createNoteAndCheckPresence({ title: "Hello World" });
+});
+
+test("format changes should get saved", async () => {
+ const selector = await createNoteAndCheckPresence();
+
+ await page.click(getTestId("notes-action-button"));
+
+ await page.click(selector);
+
+ await page.waitForSelector(".mce-content-body");
+
+ await page.keyboard.press("Control+a");
+
+ await page.click(`#editorToolbar button[title="Bold"]`);
+
+ await page.waitForTimeout(200);
+
+ await page.click(getTestId("notes-action-button"));
+
+ await page.click(selector);
+
+ const content = await getEditorContentAsHTML();
+
+ expect(content).toMatchSnapshot(`format-changes-should-get-saved.txt`);
+});
+
+test("opening an empty titled note should empty out editor contents", async () => {
+ await createNoteAndCheckPresence();
+
+ const onlyTitle = await createNoteAndCheckPresence({
+ title: "Only a title",
+ });
+
+ await page.click(getTestId("notes-action-button"));
+
+ await page.reload();
+
+ const fullNote = await checkNotePresence("home", 1, NOTE);
+
+ await page.click(fullNote);
+
+ await expect(getEditorContent()).resolves.toBe(NOTE.content);
+
+ await expect(getEditorTitle()).resolves.toBe(NOTE.title);
+
+ await page.click(onlyTitle);
+
+ await expect(getEditorTitle()).resolves.toBe("Only a title");
+
+ await expect(getEditorContent()).resolves.toBe("");
+});
+
+test("focus should not jump to editor while typing in title input", async () => {
+ await page.click(getTestId("notes-action-button"));
+
+ await page.waitForSelector(".mce-content-body");
+
+ await page.type(getTestId("editor-title"), "Hello", { delay: 200 });
+
+ await expect(getEditorTitle()).resolves.toBe("Hello");
+
+ await expect(getEditorContent()).resolves.toBe("");
+});
diff --git a/apps/web/__e2e__/notes.test.js-snapshots/format-changes-should-get-saved-Chromium-linux.txt b/apps/web/__e2e__/editor.test.js-snapshots/format-changes-should-get-saved-Chromium-linux.txt
similarity index 100%
rename from apps/web/__e2e__/notes.test.js-snapshots/format-changes-should-get-saved-Chromium-linux.txt
rename to apps/web/__e2e__/editor.test.js-snapshots/format-changes-should-get-saved-Chromium-linux.txt
diff --git a/apps/web/__e2e__/editor.test.js-snapshots/format-changes-should-get-saved-Firefox-linux.txt b/apps/web/__e2e__/editor.test.js-snapshots/format-changes-should-get-saved-Firefox-linux.txt
new file mode 100644
index 000000000..5e3bcad9b
--- /dev/null
+++ b/apps/web/__e2e__/editor.test.js-snapshots/format-changes-should-get-saved-Firefox-linux.txt
@@ -0,0 +1 @@
+
This is Test 1Test 1Test 1Test 1Test 1Test 1Test 1Test 1Test 1Test 1
\ No newline at end of file
diff --git a/apps/web/__e2e__/notes.test.js-snapshots/format-changes-should-get-saved-WebKit-linux.txt b/apps/web/__e2e__/editor.test.js-snapshots/format-changes-should-get-saved-WebKit-linux.txt
similarity index 100%
rename from apps/web/__e2e__/notes.test.js-snapshots/format-changes-should-get-saved-WebKit-linux.txt
rename to apps/web/__e2e__/editor.test.js-snapshots/format-changes-should-get-saved-WebKit-linux.txt
diff --git a/apps/web/__e2e__/notes.test.js b/apps/web/__e2e__/notes.test.js
index 5b54572c2..29875e2dd 100644
--- a/apps/web/__e2e__/notes.test.js
+++ b/apps/web/__e2e__/notes.test.js
@@ -8,14 +8,12 @@ const { Page, test, expect } = require("@playwright/test");
const {
getTestId,
- createNote,
NOTE,
downloadFile,
PASSWORD,
editNote,
getEditorTitle,
getEditorContent,
- getEditorContentAsHTML,
} = require("./utils");
const {
navigateTo,
@@ -30,6 +28,7 @@ const {
isPresent,
isAbsent,
checkNotePresence,
+ createNoteAndCheckPresence,
} = require("./utils/conditions");
const List = require("./utils/listitemidbuilder");
const Menu = require("./utils/menuitemidbuilder");
@@ -40,23 +39,6 @@ const { LoremIpsum } = require("lorem-ipsum");
*/
var page = null;
-async function createNoteAndCheckPresence(
- note = NOTE,
- viewId = "home",
- index = 0
-) {
- await createNote(note, "notes");
-
- // make sure the note has saved.
- await page.waitForTimeout(200);
-
- let noteSelector = await checkNotePresence(viewId, index, note);
-
- await page.click(noteSelector, { button: "left" });
-
- return noteSelector;
-}
-
async function deleteNoteAndCheckAbsence(viewId = "home") {
const noteSelector = await createNoteAndCheckPresence(undefined, viewId);
@@ -484,86 +466,6 @@ test.describe("run tests independently", () => {
`${content}${NOTE.content}`
);
});
-
- test("creating a new note should clear the editor contents & title", async () => {
- await createNoteAndCheckPresence();
-
- await page.click(getTestId("notes-action-button"));
-
- expect(await getEditorTitle()).toBe("");
-
- expect(await getEditorContent()).toBe("");
- });
-
- test("creating a new note should clear the word count", async () => {
- const selector = await createNoteAndCheckPresence();
-
- await page.click(getTestId("notes-action-button"));
-
- await page.click(selector);
-
- await createNote({ title: "Hello World" }, "notes");
-
- await expect(page.innerText(getTestId("editor-word-count"))).resolves.toBe(
- "0 words"
- );
- });
-
- test("creating a new title-only note should add it to the list", async () => {
- const selector = await createNoteAndCheckPresence();
-
- await page.click(getTestId("notes-action-button"));
-
- await page.click(selector);
-
- await createNoteAndCheckPresence({ title: "Hello World" });
- });
-
- test("format changes should get saved", async () => {
- const selector = await createNoteAndCheckPresence();
-
- await page.click(getTestId("notes-action-button"));
-
- await page.click(selector);
-
- await page.keyboard.press("Control+a");
-
- await page.click(`#editorToolbar button[title="Bold"]`);
-
- await page.click(getTestId("notes-action-button"));
-
- await page.click(selector);
-
- const content = await getEditorContentAsHTML();
-
- expect(content).toMatchSnapshot(`format-changes-should-get-saved.txt`);
- });
-
- test("opening an empty titled note should empty out editor contents", async () => {
- await createNoteAndCheckPresence();
-
- const onlyTitle = await createNoteAndCheckPresence({
- title: "Only a title",
- });
-
- await page.click(getTestId("notes-action-button"));
-
- await page.reload();
-
- const fullNote = await checkNotePresence("home", 1, NOTE);
-
- await page.click(fullNote);
-
- await expect(getEditorContent()).resolves.toBe(NOTE.content);
-
- await expect(getEditorTitle()).resolves.toBe(NOTE.title);
-
- await page.click(onlyTitle);
-
- await expect(getEditorTitle()).resolves.toBe("Only a title");
-
- await expect(getEditorContent()).resolves.toBe("");
- });
});
test.describe("stress tests", () => {
diff --git a/apps/web/__e2e__/notes.test.js-snapshots/format-changes-should-get-saved-Firefox-linux.txt b/apps/web/__e2e__/notes.test.js-snapshots/format-changes-should-get-saved-Firefox-linux.txt
deleted file mode 100644
index 1d98fbbf1..000000000
--- a/apps/web/__e2e__/notes.test.js-snapshots/format-changes-should-get-saved-Firefox-linux.txt
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/web/__e2e__/utils/conditions.js b/apps/web/__e2e__/utils/conditions.js
index 04093e54e..3036abda5 100644
--- a/apps/web/__e2e__/utils/conditions.js
+++ b/apps/web/__e2e__/utils/conditions.js
@@ -1,7 +1,7 @@
/* eslint-disable no-undef */
const { expect } = require("@playwright/test");
-const { getTestId, NOTE } = require(".");
+const { getTestId, NOTE, createNote } = require(".");
const List = require("./listitemidbuilder");
async function isPresent(selector) {
@@ -42,4 +42,27 @@ async function checkNotePresence(viewId, index = 0, note = NOTE) {
return noteSelector.build();
}
-module.exports = { isPresent, isAbsent, isToastPresent, checkNotePresence };
+async function createNoteAndCheckPresence(
+ note = NOTE,
+ viewId = "home",
+ index = 0
+) {
+ await createNote(note, "notes");
+
+ // make sure the note has saved.
+ await page.waitForTimeout(200);
+
+ let noteSelector = await checkNotePresence(viewId, index, note);
+
+ await page.click(noteSelector, { button: "left" });
+
+ return noteSelector;
+}
+
+module.exports = {
+ isPresent,
+ isAbsent,
+ isToastPresent,
+ checkNotePresence,
+ createNoteAndCheckPresence,
+};
diff --git a/apps/web/src/components/editor/index.js b/apps/web/src/components/editor/index.js
index 1903c1d07..224fe1444 100644
--- a/apps/web/src/components/editor/index.js
+++ b/apps/web/src/components/editor/index.js
@@ -105,10 +105,11 @@ function Editor({ noteId, nonce }) {
);
useEffect(
- function openSesion() {
+ function openSession() {
+ const { title, nonce } = editorstore.get().session;
// there can be notes that only have a title so we need to
// handle that.
- if (!contentId && !editorstore.get().session.title) return;
+ if (!contentId && (!title || !!nonce)) return;
setContent();
},
[sessionId, contentId, setContent, clearContent]