@automattic/rtjson-to-wpblocks
Version:
Javascript code to convert Day One RTJson to WordPress Gutenberg Blocks
63 lines (56 loc) • 2.56 kB
JavaScript
// @ts-check
const dedent = require("dedent").default;
const { describe, it, expect } = require("@jest/globals");
const {
parseAndValidateRTJson,
rtjsonDocStringToWPBlocksString,
} = require("../index.js");
const fs = require("fs").promises;
describe("Parsing and validating an RTJSon string", () => {
it("should be able to parse a simple RTJson string", async () => {
let rtjString = await fs.readFile("tests/example-rtjson.json", "utf-8");
let { data, errors } = parseAndValidateRTJson(rtjString);
expect(data).toBeDefined();
expect(errors).toBeNull();
});
it("should return an error if the RTJson is invalid", async () => {
let invalidRTJson = dedent` { "nodes": [ { "attributes": {}, "text": "Hello world" } ] }`;
let { data, errors } = parseAndValidateRTJson(invalidRTJson);
expect(data).toBeNull();
expect(errors).toBeDefined();
});
it("should return an error if the RTJson is empty", async () => {
let emptyRTJson = "";
expect(() => parseAndValidateRTJson(emptyRTJson)).toThrow();
});
});
describe("Regression tests", () => {
it("Should close a paragraph tag before opening a list", () => {
let rtjString = `{"contents":[{"attributes":{},"text":"Oh! It's working?\\u0021 Hah\\u0021\\n\\n"},{"attributes":{"line":{"listStyle":"bulleted","indentLevel":1}},"text":"One\\n"}],"meta":{"version":1, "created":{"version":1720440807,"platform":"webapp"}, "small-lines-removed":true}}`;
let blockString = rtjsonDocStringToWPBlocksString(rtjString, {});
expect(blockString).toMatchInlineSnapshot(`
"<!-- wp:paragraph -->
<p>Oh! It's working?! Hah!</p>
<!-- /wp:paragraph --><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>One</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->"
`);
});
it("should close a list before opening a paragraph", () => {
let rtjString = `{"contents":[{"attributes":{"line":{"listStyle":"bulleted","indentLevel":1}},"text":"One\\n"},{"attributes":{"line":{"listStyle":"bulleted","indentLevel":1}},"text":"Another one\\n"},{"attributes":{},"text":"Two\\n"}],"meta":{"version":1, "created":{"version":1720440807,"platform":"webapp"}, "small-lines-removed":true}}`;
let blockString = rtjsonDocStringToWPBlocksString(rtjString, {});
expect(blockString).toMatchInlineSnapshot(`
"<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>One</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Another one</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --><!-- wp:paragraph -->
<p>Two</p>
<!-- /wp:paragraph -->"
`);
});
});