random-bunny/tests/helpers/cliHelper.test.ts
Ethan Lane adb8a00c1f
All checks were successful
Test / build (push) Successful in 8s
Add a newline character to the output of a file
2024-07-22 18:13:59 +01:00

118 lines
No EOL
3.5 KiB
TypeScript

import fs from "fs";
import CliHelper from "../../src/helpers/cliHelper";
import ICliOptions from "../../src/contracts/ICliOptions";
import IReturnResult from "../../src/contracts/IReturnResult";
import OutputHelper from "../../src/helpers/outputHelper";
import { ErrorCode } from "../../src/constants/ErrorCode";
describe("Endpoint", () => {
describe("GIVEN response is successful", () => {
test("GIVEN options.o is defined, EXPECT output written to file", () => {
// Arrange
const response = {
IsSuccess: true,
} as IReturnResult;
const options = {
o: "file.txt",
} as ICliOptions;
OutputHelper.GenerateOutput = jest.fn().mockReturnValue("test output");
fs.writeFileSync = jest.fn();
console.log = jest.fn();
console.error = jest.fn();
// Act
const result = CliHelper.Endpoint(response, options);
// Assert
expect(result).toBe(0);
expect(OutputHelper.GenerateOutput).toHaveBeenCalledTimes(1);
expect(OutputHelper.GenerateOutput).toHaveBeenCalledWith(response, options);
expect(fs.writeFileSync).toHaveBeenCalledTimes(1);
expect(fs.writeFileSync).toHaveBeenCalledWith("file.txt", "test output\n");
expect(console.log).not.toHaveBeenCalled();
expect(console.error).not.toHaveBeenCalled();
});
test("GIVEN options.o is undefined, EXPECT output logged to console", () => {
// Arrange
const response = {
IsSuccess: true,
} as IReturnResult;
const options = {
o: undefined,
} as ICliOptions;
OutputHelper.GenerateOutput = jest.fn().mockReturnValue("test output");
fs.writeFileSync = jest.fn();
console.log = jest.fn();
console.error = jest.fn();
// Act
const result = CliHelper.Endpoint(response, options);
// Assert
expect(result).toBe(0);
expect(OutputHelper.GenerateOutput).toHaveBeenCalledTimes(1);
expect(OutputHelper.GenerateOutput).toHaveBeenCalledWith(response, options);
expect(fs.writeFileSync).not.toHaveBeenCalled();
expect(console.log).toHaveBeenCalledTimes(1);
expect(console.log).toHaveBeenCalledWith("test output");
expect(console.error).not.toHaveBeenCalled();
});
});
test("GIVEN response is failure, EXPECT error logged to console", () => {
// Arrange
const response = {
IsSuccess: false,
Error: {
Message: "error message",
Code: ErrorCode.FailedToFetchReddit,
},
} as IReturnResult;
const options = {
o: "file.txt",
} as ICliOptions;
OutputHelper.GenerateOutput = jest.fn().mockReturnValue("test output");
fs.writeFileSync = jest.fn();
console.log = jest.fn();
console.error = jest.fn();
// Act
const result = CliHelper.Endpoint(response, options);
// Assert
expect(result).toBe(1);
expect(OutputHelper.GenerateOutput).not.toHaveBeenCalled();
expect(fs.writeFileSync).not.toHaveBeenCalled();
expect(console.log).not.toHaveBeenCalled();
expect(console.error).toHaveBeenCalledTimes(1);
expect(console.error).toHaveBeenCalledWith("error message", ErrorCode.FailedToFetchReddit);
});
});