UNPKG

antwar

Version:

A static site engine built with React and Webpack

347 lines (334 loc) 7.3 kB
const _ = require("lodash"); const parseSectionPages = require("./parse-section-pages"); const transformSections = require("./transform-sections"); describe("Transform sections", () => { it("transforms a root section", () => { const sectionName = "/"; const section = { layout: () => {}, transform: pages => _.sortBy(pages, page => page.file.sort), }; const parsedPages = parseSectionPages( sectionName, section, context(path => [`./${path}`]) ); const result = transformSections(sectionName, section, parsedPages); const expected = [ { type: "page", fileName: "first.md", file: { sort: 0, }, layout: undefined, section, sectionName: "/", url: "/first", }, { type: "page", fileName: "second.md", file: { sort: 1, }, layout: undefined, section, sectionName: "/", url: "/second", }, { type: "page", fileName: "third.md", file: { sort: 10, }, layout: undefined, section, sectionName: "/", url: "/third", }, { type: "index", fileName: "index.md", file: { sort: -1, }, layout: undefined, section, sectionName: "/", url: "/", }, ]; expect(result).toEqual(expected); }); it("transforms a nested page", () => { const sectionName = "/"; const section = { layout: () => {}, transform: pages => _.sortBy(pages, page => page.file.sort), }; const parsedPages = parseSectionPages( sectionName, section, context(path => [`./${path}`], file => `nested/page/${file}`) ); const result = transformSections(sectionName, section, parsedPages); const expected = [ { type: "page", fileName: "nested/page/first.md", file: { sort: 0, }, layout: undefined, section, sectionName: "/", url: "/nested/page/first", }, { type: "page", fileName: "nested/page/second.md", file: { sort: 1, }, layout: undefined, section, sectionName: "/", url: "/nested/page/second", }, { type: "page", fileName: "nested/page/third.md", file: { sort: 10, }, layout: undefined, section, sectionName: "/", url: "/nested/page/third", }, { type: "index", fileName: "nested/page/index.md", file: { sort: -1, }, layout: undefined, section, sectionName: "/", url: "/nested/page", }, ]; expect(result).toEqual(expected); }); it("transforms a child section", () => { const sectionName = "/"; const section = { paths: { docs: { layout: () => {}, transform: pages => _.sortBy(pages, page => page.file.sort), }, }, }; const parsedPages = parseSectionPages( sectionName, section, context(path => [`./docs/${path}`]) ); const result = transformSections(sectionName, section, parsedPages); const expected = [ { type: "page", fileName: "docs/first.md", file: { sort: 0, }, layout: undefined, section, sectionName: "docs", url: "/docs/first", }, { type: "page", fileName: "docs/second.md", file: { sort: 1, }, layout: undefined, section, sectionName: "docs", url: "/docs/second", }, { type: "page", fileName: "docs/third.md", file: { sort: 10, }, layout: undefined, section, sectionName: "docs", url: "/docs/third", }, { type: "index", fileName: "docs/index.md", file: { sort: -1, }, layout: undefined, section, sectionName: "docs", url: "/docs", }, ]; expect(result).toEqual(expected); }); it("transforms root and child section", () => { const sectionName = "/"; const section = { layout: () => {}, transform: pages => _.sortBy(pages, page => page.file.sort), paths: { docs: { layout: () => {}, transform: pages => _.sortBy(pages, page => page.file.sort), }, }, }; const parsedPages = parseSectionPages( sectionName, section, context(path => [`./${path}`, `./docs/${path}`]) ); const result = transformSections(sectionName, section, parsedPages); const expected = [ { type: "page", fileName: "first.md", file: { sort: 0, }, layout: undefined, section, sectionName: "/", url: "/first", }, { type: "page", fileName: "second.md", file: { sort: 1, }, layout: undefined, section, sectionName: "/", url: "/second", }, { type: "page", fileName: "third.md", file: { sort: 10, }, layout: undefined, section, sectionName: "/", url: "/third", }, { type: "index", fileName: "index.md", file: { sort: -1, }, layout: undefined, section, sectionName: "/", url: "/", }, { type: "page", fileName: "docs/first.md", file: { sort: 0, }, layout: undefined, section, sectionName: "docs", url: "/docs/first", }, { type: "page", fileName: "docs/second.md", file: { sort: 1, }, layout: undefined, section, sectionName: "docs", url: "/docs/second", }, { type: "page", fileName: "docs/third.md", file: { sort: 10, }, layout: undefined, section, sectionName: "docs", url: "/docs/third", }, { type: "index", fileName: "docs/index.md", file: { sort: -1, }, layout: undefined, section, sectionName: "docs", url: "/docs", }, ]; expect(result).toEqual(expected); }); }); function context(shapePath, shapeFile = id) { const files = [ { file: "index.md", sort: -1, }, { file: "first.md", sort: 0, }, { file: "third.md", sort: 10, }, { file: "second.md", sort: 1, }, ]; const modules = _.fromPairs( _.flatMap( files.map(({ file, sort }) => ({ file: shapeFile(file), sort, })), ({ file, sort }) => shapePath(file).map(name => [name, { sort }]) ) ); const ret = name => modules[name]; ret.keys = () => Object.keys(modules); return ret; } function id(a) { return a; }