UNPKG

observable-fs

Version:

Provides as Observables some of the APIs of node fs

273 lines 11.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("mocha"); const chai_1 = require("chai"); const _ = require("lodash"); const rxjs_1 = require("rxjs"); const observable_fs_1 = require("./observable-fs"); const observable_fs_2 = require("./observable-fs"); const observable_fs_3 = require("./observable-fs"); const path = require("path"); describe('filesObs function', () => { it('reads the files of a directory', (done) => { const files = new Array(); const dirPath = 'observable-fs-test-dir/'; (0, observable_fs_1.filesObs)(dirPath).subscribe({ next: (file) => files.push(file), error: (err) => { console.error('ERROR', err); }, complete: () => { (0, chai_1.expect)(files.filter((f) => f !== 'observable-fs-test-dir/.DS_Store').length).to.equal(4); return done(); }, }); }); }); describe('dirNamesListObs function', () => { it('reads the subdirectories of a directory', (done) => { const dirPath = 'observable-fs-test-dir/'; (0, observable_fs_1.dirNamesListObs)(dirPath).subscribe({ next: (dirs) => { (0, chai_1.expect)(dirs.length).to.equal(2); (0, chai_1.expect)(dirs.filter((d) => d === 'dir-1').length).to.equal(1); (0, chai_1.expect)(dirs.filter((d) => d === 'dir-1').length).to.equal(1); }, error: (err) => { console.error('ERROR', err); }, complete: () => { return done(); }, }); }); }); describe('readLinesObs function', () => { it('reads all the lines of a file', (done) => { const filePath = 'observable-fs-test-dir/dir-2/file-2-1.txt'; (0, observable_fs_1.readLinesObs)(filePath).subscribe({ next: (lines) => { (0, chai_1.expect)(lines.length).to.equal(5); console.log('lines', lines); return done(); }, error: (err) => { throw err; }, complete: () => console.log('COMPLETED'), }); }); it('try to read all the lines of a file that does not exist', (done) => { const filePath = 'not-existing-file.txt'; (0, observable_fs_1.readLinesObs)(filePath).subscribe({ next: (lines) => { console.error('lines are not expected since the file does not exist', lines); done(new Error('lines are not expected since the file does not exist')); }, error: (err) => { (0, chai_1.expect)(err.code).to.equal('ENOENT'); done(); }, complete: () => { done(new Error('not expected to complete but to error since the file does not exist')); }, }); }); it('reads an empty file', (done) => { const filePath = 'observable-fs-test-dir/empty-file.txt'; (0, observable_fs_1.readLinesObs)(filePath).subscribe({ next: (lines) => { (0, chai_1.expect)(lines.length).to.equal(0); }, error: (err) => { done(err); }, complete: () => { done(); }, }); }); }); describe('readLineObs function', () => { it('reads each line of a file', (done) => { let lineCounter = 0; const filePath = 'observable-fs-test-dir/dir-2/file-2-1.txt'; (0, observable_fs_1.readLineObs)(filePath).subscribe({ next: () => lineCounter++, error: (err) => { console.error('ERROR', err); }, complete: () => { if (lineCounter !== 5) { console.error('Number of lines read not as expected', filePath, lineCounter); return done(new Error('readLineObs failed')); } console.log('COMPLETED'); done(); }, }); }); it('try to read lines of a file that does not exist', (done) => { const filePath = 'not-existing-file.txt'; (0, observable_fs_1.readLineObs)(filePath).subscribe({ next: (lines) => { console.error('lines are not expected since the file does not exist', lines); done(new Error('lines are not expected since the file does not exist')); }, error: (err) => { (0, chai_1.expect)(err.code).to.equal('ENOENT'); done(); }, complete: () => { done(new Error('not expected to complete but to error since the file does not exist')); }, }); }); }); describe('writeFileObs function', () => { it('writes a file with a certain content', (done) => { const dirPath = 'observable-fs-test-dir-output/'; const fileName = 'file-w.txt'; const fullFileName = path.join(dirPath, fileName); const content = ['first line', 'second line']; // delete the target directory if it exists (0, observable_fs_1.deleteDirObs)(dirPath) .pipe( // writes the file and then runs the checks (0, rxjs_1.switchMap)((deletedDir) => (0, observable_fs_1.writeFileObs)(path.join(deletedDir, fileName), content)), // checks that the file name is emitted (0, rxjs_1.tap)((data) => { if (fullFileName !== data) { console.error('data emitted', data); console.error('fullFileName', dirPath + fileName); return done(new Error('data emitted by write failed')); } }), // checks, via filesObs function, that a file with the expected name exists (0, rxjs_1.switchMap)(() => (0, observable_fs_1.filesObs)(dirPath)), (0, rxjs_1.tap)((filePath) => { if (filePath !== fullFileName) { console.error('filePath', filePath); console.error('fullFileName', fullFileName); return done(new Error('write file failed')); } }), // removes the directory used for the test (0, rxjs_1.switchMap)(() => (0, observable_fs_1.deleteDirObs)(dirPath))) .subscribe({ error: (err) => { (0, observable_fs_1.deleteDirObs)(dirPath).subscribe(); done(err); }, complete: () => done(), }); }); }); describe('makeDirObs function', () => { it('tries to create a directory - at the end it deletes the directory', (done) => { const dirName = 'new dir'; (0, observable_fs_1.makeDirObs)(dirName).subscribe({ next: (data) => { const expectedData = path.join(process.cwd(), dirName); if (data !== expectedData) { console.error('expectedData', expectedData); console.error('data', data); return done(new Error('data not as expected ')); } }, error: (err) => console.error(err), complete: () => { (0, observable_fs_1.deleteDirObs)(dirName).subscribe(); done(); }, }); }); it('tries to create a directory first and then the same directory - at the end it deletes the directory', (done) => { const dirName = 'another new dir'; (0, observable_fs_1.makeDirObs)(dirName) .pipe( // checks that the data received is equal to the name of the directory created (0, rxjs_1.tap)((data) => { const expectedDirPath = path.join(process.cwd(), dirName); if (data !== expectedDirPath) { console.error('expectedData', expectedDirPath); console.error('data', data); throw Error('data not as expected '); } }), (0, rxjs_1.switchMap)(() => (0, observable_fs_1.makeDirObs)(dirName)), // checks that the data received is null, since this signals that the directory we tried to create already existis (0, rxjs_1.tap)((data) => { if (data) { console.error('expectedData', null); console.error('data', data); throw Error('data not as expected '); } })) .subscribe({ error: (err) => { (0, observable_fs_1.deleteDirObs)(dirName).subscribe(); done(err); }, complete: () => { (0, observable_fs_1.deleteDirObs)(dirName).subscribe(); done(); }, }); }); }); describe('makeTempDirObs function', () => { it('tries to create a temp directory', (done) => { const prefix = 'temp-prefix-'; (0, observable_fs_1.makeTempDirObs)(prefix) .pipe((0, rxjs_1.tap)({ next: (tempDirName) => { const gotPrefix = tempDirName.slice(0, prefix.length); if (gotPrefix !== prefix) { console.error('expected prefix', prefix); console.error('got prefix', gotPrefix); return done(new Error('data not as expected ')); } }, }), (0, rxjs_1.concatMap)((tempDirName) => { return (0, observable_fs_1.deleteDirObs)(tempDirName); })) .subscribe({ error: (err) => console.error(err), complete: () => { done(); }, }); }); }); describe('appendFileObs function', () => { it('appends 2 lines to a file', (done) => { const logFile = 'log.txt'; const line = 'I am a line'; const linePlusReturn = line + '\n'; (0, observable_fs_2.appendFileObs)(logFile, linePlusReturn) .pipe((0, rxjs_1.switchMap)((data) => { // removes the last char which is carriage return - this should be the line appended const lineEmitted = data.substring(0, data.length - 1); return (0, observable_fs_2.appendFileObs)(logFile, lineEmitted); })) .subscribe({ error: (err) => { console.error('ERROR', err); done(err); }, complete: () => { (0, observable_fs_1.readLinesObs)(logFile).subscribe((lines) => { const linesExpected = [line, line]; const areLinesCorrect = _.isEqual(lines, linesExpected); if (!areLinesCorrect) { console.error('lines logged:', lines); console.error('lines expected:', linesExpected); return done(new Error('appends 2 lines to a file failed')); } (0, observable_fs_3.deleteFileObs)(logFile).subscribe(); done(); }); }, }); }); }); //# sourceMappingURL=observable-fs.spec.js.map