mirror of
https://github.com/streetwriters/notesnook.git
synced 2025-12-29 00:20:04 +01:00
292 lines
8.3 KiB
TypeScript
292 lines
8.3 KiB
TypeScript
/*
|
|
This file is part of the Notesnook project (https://notesnook.com/)
|
|
|
|
Copyright (C) 2023 Streetwriters (Private) Limited
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
import { test, expect } from "@playwright/test";
|
|
import { AppModel } from "./models/app.model";
|
|
import { NOTE, TITLE_ONLY_NOTE } from "./utils";
|
|
|
|
test("focus mode", async ({ page }) => {
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
const notes = await app.goToNotes();
|
|
await notes.createNote(NOTE);
|
|
|
|
await notes.editor.enterFocusMode();
|
|
|
|
expect(await notes.editor.isFocusMode()).toBeTruthy();
|
|
expect(
|
|
await page.screenshot({ fullPage: true, quality: 100, type: "jpeg" })
|
|
).toMatchSnapshot("focus-mode.jpg", { maxDiffPixelRatio: 0.01 });
|
|
});
|
|
|
|
test("switch theme in focus mode", async ({ page }) => {
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
const notes = await app.goToNotes();
|
|
await notes.createNote(NOTE);
|
|
await notes.editor.enterFocusMode();
|
|
|
|
await notes.editor.enterDarkMode();
|
|
|
|
expect(await notes.editor.isDarkMode()).toBeTruthy();
|
|
expect(
|
|
await page.screenshot({ fullPage: true, quality: 100, type: "jpeg" })
|
|
).toMatchSnapshot("dark-focus-mode.jpg", { maxDiffPixelRatio: 0.01 });
|
|
|
|
await notes.editor.exitDarkMode();
|
|
|
|
expect(await notes.editor.isDarkMode()).toBeFalsy();
|
|
expect(
|
|
await page.screenshot({ fullPage: true, quality: 100, type: "jpeg" })
|
|
).toMatchSnapshot("light-focus-mode.jpg", { maxDiffPixelRatio: 0.01 });
|
|
});
|
|
|
|
test("full screen in focus mode", async ({ page }) => {
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
const notes = await app.goToNotes();
|
|
await notes.createNote(NOTE);
|
|
await notes.editor.enterFocusMode();
|
|
|
|
await notes.editor.enterFullscreen();
|
|
expect(await notes.editor.isFullscreen()).toBeTruthy();
|
|
|
|
await notes.editor.exitFullscreen();
|
|
expect(await notes.editor.isFullscreen()).toBeFalsy();
|
|
});
|
|
|
|
test("normal mode from focus mode", async ({ page }) => {
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
const notes = await app.goToNotes();
|
|
await notes.createNote(NOTE);
|
|
await notes.editor.enterFocusMode();
|
|
|
|
await notes.editor.exitFocusMode();
|
|
|
|
expect(await notes.editor.isFocusMode()).toBeFalsy();
|
|
expect(
|
|
await page.screenshot({ fullPage: true, quality: 100, type: "jpeg" })
|
|
).toMatchSnapshot("normal-mode-from-focus-mode.jpg", {
|
|
maxDiffPixelRatio: 0.01
|
|
});
|
|
});
|
|
|
|
test("creating a new note should clear the editor contents & title", async ({
|
|
page
|
|
}) => {
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
const notes = await app.goToNotes();
|
|
await notes.createNote(NOTE);
|
|
|
|
await notes.newNote();
|
|
|
|
expect(await notes.editor.isUnloaded()).toBeTruthy();
|
|
expect(await notes.editor.getTitle()).toBe("");
|
|
expect(await notes.editor.getContent("text")).toBe("");
|
|
});
|
|
|
|
test("creating a new title-only note should add it to the list", async ({
|
|
page
|
|
}) => {
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
const notes = await app.goToNotes();
|
|
|
|
const note = await notes.createNote({ title: NOTE.title });
|
|
|
|
expect(note).toBeDefined();
|
|
});
|
|
|
|
test("opening an empty titled note should empty out editor contents", async ({
|
|
page
|
|
}) => {
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
let notes = await app.goToNotes();
|
|
await notes.createNote(NOTE);
|
|
await notes.createNote(TITLE_ONLY_NOTE);
|
|
await notes.newNote();
|
|
await app.goto();
|
|
notes = await app.goToNotes();
|
|
const fullNote = await notes.findNote(NOTE);
|
|
await fullNote?.openNote();
|
|
|
|
const onlyTitle = await notes.findNote(TITLE_ONLY_NOTE);
|
|
await onlyTitle?.openNote();
|
|
|
|
expect(await notes.editor.getContent("text")).toBe("");
|
|
expect(await notes.editor.getTitle()).toBe(TITLE_ONLY_NOTE.title);
|
|
});
|
|
|
|
test("focus should not jump to editor while typing in title input", async ({
|
|
page
|
|
}) => {
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
const notes = await app.goToNotes();
|
|
await notes.newNote();
|
|
|
|
await notes.editor.typeTitle("Hello", 200);
|
|
|
|
expect(await notes.editor.getTitle()).toBe("Hello");
|
|
expect(await notes.editor.getContent("text")).toBe("");
|
|
});
|
|
|
|
test("select all & backspace should clear all content in editor", async ({
|
|
page
|
|
}) => {
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
const notes = await app.goToNotes();
|
|
const note = await notes.createNote(NOTE);
|
|
|
|
await notes.editor.clear();
|
|
|
|
await notes.newNote();
|
|
await note?.openNote();
|
|
expect(await notes.editor.getContent("text")).toBe("");
|
|
});
|
|
|
|
test("editing a note and switching immediately to another note and making an edit shouldn't overlap both notes", async ({
|
|
page
|
|
}, test) => {
|
|
test.setTimeout(45 * 1000);
|
|
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
const notes = await app.goToNotes();
|
|
const note1 = await notes.createNote({
|
|
title: "Test note 1",
|
|
content: "53ad8e4e40ebebd0f400498d"
|
|
});
|
|
const note2 = await notes.createNote({
|
|
title: "Test note 2",
|
|
content: "f054d19e9a2f46eff7b9bb25"
|
|
});
|
|
|
|
for (let i = 0; i < 10; ++i) {
|
|
await note1?.openNote();
|
|
await notes.editor.setContent(`Test note 1 (${i}) `);
|
|
|
|
await note2?.openNote();
|
|
await notes.editor.setContent(`Test note 2 (${i})`);
|
|
}
|
|
|
|
await notes.editor.waitForSaving();
|
|
await notes.newNote();
|
|
|
|
await note2?.openNote();
|
|
expect(await notes.editor.getContent("text")).toMatchSnapshot(
|
|
`fast-switch-and-edit-note-2.txt`
|
|
);
|
|
|
|
await note1?.openNote();
|
|
expect(await notes.editor.getContent("text")).toMatchSnapshot(
|
|
`fast-switch-and-edit-note-1.txt`
|
|
);
|
|
});
|
|
|
|
test("editing a note and switching immediately to another note and editing the title shouldn't overlap both notes", async ({
|
|
page
|
|
}, test) => {
|
|
test.setTimeout(45 * 1000);
|
|
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
const notes = await app.goToNotes();
|
|
const note1 = await notes.createNote({
|
|
title: "Test note 1",
|
|
content: "53ad8e4e40ebebd0f400498d"
|
|
});
|
|
const note2 = await notes.createNote({
|
|
title: "Test note 2",
|
|
content: "f054d19e9a2f46eff7b9bb25"
|
|
});
|
|
|
|
for (let i = 0; i < 10; ++i) {
|
|
await note1?.openNote();
|
|
await notes.editor.typeTitle(`Test note 1 (${i}) `);
|
|
|
|
await note2?.openNote();
|
|
await notes.editor.typeTitle(`Test note 2 (${i})`);
|
|
}
|
|
|
|
await notes.editor.waitForSaving();
|
|
await notes.newNote();
|
|
|
|
await note2?.openNote();
|
|
expect(await notes.editor.getTitle()).toMatchSnapshot(
|
|
`fast-switch-and-edit-note-title-2.txt`
|
|
);
|
|
|
|
await note1?.openNote();
|
|
expect(await notes.editor.getTitle()).toMatchSnapshot(
|
|
`fast-switch-and-edit-note-title-1.txt`
|
|
);
|
|
});
|
|
|
|
test("editing a note and toggling read-only mode should show updated content", async ({
|
|
page
|
|
}) => {
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
const notes = await app.goToNotes();
|
|
const note = await notes.createNote(NOTE);
|
|
await notes.newNote();
|
|
await note?.openNote();
|
|
|
|
await notes.editor.setContent(`An edit I made`);
|
|
await note?.properties.readonly();
|
|
|
|
expect(await note?.properties.isReadonly()).toBeTruthy();
|
|
expect(await notes.editor.getContent("text")).toMatchSnapshot(
|
|
`readonly-edited-note.txt`
|
|
);
|
|
});
|
|
|
|
test("creating a new note and toggling read-only mode should not empty editor content", async ({
|
|
page
|
|
}) => {
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
const notes = await app.goToNotes();
|
|
const note = await notes.createNote(NOTE);
|
|
|
|
await note?.properties.readonly();
|
|
|
|
expect(await note?.properties.isReadonly()).toBeTruthy();
|
|
expect(await notes.editor.getContent("text")).not.toHaveLength(0);
|
|
expect(await notes.editor.getContent("text")).toBe(NOTE.content);
|
|
});
|
|
|
|
test("#1468 count words separated by newlines", async ({ page }) => {
|
|
const app = new AppModel(page);
|
|
await app.goto();
|
|
const notes = await app.goToNotes();
|
|
|
|
await notes.createNote({
|
|
content: "1\n2\n3\na\nb\nc\nd\ne\nali\nwaqar",
|
|
title: NOTE.title
|
|
});
|
|
|
|
expect((await notes.editor.getWordCount()) === 10).toBeTruthy();
|
|
});
|