-
-
Notifications
You must be signed in to change notification settings - Fork 481
/
EleventyVirtualTemplatesTest.js
135 lines (111 loc) · 4.42 KB
/
EleventyVirtualTemplatesTest.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import test from "ava";
import fs from "fs";
import { rimrafSync } from "rimraf";
import Eleventy from "../src/Eleventy.js";
import DuplicatePermalinkOutputError from "../src/Errors/DuplicatePermalinkOutputError.js";
test("Virtual templates, issue #1612", async (t) => {
let elev = new Eleventy("./test/stubs-virtual-nowrite", "./test/stubs-virtual-nowrite/_site", {
config: function (eleventyConfig) {
eleventyConfig.addTemplate("virtual.md", `# Hello`)
},
});
let results = await elev.toJSON();
t.deepEqual(results.length, 1);
t.deepEqual(results[0].content.trim(), `<h1>Hello</h1>`);
t.deepEqual(results[0].rawInput, `# Hello`);
});
test("Virtual templates with front matter, issue #1612", async (t) => {
let elev = new Eleventy("./test/stubs-virtual-nowrite", "./test/stubs-virtual-nowrite/_site", {
config: function (eleventyConfig) {
eleventyConfig.addTemplate("./virtual.md", `---
myKey: myValue
---
# {{ myKey }}`)
},
});
let results = await elev.toJSON();
t.deepEqual(results.length, 1);
t.deepEqual(results[0].content.trim(), `<h1>myValue</h1>`);
t.deepEqual(results[0].rawInput, `# {{ myKey }}`);
});
test("Virtual templates with supplemental data, issue #1612", async (t) => {
let elev = new Eleventy("./test/stubs-virtual-nowrite", "./test/stubs-virtual-nowrite/_site", {
config: function (eleventyConfig) {
eleventyConfig.addTemplate("virtual.md", `# {{ myKey }}`, { myKey: "myValue" })
},
});
let results = await elev.toJSON();
t.deepEqual(results.length, 1);
t.deepEqual(results[0].content.trim(), `<h1>myValue</h1>`);
t.deepEqual(results[0].rawInput, `# {{ myKey }}`);
});
// Supplemental data overrides front matter.
test("Virtual templates with front matter and supplemental data, issue #1612", async (t) => {
let elev = new Eleventy("./test/stubs-virtual-nowrite", "./test/stubs-virtual-nowrite/_site", {
config: function (eleventyConfig) {
eleventyConfig.addTemplate("virtual.md", `---
myKey1: myValue1
myKey3: myValueFm
---
# {{ myKey1 }}{{ myKey2 }}{{ myKey3 }}`, { myKey2: "myValue2", myKey3: "myValueData" })
},
});
let results = await elev.toJSON();
t.deepEqual(results.length, 1);
t.deepEqual(results[0].content.trim(), `<h1>myValue1myValue2myValueData</h1>`);
t.deepEqual(results[0].rawInput, `# {{ myKey1 }}{{ myKey2 }}{{ myKey3 }}`);
});
test("Virtual template conflicts with file on file system, issue #1612", async (t) => {
let elev = new Eleventy("./test/stubs/stubs-virtual-conflict", "./test/stubs/stubs-virtual-conflict/_site", {
config: function (eleventyConfig) {
eleventyConfig.addTemplate("virtual.md", `# Virtual template`)
},
});
elev.disableLogger();
await t.throwsAsync(elev.toJSON(), {
message: `A virtual template had the same path as a file on the file system: "./test/stubs/stubs-virtual-conflict/virtual.md"`
});
});
test("Virtual templates try to output to the same file, issue #1612", async (t) => {
let elev = new Eleventy("./test/stubs-virtual-nowrite", "./test/stubs-virtual-nowrite/_site", {
config: function (eleventyConfig) {
eleventyConfig.addTemplate("virtual-one.md", "", {
permalink: "/output.html"
})
eleventyConfig.addTemplate("virtual-two.md", "", {
permalink: "/output.html"
})
},
});
elev.disableLogger();
await t.throwsAsync(elev.toJSON(), {
instanceOf: DuplicatePermalinkOutputError,
});
});
// Warning: this test writes to the file system
test("Virtual template writes to file system, issue #1612", async (t) => {
let elev = new Eleventy("./test/stubs-virtual", "./test/stubs-virtual/_site", {
config: function (eleventyConfig) {
eleventyConfig.addTemplate("virtual.md", `# Hello`)
},
});
elev.disableLogger();
let [,results] = await elev.write();
t.deepEqual(results.length, 1);
t.deepEqual(results[0].content.trim(), `<h1>Hello</h1>`);
t.deepEqual(results[0].rawInput, `# Hello`);
t.true(fs.existsSync("./test/stubs-virtual/_site/virtual/index.html"));
rimrafSync("./test/stubs-virtual/_site/");
});
test("Virtual templates conflict", async (t) => {
let elev = new Eleventy("./test/stubs-virtual-nowrite", "./test/stubs-virtual-nowrite/_site", {
config: function (eleventyConfig) {
eleventyConfig.addTemplate("virtual.md", `# Hello`);
eleventyConfig.addTemplate("virtual.md", `# Hello`);
},
});
let e = await t.throwsAsync(async () => {
await elev.toJSON();
});
t.is(e.message, "Virtual template conflict: you can’t add multiple virtual templates that have the same inputPath: virtual.md");
});