diff --git a/lib/__tests__/salix.spec.js b/lib/__tests__/salix.spec.js new file mode 100644 index 0000000..bf74b40 --- /dev/null +++ b/lib/__tests__/salix.spec.js @@ -0,0 +1,99 @@ +const assert = require("assert"); +const fs = require("fs"); +const path = require("path"); +const Salix = require("./Salix"); // Ajusta la ruta si está en otro directorio + +// Mock del sistema de archivos +const mockFs = { + files: {}, + + existsSync(filePath) { + return !!this.files[filePath]; + }, + + writeFileSync(filePath, content) { + this.files[filePath] = content; + }, + + readFileSync(filePath) { + if (!this.existsSync(filePath)) { + throw { code: "ENOENT" }; + } + return this.files[filePath]; + }, + + reset() { + this.files = {}; + }, +}; + +// Reemplaza los métodos reales de fs con el mock +const originalFs = { ...fs }; +Object.assign(fs, mockFs); + +(async () => { + try { + // Configuración inicial + const loggerMock = { + conf: { + salix: { + url: "http://example.com", + api: { + status: "status", + logInfo: "logInfo", + }, + renewInterval: 10, + }, + }, + }; + + // Test: Inicialización básica + const salix = new Salix(); + await salix.init(loggerMock); + + assert.strictEqual(salix.conf, loggerMock.conf, "La configuración no se inicializó correctamente"); + console.log("✅ Salix.init configuró correctamente los valores iniciales."); + + // Test: Cargar configuración + const mockFilePath = path.join(__dirname, "..", "config/salix.local.yml"); + mockFs.files[mockFilePath] = JSON.stringify({ salixVersion: "1.0.0" }); + + const loadedConfig = await salix.loadConfig(); + assert.deepStrictEqual( + loadedConfig, + { salixVersion: "1.0.0" }, + "La configuración cargada no coincide con lo esperado" + ); + console.log("✅ Salix.loadConfig cargó correctamente el archivo YAML."); + + // Test: Guardar configuración + const newConfig = { log: "testLog" }; + await salix.saveConfig(newConfig); + + const savedContent = JSON.parse(mockFs.files[mockFilePath]); + assert.strictEqual( + savedContent.log, + "testLog", + "La configuración no se guardó correctamente" + ); + console.log("✅ Salix.saveConfig guardó correctamente el archivo YAML."); + + // Test: Comparar versiones + const isDeprecated = salix.compareVersion("2.0.0", "1.0.0"); + assert.strictEqual( + isDeprecated, + true, + "La comparación de versiones no detectó correctamente la versión como desactualizada" + ); + console.log("✅ Salix.compareVersion funciona correctamente."); + + // Limpia el mock del sistema de archivos + mockFs.reset(); + + } catch (error) { + console.error("❌ Error en las pruebas:", error); + } finally { + // Restaura los métodos originales de fs + Object.assign(fs, originalFs); + } +})();