Path: blob/main/tests/smoke/project/project-website.test.ts
12925 views
/*1* project-website.test.ts2*3* Copyright (C) 2020-2022 Posit Software, PBC4*/5import { existsSync } from "../../../src/deno_ral/fs.ts";6import { join } from "../../../src/deno_ral/path.ts";78import { Metadata } from "../../../src/config/types.ts";910import { ExecuteOutput, testQuartoCmd, Verify } from "../../test.ts";11import { docs } from "../../utils.ts";12import {13directoryEmptyButFor,14fileExists,15verifyYamlFile,16} from "../../verify.ts";1718import {19cleanWorking,20kProjectWorkingDir,21kQuartoProjectFile,22} from "./common.ts";23import { assert } from "testing/asserts";2425// A website project26testQuartoCmd(27"create-project",28[kProjectWorkingDir, "--type", "website"],29[30fileExists(kQuartoProjectFile),31fileExists(join(kProjectWorkingDir, "index.qmd")),32verifyYamlFile(33kQuartoProjectFile,34(yaml: unknown) => {35// Make sure there is a project yaml section36const metadata = yaml as Metadata;37if (38metadata["project"] !== undefined && metadata["website"] !== undefined39) {40const type = (metadata["project"] as Metadata)["type"];41return type === "website";42} else {43return false;44}45},46),47],48{49setup: cleanWorking,50teardown: cleanWorking,51},52);5354// Site render5556const websiteOutputFiles: string[] = [57"index.html",58"about.html",59"search.json",60"styles.css",61"site_libs",62];6364const outDir = "_site";65const siteProjDir = docs("project/site");66const siteOutDir = join(siteProjDir, outDir);6768const verifySiteFiles = websiteOutputFiles.map((file) => {69return fileExists(join(siteOutDir, file));70});7172const verifyPdfBook: Verify[] = [73...verifySiteFiles,74directoryEmptyButFor(siteOutDir, websiteOutputFiles),75];76testQuartoCmd(77"render",78[siteProjDir],79verifyPdfBook,80{81teardown: async () => {82if (existsSync(siteOutDir)) {83await Deno.remove(siteOutDir, { recursive: true });84}85},86},87);8889const mergeNavbarCrumbsConfigSite = docs(90"websites/search/merge-navbar-crumbs-configuration",91);92const mergeNavbarCrumbsConfigSiteOutDir = join(mergeNavbarCrumbsConfigSite, outDir);93testQuartoCmd(94"render",95[mergeNavbarCrumbsConfigSite],96[97{98name: "verify-no-navbar-crumbs-in-searchjson",99verify: async (outputs: ExecuteOutput[]) => {100// Verify that the search.json file does not contain any navbar breadcrumbs101const searchJson = join(mergeNavbarCrumbsConfigSite, "_site", "search.json");102const searchJsonExists = existsSync(searchJson);103if (!searchJsonExists) {104throw new Error(`File ${searchJson} does not exist`);105}106const searchJsonContent = await Deno.readTextFile(searchJson);107const json = JSON.parse(searchJsonContent);108for (const entry of json) {109if (entry.crumbs) {110assert(entry.crumbs[0] !== "Home");111}112}113},114},115],116{117teardown: async () => {118if (existsSync(mergeNavbarCrumbsConfigSiteOutDir)) {119await Deno.remove(mergeNavbarCrumbsConfigSiteOutDir, { recursive: true });120}121},122},123);124125126