337 lines
9.6 KiB
JavaScript
337 lines
9.6 KiB
JavaScript
import test from "ava";
|
||
import TemplateData from "../src/TemplateData";
|
||
import templateConfig from "../src/Config";
|
||
|
||
const config = templateConfig.getConfig();
|
||
|
||
test("Create", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
let data = await dataObj.getData();
|
||
|
||
t.true(Object.keys(data[config.keys.package]).length > 0);
|
||
});
|
||
|
||
test("getData()", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
|
||
t.is(dataObj.getData().toString(), "[object Promise]");
|
||
|
||
let data = await dataObj.getData();
|
||
t.is(data.globalData.datakey1, "datavalue1", "simple data value");
|
||
t.is(
|
||
data.globalData.datakey2,
|
||
"@11ty/eleventy",
|
||
`variables, resolve ${config.keys.package} to its value.`
|
||
);
|
||
|
||
t.true(
|
||
Object.keys(data[config.keys.package]).length > 0,
|
||
`package.json imported to data in ${config.keys.package}`
|
||
);
|
||
});
|
||
|
||
test("Data dir does not exist", async t => {
|
||
await t.throwsAsync(async () => {
|
||
let dataObj = new TemplateData("./test/thisdirectorydoesnotexist");
|
||
await dataObj.getData();
|
||
});
|
||
});
|
||
|
||
test("Add local data", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
let data = await dataObj.getData();
|
||
|
||
t.is(data.globalData.datakey1, "datavalue1");
|
||
t.is(data.globalData.datakey2, "@11ty/eleventy");
|
||
|
||
let withLocalData = await dataObj.getLocalData(
|
||
"./test/stubs/component/component.njk"
|
||
);
|
||
t.is(withLocalData.globalData.datakey1, "datavalue1");
|
||
t.is(withLocalData.globalData.datakey2, "@11ty/eleventy");
|
||
t.is(withLocalData.localdatakey1, "localdatavalue1");
|
||
|
||
// from the js file
|
||
t.is(withLocalData.localdatakeyfromjs, "howdydoody");
|
||
t.is(withLocalData.localdatakeyfromjs2, "howdy2");
|
||
});
|
||
|
||
test("Get local data async JS", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
|
||
let withLocalData = await dataObj.getLocalData(
|
||
"./test/stubs/component-async/component.njk"
|
||
);
|
||
|
||
// from the js file
|
||
t.is(withLocalData.localdatakeyfromjs, "howdydoody");
|
||
});
|
||
|
||
test("addLocalData() doesn’t exist but doesn’t fail (template file does exist)", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
let data = await dataObj.getData();
|
||
let beforeDataKeyCount = Object.keys(data);
|
||
|
||
// template file does exist
|
||
let withLocalData = await dataObj.getLocalData(
|
||
"./test/stubs/datafiledoesnotexist/template.njk"
|
||
);
|
||
t.is(withLocalData.globalData.datakey1, "datavalue1");
|
||
t.is(withLocalData.globalData.datakey2, "@11ty/eleventy");
|
||
t.deepEqual(Object.keys(withLocalData), beforeDataKeyCount);
|
||
});
|
||
|
||
test("addLocalData() doesn’t exist but doesn’t fail (template file does not exist)", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
let data = await dataObj.getData();
|
||
let beforeDataKeyCount = Object.keys(data);
|
||
|
||
let withLocalData = await dataObj.getLocalData(
|
||
"./test/stubs/datafiledoesnotexist/templatedoesnotexist.njk"
|
||
);
|
||
t.is(withLocalData.globalData.datakey1, "datavalue1");
|
||
t.is(withLocalData.globalData.datakey2, "@11ty/eleventy");
|
||
t.deepEqual(Object.keys(withLocalData), beforeDataKeyCount);
|
||
});
|
||
|
||
test("Global Dir Directory", async t => {
|
||
let dataObj = new TemplateData("./");
|
||
|
||
t.deepEqual(await dataObj.getGlobalDataGlob(), ["./_data/**/*.(json|js)"]);
|
||
});
|
||
|
||
test("Global Dir Directory with Constructor Path Arg", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
|
||
t.deepEqual(await dataObj.getGlobalDataGlob(), [
|
||
"./test/stubs/_data/**/*.(json|js)"
|
||
]);
|
||
});
|
||
|
||
test("getAllGlobalData() with other data files", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
let data = await dataObj.cacheData();
|
||
let dataFilePaths = await dataObj.getGlobalDataFiles();
|
||
|
||
t.true(dataFilePaths.length > 0);
|
||
t.true(
|
||
dataFilePaths.filter(path => {
|
||
return path.indexOf("./test/stubs/_data/globalData.json") === 0;
|
||
}).length > 0
|
||
);
|
||
|
||
t.truthy(data.globalData);
|
||
t.is(data.globalData.datakey1, "datavalue1");
|
||
|
||
t.truthy(data.testData);
|
||
t.deepEqual(data.testData, {
|
||
testdatakey1: "testdatavalue1"
|
||
});
|
||
t.deepEqual(data.subdir.testDataSubdir, {
|
||
subdirkey: "subdirvalue"
|
||
});
|
||
});
|
||
|
||
test("getAllGlobalData() with js object data file", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
let data = await dataObj.cacheData();
|
||
let dataFilePaths = await dataObj.getGlobalDataFiles();
|
||
|
||
t.true(
|
||
dataFilePaths.filter(path => {
|
||
return path.indexOf("./test/stubs/_data/globalData2.js") === 0;
|
||
}).length > 0
|
||
);
|
||
|
||
t.truthy(data.globalData2);
|
||
t.is(data.globalData2.datakeyfromjs, "howdy");
|
||
});
|
||
|
||
test("getAllGlobalData() with js function data file", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
let data = await dataObj.cacheData();
|
||
let dataFilePaths = await dataObj.getGlobalDataFiles();
|
||
|
||
t.true(
|
||
dataFilePaths.filter(path => {
|
||
return path.indexOf("./test/stubs/_data/globalData2.js") === 0;
|
||
}).length > 0
|
||
);
|
||
|
||
t.truthy(data.globalDataFn);
|
||
t.is(data.globalDataFn.datakeyfromjsfn, "howdy");
|
||
});
|
||
|
||
test("getDataValue() without a dataTemplateEngine", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
dataObj.setDataTemplateEngine(false);
|
||
|
||
let data = await dataObj.getDataValue("./test/stubs/_data/testDataEjs.json", {
|
||
pkg: { name: "pkgname" }
|
||
});
|
||
|
||
t.deepEqual(data, {
|
||
datakey1: "datavalue1",
|
||
datakey2: "<%= pkg.name %>"
|
||
});
|
||
});
|
||
|
||
test("getDataValue() without dataTemplateEngine changed to `ejs`", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
dataObj.setDataTemplateEngine("ejs");
|
||
|
||
let data = await dataObj.getDataValue("./test/stubs/_data/testDataEjs.json", {
|
||
pkg: { name: "pkgname" }
|
||
});
|
||
|
||
t.deepEqual(data, {
|
||
datakey1: "datavalue1",
|
||
datakey2: "pkgname"
|
||
});
|
||
});
|
||
|
||
test("getLocalDataPaths", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
let paths = await dataObj.getLocalDataPaths(
|
||
"./test/stubs/component/component.liquid"
|
||
);
|
||
|
||
t.deepEqual(paths, [
|
||
"./test/stubs/component/component.json",
|
||
"./test/stubs/component/component.11tydata.json",
|
||
"./test/stubs/component/component.11tydata.js"
|
||
]);
|
||
});
|
||
|
||
test("Deeper getLocalDataPaths", async t => {
|
||
let dataObj = new TemplateData("./");
|
||
let paths = await dataObj.getLocalDataPaths(
|
||
"./test/stubs/component/component.liquid"
|
||
);
|
||
|
||
t.deepEqual(paths, [
|
||
"./test/test.json",
|
||
"./test/test.11tydata.json",
|
||
"./test/test.11tydata.js",
|
||
"./test/stubs/stubs.json",
|
||
"./test/stubs/stubs.11tydata.json",
|
||
"./test/stubs/stubs.11tydata.js",
|
||
"./test/stubs/component/component.json",
|
||
"./test/stubs/component/component.11tydata.json",
|
||
"./test/stubs/component/component.11tydata.js"
|
||
]);
|
||
});
|
||
|
||
test("getLocalDataPaths with an 11ty js template", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
let paths = await dataObj.getLocalDataPaths(
|
||
"./test/stubs/component/component.11ty.js"
|
||
);
|
||
|
||
t.deepEqual(paths, [
|
||
"./test/stubs/component/component.json",
|
||
"./test/stubs/component/component.11tydata.json",
|
||
"./test/stubs/component/component.11tydata.js"
|
||
]);
|
||
});
|
||
|
||
test("getLocalDataPaths with inputDir passed in (trailing slash)", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
let paths = await dataObj.getLocalDataPaths(
|
||
"./test/stubs/component/component.liquid"
|
||
);
|
||
|
||
t.deepEqual(paths, [
|
||
"./test/stubs/component/component.json",
|
||
"./test/stubs/component/component.11tydata.json",
|
||
"./test/stubs/component/component.11tydata.js"
|
||
]);
|
||
});
|
||
|
||
test("getLocalDataPaths with inputDir passed in (no trailing slash)", async t => {
|
||
let dataObj = new TemplateData("./test/stubs/");
|
||
let paths = await dataObj.getLocalDataPaths(
|
||
"./test/stubs/component/component.liquid"
|
||
);
|
||
|
||
t.deepEqual(paths, [
|
||
"./test/stubs/component/component.json",
|
||
"./test/stubs/component/component.11tydata.json",
|
||
"./test/stubs/component/component.11tydata.js"
|
||
]);
|
||
});
|
||
|
||
test("getLocalDataPaths with inputDir passed in (no leading slash)", async t => {
|
||
let dataObj = new TemplateData("test/stubs");
|
||
let paths = await dataObj.getLocalDataPaths(
|
||
"./test/stubs/component/component.liquid"
|
||
);
|
||
|
||
t.deepEqual(paths, [
|
||
"./test/stubs/component/component.json",
|
||
"./test/stubs/component/component.11tydata.json",
|
||
"./test/stubs/component/component.11tydata.js"
|
||
]);
|
||
});
|
||
|
||
test("getRawImports", async t => {
|
||
let dataObj = new TemplateData("test/stubs");
|
||
let data = dataObj.getRawImports();
|
||
|
||
t.is(data.pkg.name, "@11ty/eleventy");
|
||
});
|
||
|
||
test("getTemplateDataFileGlob", async t => {
|
||
let tw = new TemplateData("test/stubs");
|
||
|
||
t.deepEqual(await tw.getTemplateDataFileGlob(), [
|
||
"./test/stubs/**/*.json",
|
||
"./test/stubs/**/*.11tydata.js"
|
||
]);
|
||
});
|
||
|
||
test("TemplateData.merge", t => {
|
||
t.deepEqual(
|
||
TemplateData.merge(
|
||
{
|
||
tags: [1, 2, 3]
|
||
},
|
||
{
|
||
tags: [4, 5, 6]
|
||
}
|
||
),
|
||
{ tags: [1, 2, 3, 4, 5, 6] }
|
||
);
|
||
});
|
||
|
||
test("TemplateData.cleanupData", t => {
|
||
t.deepEqual(TemplateData.cleanupData({}), {});
|
||
t.deepEqual(TemplateData.cleanupData({ tags: null }), { tags: [] });
|
||
t.deepEqual(TemplateData.cleanupData({ tags: "" }), { tags: [] });
|
||
t.deepEqual(TemplateData.cleanupData({ tags: [] }), { tags: [] });
|
||
t.deepEqual(TemplateData.cleanupData({ tags: "test" }), { tags: ["test"] });
|
||
t.deepEqual(TemplateData.cleanupData({ tags: ["test1", "test2"] }), {
|
||
tags: ["test1", "test2"]
|
||
});
|
||
});
|
||
|
||
test("Parent directory for data (Issue #337)", async t => {
|
||
let dataObj = new TemplateData("./test/stubs-337/src/");
|
||
dataObj._setConfig({
|
||
dataTemplateEngine: false,
|
||
dir: {
|
||
input: "./test/stubs-337/src/",
|
||
data: "../data/"
|
||
}
|
||
});
|
||
dataObj.setInputDir("./test/stubs-337/src/");
|
||
|
||
let data = await dataObj.getData();
|
||
|
||
t.deepEqual(data, {
|
||
xyz: {
|
||
hi: "bye"
|
||
}
|
||
});
|
||
});
|