Skip to content

Commit

Permalink
Merge pull request #1 from akshay5995/test/add-more-ut
Browse files Browse the repository at this point in the history
refactor: add more unit tests
  • Loading branch information
akshay5995 committed Sep 25, 2022
2 parents 8d72d12 + 66cb1b8 commit 588bbf7
Show file tree
Hide file tree
Showing 11 changed files with 265 additions and 50 deletions.
85 changes: 67 additions & 18 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8650,6 +8650,42 @@ const getRootPackageName = () => __awaiter(void 0, void 0, void 0, function* ()
exports["default"] = getRootPackageName;


/***/ }),

/***/ 2522:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getRootPackageName = exports.getChangedPackages = void 0;
const getChangedPackages_1 = __importDefault(__nccwpck_require__(2780));
exports.getChangedPackages = getChangedPackages_1.default;
const getRootPackageName_1 = __importDefault(__nccwpck_require__(786));
exports.getRootPackageName = getRootPackageName_1.default;


/***/ }),

/***/ 4014:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.setFailedMessage = exports.outputChangedPackages = exports.setEnvChangeDetected = exports.since = exports.packageName = void 0;
const inputs_1 = __nccwpck_require__(4840);
Object.defineProperty(exports, "packageName", ({ enumerable: true, get: function () { return inputs_1.packageName; } }));
Object.defineProperty(exports, "since", ({ enumerable: true, get: function () { return inputs_1.since; } }));
const outputs_1 = __nccwpck_require__(4937);
Object.defineProperty(exports, "setEnvChangeDetected", ({ enumerable: true, get: function () { return outputs_1.setEnvChangeDetected; } }));
Object.defineProperty(exports, "outputChangedPackages", ({ enumerable: true, get: function () { return outputs_1.outputChangedPackages; } }));
Object.defineProperty(exports, "setFailedMessage", ({ enumerable: true, get: function () { return outputs_1.setFailedMessage; } }));


/***/ }),

/***/ 4840:
Expand All @@ -8666,13 +8702,13 @@ exports.since = (0, core_1.getInput)("since");

/***/ }),

/***/ 8231:
/***/ 4937:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.outputChangedPackages = exports.setEnvChangeDetected = void 0;
exports.setFailedMessage = exports.outputChangedPackages = exports.setEnvChangeDetected = void 0;
const core_1 = __nccwpck_require__(5681);
const setEnvChangeDetected = (bool) => {
(0, core_1.exportVariable)("CHANGE_DETECTED", bool);
Expand All @@ -8682,6 +8718,10 @@ const outputChangedPackages = (packageNames) => {
(0, core_1.setOutput)("changed-packages", JSON.stringify(packageNames));
};
exports.outputChangedPackages = outputChangedPackages;
const setFailedMessage = (err) => {
(0, core_1.setFailed)(err.message);
};
exports.setFailedMessage = setFailedMessage;


/***/ }),
Expand All @@ -8691,6 +8731,21 @@ exports.outputChangedPackages = outputChangedPackages;

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const run_1 = __importDefault(__nccwpck_require__(7166));
(0, run_1.default)();


/***/ }),

/***/ 7166:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
Expand All @@ -8700,29 +8755,23 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const core_1 = __nccwpck_require__(5681);
const getChangedPackages_1 = __importDefault(__nccwpck_require__(2780));
const getRootPackageName_1 = __importDefault(__nccwpck_require__(786));
const inputs_1 = __nccwpck_require__(4840);
const ouputs_1 = __nccwpck_require__(8231);
const main = () => __awaiter(void 0, void 0, void 0, function* () {
const core_1 = __nccwpck_require__(2522);
const helpers_1 = __nccwpck_require__(4014);
const run = () => __awaiter(void 0, void 0, void 0, function* () {
try {
const changedPackages = yield (0, getChangedPackages_1.default)(inputs_1.since);
const changedPackages = yield (0, core_1.getChangedPackages)(helpers_1.since);
const packageNames = changedPackages.map((p) => p.name);
const rootPackage = yield (0, getRootPackageName_1.default)();
const hasRootOrGivenPackageChanged = packageNames.includes(rootPackage) || packageNames.includes(inputs_1.packageName);
(0, ouputs_1.setEnvChangeDetected)(hasRootOrGivenPackageChanged);
(0, ouputs_1.outputChangedPackages)(packageNames);
const rootPackage = yield (0, core_1.getRootPackageName)();
const hasRootOrGivenPackageChanged = packageNames.includes(rootPackage) || packageNames.includes(helpers_1.packageName);
(0, helpers_1.setEnvChangeDetected)(hasRootOrGivenPackageChanged);
(0, helpers_1.outputChangedPackages)(packageNames);
}
catch (error) {
(0, core_1.setFailed)(error.message);
(0, helpers_1.setFailedMessage)(error);
}
});
main();
exports["default"] = run;


/***/ }),
Expand Down
38 changes: 38 additions & 0 deletions src/core/getChangedPackages.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
const SINCE_MOCK = "commit-sha";
const MOCK_CHANGED_PACAKGES = [{ name: "root", version: "0.0.1" }];
const MOCK_OUTPUT = JSON.stringify(MOCK_CHANGED_PACAKGES);

const execMock = jest.fn().mockImplementation((cmd, callback) => {
callback(null, MOCK_OUTPUT);
});

jest.mock("child_process", () => ({
exec: execMock,
}));

import getChangedPackages from "./getChangedPackages";

describe("getChangedPackages", () => {
afterEach(() => {
jest.resetAllMocks();
});

test("should call the right methods and return right result", async () => {
const result = await getChangedPackages(SINCE_MOCK);
expect(execMock).toBeCalledTimes(1);
expect(execMock).toBeCalledWith(
`pnpm --filter "...[${SINCE_MOCK}]" list --json --depth=-1`,
expect.anything()
);
expect(result).toStrictEqual(MOCK_CHANGED_PACAKGES);
});

test("should fail if pnpm command fails", async () => {
const FAKE_ERROR = Error("Cmd: falied due to some reason");
execMock.mockImplementation((cmd, callback) => {
callback(FAKE_ERROR, null);
});

await expect(getChangedPackages(SINCE_MOCK)).rejects.toThrow();
});
});
34 changes: 34 additions & 0 deletions src/core/getRootPackageName.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
const PACKAGE_NAME_MOCKED = "root";

const readPackageUpMock = jest.fn();

jest.mock("read-pkg-up", () => ({
readPackageUp: readPackageUpMock,
}));

import getRootPackageName from "./getRootPackageName";

describe("getRootPackageName", () => {
beforeEach(() => {
jest.resetAllMocks();
});

test("should call the right method", async () => {
readPackageUpMock.mockResolvedValue({
packageJson: {
name: PACKAGE_NAME_MOCKED,
},
});
const result = await getRootPackageName();
expect(readPackageUpMock).toBeCalledTimes(1);
expect(result).toBe(PACKAGE_NAME_MOCKED);
});

test("throw error when root package couldn't be found", async () => {
readPackageUpMock.mockResolvedValue(null);
await expect(getRootPackageName()).rejects.toThrow(
"Couldn't read root package.json"
);
expect(readPackageUpMock).toBeCalledTimes(1);
});
});
4 changes: 4 additions & 0 deletions src/core/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import getChangedPackages from "./getChangedPackages";
import getRootPackageName from "./getRootPackageName";

export { getChangedPackages, getRootPackageName };
14 changes: 14 additions & 0 deletions src/helpers/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { packageName, since } from "./inputs";
import {
setEnvChangeDetected,
outputChangedPackages,
setFailedMessage,
} from "./outputs";

export {
packageName,
since,
setEnvChangeDetected,
outputChangedPackages,
setFailedMessage,
};
4 changes: 0 additions & 4 deletions src/helpers/inputs.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,6 @@ jest.mock("@actions/core", () => ({
import { packageName, since } from "./inputs";

describe("inputs", () => {
beforeEach(() => {
jest.resetAllMocks();
jest.clearAllMocks();
});
test("should get the right inputs supplied", () => {
expect(packageName).toBe(PACKAGE_NAME_MOCKED);
expect(since).toBe(SINCE_MOCKED);
Expand Down
20 changes: 15 additions & 5 deletions src/helpers/outputs.test.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,26 @@
const setOutputMocked = jest.fn();
const exportVariableMocked = jest.fn();
const setFailedMock = jest.fn();

jest.mock("@actions/core", () => ({
setOutput: setOutputMocked,
exportVariable: exportVariableMocked,
setFailed: setFailedMock,
}));

import { setEnvChangeDetected, outputChangedPackages } from "./ouputs";
import {
setEnvChangeDetected,
outputChangedPackages,
setFailedMessage,
} from "./outputs";

describe("outputs", () => {
beforeEach(() => {
jest.resetAllMocks();
jest.clearAllMocks();
});
test("setEnvChangeDetected should call the right method", () => {
setEnvChangeDetected(true);
expect(exportVariableMocked).toBeCalledTimes(1);
expect(exportVariableMocked).toBeCalledWith("CHANGE_DETECTED", true);
});

test("outputChangedPackages should call the right method", () => {
const changedPackages = ["root"];
outputChangedPackages(changedPackages);
Expand All @@ -27,4 +30,11 @@ describe("outputs", () => {
JSON.stringify(changedPackages)
);
});

test("setFailedMessage should call the right method", () => {
const FAKE_ERROR = Error("action failed to get package");
setFailedMessage(FAKE_ERROR);
expect(setFailedMock).toBeCalledTimes(1);
expect(setFailedMock).toBeCalledWith(FAKE_ERROR.message);
});
});
6 changes: 5 additions & 1 deletion src/helpers/ouputs.ts → src/helpers/outputs.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { exportVariable, setOutput } from "@actions/core";
import { exportVariable, setOutput, setFailed } from "@actions/core";

export const setEnvChangeDetected = (bool: boolean): void => {
exportVariable("CHANGE_DETECTED", bool);
Expand All @@ -7,3 +7,7 @@ export const setEnvChangeDetected = (bool: boolean): void => {
export const outputChangedPackages = (packageNames: string[]): void => {
setOutput("changed-packages", JSON.stringify(packageNames));
};

export const setFailedMessage = (err: Error): void => {
setFailed(err.message);
};
24 changes: 2 additions & 22 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,3 @@
import { setFailed } from "@actions/core";
import getChangedPackages from "./core/getChangedPackages";
import getRootPackageName from "./core/getRootPackageName";
import { packageName, since } from "./helpers/inputs";
import { setEnvChangeDetected, outputChangedPackages } from "./helpers/ouputs";
import run from "./run";

const main = async () => {
try {
const changedPackages = await getChangedPackages(since);
const packageNames = changedPackages.map((p) => p.name);
const rootPackage = await getRootPackageName();

const hasRootOrGivenPackageChanged =
packageNames.includes(rootPackage) || packageNames.includes(packageName);

setEnvChangeDetected(hasRootOrGivenPackageChanged);
outputChangedPackages(packageNames);
} catch (error) {
setFailed((error as Error).message);
}
};

main();
run();
60 changes: 60 additions & 0 deletions src/run.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
const PACKAGE_NAME_MOCKED = "fake-package";
const SINCE_MOCKED = "commit-sha";

const setFailedMessageMock = jest.fn();
const outputChangedPackagesMock = jest.fn();
const setEnvChangeDetectedMock = jest.fn();
const getChangedPackagesMock = jest.fn().mockReturnValue([
{ name: "root", version: "0.0.1" },
{ name: "some-fake-package", version: "0.0.1" },
]);
const getRootPackageNameMock = jest.fn().mockReturnValue("root");

jest.mock("./helpers", () => ({
setEnvChangeDetected: setEnvChangeDetectedMock,
outputChangedPackages: outputChangedPackagesMock,
packageName: PACKAGE_NAME_MOCKED,
since: SINCE_MOCKED,
setFailedMessage: setFailedMessageMock,
}));

jest.mock("./core", () => ({
getRootPackageName: getRootPackageNameMock,
getChangedPackages: getChangedPackagesMock,
}));

import run from "./run";

describe("run", () => {
afterEach(() => {
jest.resetAllMocks();
});

test("should call all the right methods", async () => {
await run();
expect(getChangedPackagesMock).toBeCalledTimes(1);
expect(getChangedPackagesMock).toBeCalledWith(SINCE_MOCKED);
expect(getRootPackageNameMock).toBeCalledTimes(1);
expect(setEnvChangeDetectedMock).toBeCalledTimes(1);
expect(setEnvChangeDetectedMock).toBeCalledWith(true);
expect(outputChangedPackagesMock).toBeCalledTimes(1);
expect(outputChangedPackagesMock).toBeCalledWith([
"root",
"some-fake-package",
]);
});

test("should call setFailed when there's an error", async () => {
const FAKE_ERROR = Error("Action failed due to error");
getChangedPackagesMock.mockRejectedValue(FAKE_ERROR);

await expect(run()).resolves.not.toThrow();
expect(getChangedPackagesMock).toBeCalledTimes(1);
expect(getChangedPackagesMock).toBeCalledWith(SINCE_MOCKED);
expect(getRootPackageNameMock).not.toBeCalled();
expect(setEnvChangeDetectedMock).not.toBeCalled();
expect(outputChangedPackagesMock).not.toBeCalled();
expect(setFailedMessageMock).toBeCalledTimes(1);
expect(setFailedMessageMock).toBeCalledWith(FAKE_ERROR);
});
});

0 comments on commit 588bbf7

Please sign in to comment.