118 lines
3.5 KiB
TypeScript
118 lines
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");
|
||
|
|
||
|
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);
|
||
|
});
|
||
|
});
|