cache/__tests__/tar.test.ts

87 lines
2.6 KiB
TypeScript
Raw Normal View History

2020-01-06 18:36:33 +00:00
import * as exec from "@actions/exec";
import * as io from "@actions/io";
import * as tar from "../src/tar";
2020-04-10 20:26:15 +01:00
import fs = require("fs");
2020-01-06 18:36:33 +00:00
jest.mock("@actions/exec");
jest.mock("@actions/io");
beforeAll(() => {
jest.spyOn(io, "which").mockImplementation(tool => {
return Promise.resolve(tool);
});
});
test("extract BSD tar", async () => {
2020-01-06 18:36:33 +00:00
const mkdirMock = jest.spyOn(io, "mkdirP");
const execMock = jest.spyOn(exec, "exec");
const IS_WINDOWS = process.platform === "win32";
const archivePath = IS_WINDOWS
? `${process.env["windir"]}\\fakepath\\cache.tar`
: "cache.tar";
2020-01-06 18:36:33 +00:00
const targetDirectory = "~/.npm/cache";
await tar.extractTar(archivePath, targetDirectory);
expect(mkdirMock).toHaveBeenCalledWith(targetDirectory);
const tarPath = IS_WINDOWS
? `${process.env["windir"]}\\System32\\tar.exe`
: "tar";
expect(execMock).toHaveBeenCalledTimes(1);
expect(execMock).toHaveBeenCalledWith(`"${tarPath}"`, [
"-xz",
"-f",
2020-04-13 17:20:27 +01:00
IS_WINDOWS ? archivePath.replace(/\\/g, "/") : archivePath,
2020-01-06 18:36:33 +00:00
"-C",
2020-04-13 17:20:27 +01:00
IS_WINDOWS ? targetDirectory?.replace(/\\/g, "/") : targetDirectory
2020-01-06 18:36:33 +00:00
]);
});
test("extract GNU tar", async () => {
const IS_WINDOWS = process.platform === "win32";
if (IS_WINDOWS) {
2020-04-10 20:26:15 +01:00
jest.spyOn(fs, "existsSync").mockReturnValueOnce(false);
jest.spyOn(tar, "isGnuTar").mockReturnValue(Promise.resolve(true));
const execMock = jest.spyOn(exec, "exec");
const archivePath = `${process.env["windir"]}\\fakepath\\cache.tar`;
const targetDirectory = "~/.npm/cache";
await tar.extractTar(archivePath, targetDirectory);
expect(execMock).toHaveBeenCalledTimes(1);
2020-04-13 17:20:27 +01:00
expect(execMock).toHaveBeenLastCalledWith(`"tar"`, [
"-xz",
"-f",
archivePath.replace(/\\/g, "/"),
"-C",
targetDirectory?.replace(/\\/g, "/"),
"--force-local"
]);
}
});
test("create BSD tar", async () => {
2020-01-06 18:36:33 +00:00
const execMock = jest.spyOn(exec, "exec");
const archivePath = "cache.tar";
const sourceDirectory = "~/.npm/cache";
await tar.createTar(archivePath, sourceDirectory);
const IS_WINDOWS = process.platform === "win32";
const tarPath = IS_WINDOWS
? `${process.env["windir"]}\\System32\\tar.exe`
: "tar";
expect(execMock).toHaveBeenCalledTimes(1);
expect(execMock).toHaveBeenCalledWith(`"${tarPath}"`, [
"-cz",
"-f",
2020-04-13 17:20:27 +01:00
IS_WINDOWS ? archivePath.replace(/\\/g, "/") : archivePath,
2020-01-06 18:36:33 +00:00
"-C",
2020-04-13 17:20:27 +01:00
IS_WINDOWS ? sourceDirectory?.replace(/\\/g, "/") : sourceDirectory,
2020-01-06 18:36:33 +00:00
"."
]);
});