Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quarto-dev
GitHub Repository: quarto-dev/quarto-cli
Path: blob/main/tests/smoke/project/project-website.test.ts
12925 views
1
/*
2
* project-website.test.ts
3
*
4
* Copyright (C) 2020-2022 Posit Software, PBC
5
*/
6
import { existsSync } from "../../../src/deno_ral/fs.ts";
7
import { join } from "../../../src/deno_ral/path.ts";
8
9
import { Metadata } from "../../../src/config/types.ts";
10
11
import { ExecuteOutput, testQuartoCmd, Verify } from "../../test.ts";
12
import { docs } from "../../utils.ts";
13
import {
14
directoryEmptyButFor,
15
fileExists,
16
verifyYamlFile,
17
} from "../../verify.ts";
18
19
import {
20
cleanWorking,
21
kProjectWorkingDir,
22
kQuartoProjectFile,
23
} from "./common.ts";
24
import { assert } from "testing/asserts";
25
26
// A website project
27
testQuartoCmd(
28
"create-project",
29
[kProjectWorkingDir, "--type", "website"],
30
[
31
fileExists(kQuartoProjectFile),
32
fileExists(join(kProjectWorkingDir, "index.qmd")),
33
verifyYamlFile(
34
kQuartoProjectFile,
35
(yaml: unknown) => {
36
// Make sure there is a project yaml section
37
const metadata = yaml as Metadata;
38
if (
39
metadata["project"] !== undefined && metadata["website"] !== undefined
40
) {
41
const type = (metadata["project"] as Metadata)["type"];
42
return type === "website";
43
} else {
44
return false;
45
}
46
},
47
),
48
],
49
{
50
setup: cleanWorking,
51
teardown: cleanWorking,
52
},
53
);
54
55
// Site render
56
57
const websiteOutputFiles: string[] = [
58
"index.html",
59
"about.html",
60
"search.json",
61
"styles.css",
62
"site_libs",
63
];
64
65
const outDir = "_site";
66
const siteProjDir = docs("project/site");
67
const siteOutDir = join(siteProjDir, outDir);
68
69
const verifySiteFiles = websiteOutputFiles.map((file) => {
70
return fileExists(join(siteOutDir, file));
71
});
72
73
const verifyPdfBook: Verify[] = [
74
...verifySiteFiles,
75
directoryEmptyButFor(siteOutDir, websiteOutputFiles),
76
];
77
testQuartoCmd(
78
"render",
79
[siteProjDir],
80
verifyPdfBook,
81
{
82
teardown: async () => {
83
if (existsSync(siteOutDir)) {
84
await Deno.remove(siteOutDir, { recursive: true });
85
}
86
},
87
},
88
);
89
90
const mergeNavbarCrumbsConfigSite = docs(
91
"websites/search/merge-navbar-crumbs-configuration",
92
);
93
const mergeNavbarCrumbsConfigSiteOutDir = join(mergeNavbarCrumbsConfigSite, outDir);
94
testQuartoCmd(
95
"render",
96
[mergeNavbarCrumbsConfigSite],
97
[
98
{
99
name: "verify-no-navbar-crumbs-in-searchjson",
100
verify: async (outputs: ExecuteOutput[]) => {
101
// Verify that the search.json file does not contain any navbar breadcrumbs
102
const searchJson = join(mergeNavbarCrumbsConfigSite, "_site", "search.json");
103
const searchJsonExists = existsSync(searchJson);
104
if (!searchJsonExists) {
105
throw new Error(`File ${searchJson} does not exist`);
106
}
107
const searchJsonContent = await Deno.readTextFile(searchJson);
108
const json = JSON.parse(searchJsonContent);
109
for (const entry of json) {
110
if (entry.crumbs) {
111
assert(entry.crumbs[0] !== "Home");
112
}
113
}
114
},
115
},
116
],
117
{
118
teardown: async () => {
119
if (existsSync(mergeNavbarCrumbsConfigSiteOutDir)) {
120
await Deno.remove(mergeNavbarCrumbsConfigSiteOutDir, { recursive: true });
121
}
122
},
123
},
124
);
125
126