/** * Pruebas de las funciones puras de armado de rutas para la transferencia SFTP. La I/O real * (SFTP/zip) no se prueba aquí; se cubre la construcción de rutas que es donde vive el riesgo * de separadores Windows/POSIX. */ import { describe, it, expect } from 'vitest'; import { joinRemotePath, toSftpPath } from './sftp-transfer'; describe('joinRemotePath', () => { it('usa backslash cuando la carpeta es estilo Windows', () => { expect(joinRemotePath('D:\\SQLDATA', 'NODO001.bak')).toBe('D:\\SQLDATA\\NODO001.bak'); }); it('respeta separadores finales duplicados', () => { expect(joinRemotePath('D:\\SQLDATA\\\\', 'a.zip')).toBe('D:\\SQLDATA\\a.zip'); }); it('usa slash cuando la carpeta es POSIX', () => { expect(joinRemotePath('/var/inbox/', 'a.zip')).toBe('/var/inbox/a.zip'); }); }); describe('toSftpPath', () => { it('convierte backslashes de Windows a slashes para OpenSSH SFTP', () => { expect(toSftpPath('D:\\SQLDATA\\NODO001.bak')).toBe('D:/SQLDATA/NODO001.bak'); }); it('deja intactas las rutas POSIX', () => { expect(toSftpPath('/var/inbox/a.zip')).toBe('/var/inbox/a.zip'); }); });