2019-11-19 23:06:27 +08:00
|
|
|
// Initial env variable setup for tests.
|
|
|
|
process.env["INPUT_FOLDER"] = "build";
|
2019-12-22 05:51:39 +08:00
|
|
|
process.env["GITHUB_SHA"] = "123";
|
2019-11-19 23:06:27 +08:00
|
|
|
|
2019-12-22 05:51:39 +08:00
|
|
|
import { action } from "../src/constants";
|
|
|
|
import { deploy, generateBranch, init, switchToBaseBranch } from "../src/git";
|
2020-01-12 09:26:08 +08:00
|
|
|
import { execute } from "../src/execute";
|
2020-01-20 04:33:14 +08:00
|
|
|
import { setFailed } from "@actions/core";
|
2019-11-19 23:06:27 +08:00
|
|
|
|
2020-01-19 03:41:49 +08:00
|
|
|
const originalAction = JSON.stringify(action);
|
2019-11-19 23:06:27 +08:00
|
|
|
|
2020-01-20 04:33:14 +08:00
|
|
|
jest.mock("@actions/core", () => ({
|
|
|
|
setFailed: jest.fn(),
|
|
|
|
getInput: jest.fn()
|
|
|
|
}));
|
|
|
|
|
2020-01-12 09:26:08 +08:00
|
|
|
jest.mock("../src/execute", () => ({
|
2019-11-19 23:06:27 +08:00
|
|
|
execute: jest.fn()
|
|
|
|
}));
|
|
|
|
|
|
|
|
describe("git", () => {
|
|
|
|
afterEach(() => {
|
2020-01-19 03:41:49 +08:00
|
|
|
Object.assign(action, JSON.parse(originalAction));
|
2019-11-19 23:06:27 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
describe("init", () => {
|
|
|
|
it("should execute three commands if a GitHub token is provided", async () => {
|
2019-12-22 05:51:39 +08:00
|
|
|
Object.assign(action, {
|
|
|
|
build: "build",
|
2020-01-20 04:33:14 +08:00
|
|
|
branch: "branch",
|
2019-12-22 05:51:39 +08:00
|
|
|
gitHubToken: "123",
|
|
|
|
pusher: {
|
|
|
|
name: "asd",
|
|
|
|
email: "as@cat"
|
|
|
|
}
|
|
|
|
});
|
2019-11-19 23:06:27 +08:00
|
|
|
|
|
|
|
const call = await init();
|
2020-01-15 04:14:15 +08:00
|
|
|
expect(execute).toBeCalledTimes(6);
|
2019-12-22 05:51:39 +08:00
|
|
|
expect(call).toBe("Initialization step complete...");
|
2019-11-19 23:06:27 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
it("should execute three commands if a Access token is provided", async () => {
|
|
|
|
Object.assign(action, {
|
2019-12-22 05:51:39 +08:00
|
|
|
build: "build",
|
2020-01-20 04:33:14 +08:00
|
|
|
branch: "branch",
|
2019-12-22 05:51:39 +08:00
|
|
|
accessToken: "123",
|
2019-11-19 23:06:27 +08:00
|
|
|
pusher: {
|
2019-12-22 05:51:39 +08:00
|
|
|
name: "asd",
|
|
|
|
email: "as@cat"
|
|
|
|
}
|
2019-11-19 23:06:27 +08:00
|
|
|
});
|
|
|
|
|
2019-12-22 05:51:39 +08:00
|
|
|
const call = await init();
|
|
|
|
|
2020-01-15 04:14:15 +08:00
|
|
|
expect(execute).toBeCalledTimes(6);
|
2019-12-22 05:51:39 +08:00
|
|
|
expect(call).toBe("Initialization step complete...");
|
|
|
|
});
|
|
|
|
|
2019-11-19 23:06:27 +08:00
|
|
|
it("should fail if there is no provided GitHub Token or Access Token", async () => {
|
|
|
|
Object.assign(action, {
|
2019-12-22 05:51:39 +08:00
|
|
|
build: "build",
|
2020-01-20 04:33:14 +08:00
|
|
|
branch: "branch",
|
2019-11-19 23:06:27 +08:00
|
|
|
pusher: {
|
2019-12-22 05:51:39 +08:00
|
|
|
name: "asd",
|
|
|
|
email: "as@cat"
|
2020-01-20 04:33:14 +08:00
|
|
|
},
|
|
|
|
gitHubToken: null,
|
|
|
|
accessToken: null,
|
|
|
|
ssh: null
|
2019-12-22 05:51:39 +08:00
|
|
|
});
|
2019-11-19 23:06:27 +08:00
|
|
|
|
2019-12-22 05:51:39 +08:00
|
|
|
const call = await init();
|
2020-01-20 04:33:14 +08:00
|
|
|
expect(setFailed).toBeCalledTimes(1);
|
2019-12-22 05:51:39 +08:00
|
|
|
expect(execute).toBeCalledTimes(0);
|
|
|
|
expect(call).toBe("Initialization step complete...");
|
|
|
|
});
|
2019-11-19 23:06:27 +08:00
|
|
|
|
|
|
|
it("should fail if the build folder begins with a /", async () => {
|
|
|
|
Object.assign(action, {
|
2019-12-22 05:51:39 +08:00
|
|
|
accessToken: "123",
|
2020-01-20 04:33:14 +08:00
|
|
|
branch: "branch",
|
2019-12-22 05:51:39 +08:00
|
|
|
build: "/",
|
2019-11-19 23:06:27 +08:00
|
|
|
pusher: {
|
2019-12-22 05:51:39 +08:00
|
|
|
name: "asd",
|
|
|
|
email: "as@cat"
|
|
|
|
}
|
|
|
|
});
|
2019-11-19 23:06:27 +08:00
|
|
|
|
2019-12-22 05:51:39 +08:00
|
|
|
const call = await init();
|
2019-11-19 23:06:27 +08:00
|
|
|
|
2020-01-20 04:33:14 +08:00
|
|
|
expect(setFailed).toBeCalledTimes(1);
|
2019-12-22 05:51:39 +08:00
|
|
|
expect(execute).toBeCalledTimes(0);
|
|
|
|
expect(call).toBe("Initialization step complete...");
|
|
|
|
});
|
2019-11-19 23:06:27 +08:00
|
|
|
|
|
|
|
it("should fail if the build folder begins with a ./", async () => {
|
|
|
|
Object.assign(action, {
|
2019-12-22 05:51:39 +08:00
|
|
|
accessToken: "123",
|
2020-01-20 04:33:14 +08:00
|
|
|
branch: "branch",
|
2019-12-22 05:51:39 +08:00
|
|
|
build: "./",
|
2019-11-19 23:06:27 +08:00
|
|
|
pusher: {
|
2019-12-22 05:51:39 +08:00
|
|
|
name: "asd",
|
|
|
|
email: "as@cat"
|
|
|
|
}
|
|
|
|
});
|
2019-11-19 23:06:27 +08:00
|
|
|
|
2019-12-22 05:51:39 +08:00
|
|
|
const call = await init();
|
2020-01-20 04:33:14 +08:00
|
|
|
expect(setFailed).toBeCalledTimes(1);
|
2019-12-22 05:51:39 +08:00
|
|
|
expect(execute).toBeCalledTimes(0);
|
|
|
|
expect(call).toBe("Initialization step complete...");
|
|
|
|
});
|
2019-11-19 23:06:27 +08:00
|
|
|
|
|
|
|
it("should not fail if root is used", async () => {
|
|
|
|
Object.assign(action, {
|
2019-12-22 05:51:39 +08:00
|
|
|
accessToken: "123",
|
2020-01-20 04:33:14 +08:00
|
|
|
branch: "branch",
|
2019-12-22 05:51:39 +08:00
|
|
|
build: ".",
|
2019-11-19 23:06:27 +08:00
|
|
|
pusher: {
|
2019-12-22 05:51:39 +08:00
|
|
|
name: "asd",
|
|
|
|
email: "as@cat"
|
|
|
|
}
|
|
|
|
});
|
2019-11-19 23:06:27 +08:00
|
|
|
|
2019-12-22 05:51:39 +08:00
|
|
|
const call = await init();
|
2019-11-19 23:06:27 +08:00
|
|
|
|
2020-01-15 04:14:15 +08:00
|
|
|
expect(execute).toBeCalledTimes(6);
|
2019-12-22 05:51:39 +08:00
|
|
|
expect(call).toBe("Initialization step complete...");
|
|
|
|
});
|
2019-11-19 23:06:27 +08:00
|
|
|
});
|
|
|
|
|
2019-12-22 05:51:39 +08:00
|
|
|
describe("generateBranch", () => {
|
2020-01-20 04:33:14 +08:00
|
|
|
it("should execute six commands", async () => {
|
|
|
|
Object.assign(action, {
|
|
|
|
accessToken: "123",
|
|
|
|
branch: "branch",
|
|
|
|
build: ".",
|
|
|
|
pusher: {
|
|
|
|
name: "asd",
|
|
|
|
email: "as@cat"
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2019-11-19 23:06:27 +08:00
|
|
|
const call = await generateBranch();
|
2020-01-15 03:25:10 +08:00
|
|
|
expect(execute).toBeCalledTimes(6);
|
2019-12-22 05:51:39 +08:00
|
|
|
expect(call).toBe("Deployment branch creation step complete... ✅");
|
|
|
|
});
|
2020-01-20 04:33:14 +08:00
|
|
|
|
|
|
|
it("should fail if there is no branch", async () => {
|
|
|
|
Object.assign(action, {
|
|
|
|
accessToken: "123",
|
|
|
|
branch: null,
|
|
|
|
build: ".",
|
|
|
|
pusher: {
|
|
|
|
name: "asd",
|
|
|
|
email: "as@cat"
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
const call = await generateBranch();
|
|
|
|
expect(execute).toBeCalledTimes(0);
|
|
|
|
expect(setFailed).toBeCalledTimes(1);
|
|
|
|
expect(call).toBe("Deployment branch creation step complete... ✅");
|
|
|
|
});
|
2019-12-22 05:51:39 +08:00
|
|
|
});
|
2019-11-19 23:06:27 +08:00
|
|
|
|
2019-12-22 05:51:39 +08:00
|
|
|
describe("switchToBaseBranch", () => {
|
|
|
|
it("should execute one command", async () => {
|
2020-01-20 04:33:14 +08:00
|
|
|
Object.assign(action, {
|
|
|
|
accessToken: "123",
|
|
|
|
branch: "branch",
|
|
|
|
build: ".",
|
|
|
|
pusher: {
|
|
|
|
name: "asd",
|
|
|
|
email: "as@cat"
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2019-12-22 05:51:39 +08:00
|
|
|
const call = await switchToBaseBranch();
|
|
|
|
expect(execute).toBeCalledTimes(1);
|
|
|
|
expect(call).toBe("Switched to the base branch...");
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("deploy", () => {
|
|
|
|
it("should execute five commands", async () => {
|
2019-11-19 23:06:27 +08:00
|
|
|
Object.assign(action, {
|
2019-12-22 05:51:39 +08:00
|
|
|
build: "build",
|
2020-01-20 04:33:14 +08:00
|
|
|
branch: "branch",
|
2019-12-22 05:51:39 +08:00
|
|
|
gitHubToken: "123",
|
2019-11-19 23:06:27 +08:00
|
|
|
pusher: {
|
2019-12-22 05:51:39 +08:00
|
|
|
name: "asd",
|
|
|
|
email: "as@cat"
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2019-11-19 23:06:27 +08:00
|
|
|
const call = await deploy();
|
|
|
|
|
|
|
|
// Includes the call to generateBranch
|
2020-01-15 03:25:10 +08:00
|
|
|
expect(execute).toBeCalledTimes(18);
|
2019-12-22 05:51:39 +08:00
|
|
|
expect(call).toBe("Commit step complete...");
|
|
|
|
});
|
2020-01-20 04:33:14 +08:00
|
|
|
|
|
|
|
it("should execute five commands with clean options", async () => {
|
|
|
|
Object.assign(action, {
|
|
|
|
build: "build",
|
|
|
|
branch: "branch",
|
|
|
|
gitHubToken: "123",
|
|
|
|
pusher: {
|
|
|
|
name: "asd",
|
|
|
|
email: "as@cat"
|
|
|
|
},
|
|
|
|
clean: true,
|
|
|
|
cleanExclude: '["cat", "montezuma"]'
|
|
|
|
});
|
|
|
|
|
|
|
|
const call = await deploy();
|
|
|
|
|
|
|
|
// Includes the call to generateBranch
|
|
|
|
expect(execute).toBeCalledTimes(18);
|
|
|
|
expect(call).toBe("Commit step complete...");
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should gracefully handle incorrectly formatted clean exclude items", async () => {
|
|
|
|
Object.assign(action, {
|
|
|
|
build: "build",
|
|
|
|
branch: "branch",
|
|
|
|
gitHubToken: "123",
|
|
|
|
pusher: {
|
|
|
|
name: "asd",
|
|
|
|
email: "as@cat"
|
|
|
|
},
|
|
|
|
clean: true,
|
|
|
|
cleanExclude: '["cat, "montezuma"]' // There is a syntax errror in the string.
|
|
|
|
});
|
|
|
|
|
|
|
|
const call = await deploy();
|
|
|
|
|
|
|
|
// Includes the call to generateBranch
|
|
|
|
expect(execute).toBeCalledTimes(18);
|
|
|
|
expect(call).toBe("Commit step complete...");
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should stop early if there is nothing to commit", async () => {
|
|
|
|
Object.assign(action, {
|
|
|
|
build: "build",
|
|
|
|
branch: "branch",
|
|
|
|
gitHubToken: "123",
|
|
|
|
pusher: {
|
|
|
|
name: "asd",
|
|
|
|
email: "as@cat"
|
|
|
|
},
|
|
|
|
isTest: false // Setting this env variable to false means there will never be anything to commit and the action will exit early.
|
|
|
|
});
|
|
|
|
|
|
|
|
await deploy();
|
|
|
|
expect(execute).toBeCalledTimes(12);
|
|
|
|
});
|
2019-12-22 05:51:39 +08:00
|
|
|
});
|
2019-11-19 23:06:27 +08:00
|
|
|
});
|