multi-clasp2
Version:
Google Clasp wrapper to push changes to multiple Apps Script projects at once.
55 lines (54 loc) • 2.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const multiClaspMocks_1 = require("./_mocks/multiClaspMocks");
const push_1 = tslib_1.__importDefault(require("../src/push"));
describe("multi-clasp push -> execShellCommand", () => {
const realArgv = process.argv.slice();
beforeEach(() => {
process.argv = ["node", "multi-clasp", "push"];
multiClaspMocks_1.foreachMock.mockReset();
multiClaspMocks_1.execMock.mockReset();
});
afterEach(() => {
process.argv = realArgv;
});
it("no options: executes npx clasp push", async () => {
const tasks = (0, multiClaspMocks_1.mockForeach)(["AAA", "BBB"]);
multiClaspMocks_1.execMock.mockResolvedValue({ error: null, stdout: "ok", stderr: "" });
await (0, push_1.default)({ retry: "1" });
await Promise.all(tasks);
expect(multiClaspMocks_1.execMock).toHaveBeenCalledTimes(2);
expect(multiClaspMocks_1.execMock.mock.calls[0][0]).toBe("npx clasp push ");
expect(multiClaspMocks_1.execMock.mock.calls[1][0]).toBe("npx clasp push ");
});
it("--force: executes npx clasp push --force", async () => {
const tasks = (0, multiClaspMocks_1.mockForeach)(["AAA", "BBB"]);
multiClaspMocks_1.execMock.mockResolvedValue({ error: null, stdout: "ok", stderr: "" });
await (0, push_1.default)({ retry: "1", force: true });
await Promise.all(tasks);
expect(multiClaspMocks_1.execMock).toHaveBeenCalledTimes(2);
expect(multiClaspMocks_1.execMock.mock.calls[0][0]).toBe("npx clasp push --force");
expect(multiClaspMocks_1.execMock.mock.calls[1][0]).toBe("npx clasp push --force");
});
it("retry: fails once then succeeds", async () => {
const tasks = (0, multiClaspMocks_1.mockForeach)(["AAA"]);
multiClaspMocks_1.execMock
.mockResolvedValueOnce({ error: new Error("boom"), stdout: "", stderr: "fail" })
.mockResolvedValueOnce({ error: null, stdout: "ok", stderr: "" });
await (0, push_1.default)({ retry: "2" });
await Promise.all(tasks);
expect(multiClaspMocks_1.execMock).toHaveBeenCalledTimes(2);
expect(multiClaspMocks_1.execMock.mock.calls[0][0]).toBe("npx clasp push ");
expect(multiClaspMocks_1.execMock.mock.calls[1][0]).toBe("npx clasp push ");
});
it("retry: exits(1) if all retries fail", async () => {
const tasks = (0, multiClaspMocks_1.mockForeach)(["AAA"]);
const exitSpy = jest.spyOn(process, "exit").mockImplementation((() => undefined));
multiClaspMocks_1.execMock.mockResolvedValue({ error: new Error("boom"), stdout: "", stderr: "fail" });
await (0, push_1.default)({ retry: "2" });
await Promise.all(tasks);
expect(exitSpy).toHaveBeenCalledWith(1);
exitSpy.mockRestore();
});
});