Path: blob/main/tests/smoke/extensions/install.test.ts
12925 views
import { noErrorsOrWarnings } from "../../verify.ts";1import { join } from "../../../src/deno_ral/path.ts";2import { ExecuteOutput, testQuartoCmd, Verify } from "../../test.ts";3import { assert } from "testing/asserts";4import { ensureDirSync, existsSync } from "../../../src/deno_ral/fs.ts";5import { docs } from "../../utils.ts";6import { isLinux } from "../../../src/deno_ral/platform.ts";78const verifySubDirCount = (dir: string, count: number): Verify => {9return {10name: "Verify number of directories",11verify: (_outputs: ExecuteOutput[]) => {12const contents = Deno.readDirSync(dir);1314let subDirCount = 0;15for (const content of contents) {16if (content.isDirectory) {17subDirCount = subDirCount + 1;18}19}2021assert(count === subDirCount, "Incorrect number of subdirectories");22return Promise.resolve();23},24};25};2627const verifySubDirName = (dir: string, name: string): Verify => {28return {29name: "Verify name of the directory",30verify: (_outputs: ExecuteOutput[]) => {31assert(32existsSync(join(dir, name)),33"Expected subdirectory doesn't exist",34);35return Promise.resolve();36},37};38};3940const workingDir = Deno.makeTempDirSync();4142// Verify installation using a remote github repo43testQuartoCmd(44"install",45["extension", "quarto-ext/lightbox", "--no-prompt"],46[47noErrorsOrWarnings,48verifySubDirCount("_extensions", 1),49verifySubDirName("_extensions", "quarto-ext"),50],51{52cwd: () => {53return workingDir;54},55teardown: () => {56Deno.removeSync("_extensions", { recursive: true });57return Promise.resolve();58},59},60);6162// Verify install using urls63const extUrls = [64"quarto-ext/lightbox",65"quarto-ext/lightbox@cool",66"quarto-ext/[email protected]",67"quarto-ext/lightbox@test/use-in-quarto-cli",68"https://github.com/quarto-ext/lightbox/archive/refs/tags/v0.1.4.tar.gz",69"https://github.com/quarto-ext/lightbox/archive/refs/heads/main.tar.gz",70"https://github.com/quarto-ext/lightbox/archive/refs/heads/cool.tar.gz",71];7273if (!isLinux) {74extUrls.push(75...[76"https://github.com/quarto-ext/lightbox/archive/refs/tags/v0.1.4.zip",77"https://github.com/quarto-ext/lightbox/archive/refs/heads/main.zip",78"https://github.com/quarto-ext/lightbox/archive/refs/heads/cool.zip",79],80);81}8283for (const extUrl of extUrls) {84// Verify installation using a remote github repo85testQuartoCmd(86"add",87[extUrl, "--no-prompt"],88[89noErrorsOrWarnings,90verifySubDirCount("_extensions", 1),91verifySubDirName("_extensions", "quarto-ext"),92],93{94cwd: () => {95return workingDir;96},97teardown: () => {98Deno.removeSync("_extensions", { recursive: true });99return Promise.resolve();100},101sanitize: {102resources: false,103},104},105);106}107108// Verify use template using a remote github repo109const templateDir = join(workingDir, "template");110ensureDirSync(templateDir);111testQuartoCmd(112"use",113["template", "quarto-journals/jss", "--no-prompt"],114[115noErrorsOrWarnings,116verifySubDirCount("_extensions", 1),117verifySubDirName("_extensions", "quarto-journals"),118],119{120cwd: () => {121return templateDir;122},123teardown: () => {124Deno.chdir("..");125Deno.removeSync(templateDir, { recursive: true });126return Promise.resolve();127},128},129);130131// Verify installation using a local zip file132const testDir = docs("extensions");133const testDirAbs = join(Deno.cwd(), testDir);134135const zipFiles = [136{137path: "owned-multiple.tar.gz",138count: 3,139names: ["acm", "acs", "coolster"],140},141{142path: "unowned-multiple.tar.gz",143count: 3,144names: ["acm", "acs", "coolster"],145},146{147path: "rootdir.tar.gz",148count: 1,149names: ["latex-environments"],150},151{152path: "subdir.tar.gz",153count: 1,154names: ["latex-environments"],155},156];157158for (const zipFile of zipFiles) {159const verification = [160noErrorsOrWarnings,161verifySubDirCount("_extensions", zipFile.count),162];163for (const name of zipFile.names) {164verification.push(verifySubDirName("_extensions", name));165}166167const zipPath = join(testDirAbs, "ext-repo", zipFile.path);168testQuartoCmd(169"install",170["extension", zipPath, "--no-prompt"],171verification,172{173cwd: () => {174return workingDir;175},176teardown: () => {177try {178Deno.removeSync("_extensions", { recursive: true });179} catch {180// Weird flex but ok181}182return Promise.resolve();183},184},185);186}187188189