UNPKG

quilon

Version:

Generate ERDs from your entity files automagically

90 lines (89 loc) 5 kB
"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) { 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); })); });