Emdash source with visual editor image upload fix

Fixes:
1. media.ts: wrap placeholder generation in try-catch
2. toolbar.ts: check r.ok, display error message in popover
This commit is contained in:
2026-05-03 10:44:54 +07:00
parent 78f81bebb6
commit 2d1be52177
2352 changed files with 662964 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
import { describe, it, expect } from "vitest";
import { calculateReadingTime } from "../../src/components/PortableTextEditor";
describe("Editor Metrics", () => {
describe("calculateReadingTime", () => {
it("returns 0 minutes for empty document", () => {
expect(calculateReadingTime(0)).toBe(0);
});
it("returns 1 minute for less than 200 words", () => {
expect(calculateReadingTime(1)).toBe(1);
expect(calculateReadingTime(100)).toBe(1);
expect(calculateReadingTime(199)).toBe(1);
});
it("returns 1 minute for exactly 200 words", () => {
expect(calculateReadingTime(200)).toBe(1);
});
it("returns 2 minutes for 201-400 words", () => {
expect(calculateReadingTime(201)).toBe(2);
expect(calculateReadingTime(300)).toBe(2);
expect(calculateReadingTime(400)).toBe(2);
});
it("returns correct reading time for larger documents", () => {
expect(calculateReadingTime(1000)).toBe(5);
expect(calculateReadingTime(1001)).toBe(6);
expect(calculateReadingTime(2000)).toBe(10);
});
it("always rounds up (ceil)", () => {
// 201 / 200 = 1.005, ceil = 2
expect(calculateReadingTime(201)).toBe(2);
// 401 / 200 = 2.005, ceil = 3
expect(calculateReadingTime(401)).toBe(3);
});
});
});