UNPKG

@automattic/rtjson-to-wpblocks

Version:

Javascript code to convert Day One RTJson to WordPress Gutenberg Blocks

63 lines (56 loc) 2.56 kB
// @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 -->" `); }); });