fix(core): update

This commit is contained in:
Philipp Kunz 2023-11-04 20:14:20 +01:00
parent ca592afec9
commit 291a11aa60
6 changed files with 90 additions and 4 deletions

View File

@ -0,0 +1,67 @@
import * as path from 'path';
import { expect, tap } from '@push.rocks/tapbundle';
import * as smartfile from '../ts/index.js'; // adjust the import path as needed
// Test assets path
const testAssetsPath = './test/testassets/';
// ---------------------------
// StreamFile tests
// ---------------------------
tap.test('StreamFile.fromPath should create a StreamFile from a file path', async () => {
const streamFile = await smartfile.StreamFile.fromPath(path.join(testAssetsPath, 'mytest.json'));
expect(streamFile).toBeInstanceOf(smartfile.StreamFile);
const contentBuffer = await streamFile.getContentAsBuffer();
expect(contentBuffer).toBeInstanceOf(Buffer);
});
tap.test('StreamFile.fromUrl should create a StreamFile from a URL', async () => {
const streamFile = await smartfile.StreamFile.fromUrl('http://example.com/somefile.json');
expect(streamFile).toBeInstanceOf(smartfile.StreamFile);
});
tap.test('StreamFile.fromBuffer should create a StreamFile from a Buffer', async () => {
const buffer = Buffer.from('Some content');
const streamFile = smartfile.StreamFile.fromBuffer(buffer, 'bufferfile.txt');
expect(streamFile).toBeInstanceOf(smartfile.StreamFile);
});
tap.test('StreamFile should write the stream to disk', async () => {
const streamFile = await smartfile.StreamFile.fromPath(path.join(testAssetsPath, 'mytest.json'));
await streamFile.writeToDisk(path.join(testAssetsPath, 'temp', 'mytest.json'));
// Verify the file was written
expect(
// We'll use the fileExists method from your smartfile library
// Replace with the actual method you use to check file existence
await smartfile.fs.fileExists(path.join(testAssetsPath, 'temp', 'mytest.json'))
).toBeTrue();
});
tap.test('StreamFile should write to a directory', async () => {
const streamFile = await smartfile.StreamFile.fromPath(path.join(testAssetsPath, 'mytest.json'));
await streamFile.writeToDir(path.join(testAssetsPath, 'temp'));
// Verify the file was written
expect(
await smartfile.fs.fileExists(path.join(testAssetsPath, 'temp', 'mytest.json'))
).toBeTrue();
});
tap.test('StreamFile should return content as a buffer', async () => {
const streamFile = await smartfile.StreamFile.fromPath(path.join(testAssetsPath, 'mytest.json'));
const contentBuffer = await streamFile.getContentAsBuffer();
expect(contentBuffer).toBeInstanceOf(Buffer);
// Further checks on the content can be added here if necessary
});
tap.test('StreamFile should return content as a string', async () => {
const streamFile = await smartfile.StreamFile.fromPath(path.join(testAssetsPath, 'mytest.json'));
const contentString = await streamFile.getContentAsString();
expect(typeof contentString).toBeTypeofString();
// Verify the content matches what's expected
// This assumes the file contains a JSON object with a key 'key1' with value 'this works'
expect(JSON.parse(contentString).key1).toEqual('this works');
});
// Start the test sequence
tap.start();

View File

@ -0,0 +1,8 @@
{
"key1": "this works",
"key2": "this works too",
"key3": {
"nestedkey1": "hello"
}
}

View File

@ -0,0 +1,8 @@
{
"key1": "this works",
"key2": "this works too",
"key3": {
"nestedkey1": "hello"
}
}

View File

@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@push.rocks/smartfile', name: '@push.rocks/smartfile',
version: '10.0.37', version: '10.0.38',
description: 'offers smart ways to work with files in nodejs' description: 'offers smart ways to work with files in nodejs'
} }

View File

@ -1,5 +1,6 @@
import * as plugins from './smartfile.plugins.js'; import * as plugins from './smartfile.plugins.js';
import * as fsStream from './fsstream.js'; import * as smartfileFs from './fs.js';
import * as smartfileFsStream from './fsstream.js';
import { Readable } from 'stream'; import { Readable } from 'stream';
type StreamSource = () => Promise<Readable>; type StreamSource = () => Promise<Readable>;
@ -21,7 +22,7 @@ export class StreamFile {
// STATIC // STATIC
public static async fromPath(filePath: string): Promise<StreamFile> { public static async fromPath(filePath: string): Promise<StreamFile> {
const streamSource = () => Promise.resolve(fsStream.createReadStream(filePath)); const streamSource = () => Promise.resolve(smartfileFsStream.createReadStream(filePath));
return new StreamFile(streamSource, filePath); return new StreamFile(streamSource, filePath);
} }
@ -55,7 +56,7 @@ export class StreamFile {
*/ */
public async writeToDisk(filePathArg: string): Promise<void> { public async writeToDisk(filePathArg: string): Promise<void> {
const readStream = await this.createReadStream(); const readStream = await this.createReadStream();
const writeStream = fsStream.createWriteStream(filePathArg); const writeStream = smartfileFsStream.createWriteStream(filePathArg);
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
readStream.pipe(writeStream); readStream.pipe(writeStream);
@ -67,6 +68,7 @@ export class StreamFile {
public async writeToDir(dirPathArg: string) { public async writeToDir(dirPathArg: string) {
const filePath = plugins.path.join(dirPathArg, this.relativeFilePath); const filePath = plugins.path.join(dirPathArg, this.relativeFilePath);
await smartfileFs.ensureDir(plugins.path.parse(filePath).dir);
return this.writeToDisk(filePath); return this.writeToDisk(filePath);
} }

View File

@ -5,6 +5,7 @@ import * as interpreterMod from './interpreter.js';
import * as memoryMod from './memory.js'; import * as memoryMod from './memory.js';
export * from './classes.smartfile.js'; export * from './classes.smartfile.js';
export * from './classes.streamfile.js';
export * from './classes.virtualdirectory.js'; export * from './classes.virtualdirectory.js';
export const fs = fsMod; export const fs = fsMod;