quilon
Version:
Generate ERDs from your entity files automagically
90 lines (89 loc) • 5 kB
JavaScript
;
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) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
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 fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const filesystem_1 = require("../../utils/filesystem");
const Driver_1 = require("../../drivers/Driver");
const Builder_1 = require("../../builders/Builder");
const config_1 = require("../../global/config");
const Generate_1 = require("./Generate");
jest.mock("fs");
jest.mock("../../utils/filesystem");
jest.mock("../../drivers/Driver");
jest.mock("../../builders/Builder");
describe("GenerateCommand", () => {
let generateCommand;
let mockConfigFile;
let mockFiles;
let mockDiagram;
beforeEach(() => {
generateCommand = new Generate_1.GenerateCommand();
jest.clearAllMocks();
mockConfigFile = {
entities: ["src/entities"],
outputDir: "output",
};
mockFiles = ["src/entities/User.ts", "src/entities/Post.ts"];
mockDiagram = "MockDiagramContent";
filesystem_1.FileSystemUtils.readAndParseJSONFile.mockReturnValue(mockConfigFile);
filesystem_1.FileSystemUtils.readFilesFromDirectory.mockResolvedValue(mockFiles);
const mockDriver = {
getFileNamePattern: jest.fn().mockReturnValue("*.ts"),
setFilePath: jest.fn(),
parseEntity: jest.fn().mockReturnValue("MockEntity"),
};
const mockBuilder = {
appendEntity: jest.fn(),
getDiagram: jest.fn().mockReturnValue(mockDiagram),
fileExtension: "mmd",
};
Driver_1.Driver.mockImplementation(() => mockDriver);
Builder_1.Builder.mockImplementation(() => mockBuilder);
});
test("should throw an error if no entities are found in the config file", () => __awaiter(void 0, void 0, void 0, function* () {
filesystem_1.FileSystemUtils.readAndParseJSONFile.mockReturnValueOnce({ entities: [] });
yield expect(generateCommand.execute()).rejects.toThrow("No entities found");
}));
test("should create output directory if it does not exist", () => __awaiter(void 0, void 0, void 0, function* () {
fs_1.default.existsSync.mockReturnValue(false);
yield generateCommand.execute();
expect(fs_1.default.existsSync).toHaveBeenCalledWith(mockConfigFile.outputDir);
expect(fs_1.default.mkdirSync).toHaveBeenCalledWith(mockConfigFile.outputDir);
}));
test("should not create output directory if it already exists", () => __awaiter(void 0, void 0, void 0, function* () {
fs_1.default.existsSync.mockReturnValue(true);
yield generateCommand.execute();
expect(fs_1.default.existsSync).toHaveBeenCalledWith(mockConfigFile.outputDir);
expect(fs_1.default.mkdirSync).not.toHaveBeenCalled();
}));
test("should process entities and create the diagram file", () => __awaiter(void 0, void 0, void 0, function* () {
fs_1.default.existsSync.mockReturnValue(true);
yield generateCommand.execute();
const expectedFileName = path_1.default.join(mockConfigFile.outputDir, `${config_1.GlobalConfig.DIAGRAM_FILE_NAME}.mmd`);
expect(filesystem_1.FileSystemUtils.readFilesFromDirectory).toHaveBeenCalledWith("src/entities", "*.ts");
expect(fs_1.default.writeFileSync).toHaveBeenCalledWith(expectedFileName, mockDiagram);
expect(fs_1.default.writeFileSync).toHaveBeenCalledTimes(1);
}));
test("should handle errors during diagram generation gracefully", () => __awaiter(void 0, void 0, void 0, function* () {
fs_1.default.existsSync.mockReturnValue(true);
fs_1.default.writeFileSync.mockImplementation(() => {
throw new Error("Write error");
});
yield expect(generateCommand.execute()).rejects.toThrow("Write error");
const expectedFileName = path_1.default.join(mockConfigFile.outputDir, `${config_1.GlobalConfig.DIAGRAM_FILE_NAME}.mmd`);
expect(filesystem_1.FileSystemUtils.readFilesFromDirectory).toHaveBeenCalledWith("src/entities", "*.ts");
expect(fs_1.default.writeFileSync).toHaveBeenCalledWith(expectedFileName, mockDiagram);
}));
});