UNPKG

antwar

Version:

A static site engine built with React and Webpack

298 lines (285 loc) 6.53 kB
"use strict"; 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; }