UNPKG

als-path-tree

Version:

A Node.js library for managing a virtual file system structure, offering functionalities for file and directory operations with a shared storage system.

90 lines (70 loc) 3.26 kB
const { describe, it, beforeEach } = require('node:test'); const assert = require('node:assert'); const Directory = require('../lib/directory'); const File = require('../lib/file'); describe('Directory', () => { let rootDir; beforeEach(() => { rootDir = new Directory('root'); }); it('adds a directory to the root', () => { const newDir = rootDir.addDir('subdir'); assert.strictEqual(rootDir.subdirectories['subdir'], newDir); }); it('adds a file to a directory', () => { const file = rootDir.addFile('subdir/file.txt', { size: 512 }, 'test content'); assert.strictEqual(rootDir.getItem('subdir/file.txt'), file); }); it('removes an empty directory', () => { const subdir = rootDir.addDir('subdir'); subdir.removeIfEmpty(); assert.strictEqual(rootDir.subdirectories['subdir'], undefined); }); it('deletes a directory and its contents', () => { const subdir = rootDir.addDir('subdir'); rootDir.addFile('subdir/file.txt', { size: 512 }, 'test content'); subdir.delete(); assert.strictEqual(rootDir.subdirectories['subdir'], undefined); assert.strictEqual(rootDir.getItem('subdir/file.txt'), null); }); it('copies a directory and its contents to another location', () => { rootDir.addFile('subdir/file.txt', { size: 512 }, 'test content'); rootDir.addDir('subdir/nested'); assert.ok(rootDir.getItem('subdir/nested')) assert.ok(rootDir.getItem('subdir/file.txt')) rootDir.subdirectories['subdir'].copyTo('./copyDir'); assert.ok(rootDir.getItem('./copyDir')) assert.ok(rootDir.getItem('./copyDir/nested')) assert.ok(rootDir.getItem('./copyDir/file.txt')) }); it('moves a directory to another location', () => { const subdir = rootDir.addDir('subdir'); const file = rootDir.addFile('subdir/file.txt', { size: 512 }, 'test content'); subdir.moveTo('movedDir'); assert.strictEqual(rootDir.getItem('subdir'), null); assert.notStrictEqual(rootDir.getItem('movedDir/file.txt'), file); }); }); describe('Directory Path Handling', () => { let rootDir; beforeEach(() => { rootDir = new Directory('root'); }); it('handles relative paths correctly', () => { const file = rootDir.addFile('./subdir/../file.txt', {}, 'content'); assert.strictEqual(file.content, 'content'); assert.strictEqual(rootDir.getItem('./file.txt'), file); }); it.only('throws an error for invalid paths', () => { assert.throws(() => rootDir.addFile(null, {}, 'content'), Error); assert.throws(() => rootDir.addFile(undefined, {}, 'content'), Error); const file = rootDir.addFile('////file.txt', {}, 'content') assert(file.path === '/root/file.txt') }); it('handles nested directories and files', () => { rootDir.addFile('dir1/dir2/file.txt', {}, 'content'); const nestedFile = rootDir.getItem('dir1/dir2/file.txt'); assert(nestedFile); assert.strictEqual(nestedFile.content, 'content'); }); });