mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-08 03:20:12 +08:00
Feat filegraph (#194)
* feat: update filegraph on touch command * feat: update filegraph on mkdir * feat: add different parsing opts for each command * refactor: replace axios with fetch. put handleCommand to a new file * feat: add config for mounting cli in dev stage * refactor: clean up unused validators * feat: add command handler for copy files. reuse resolvePath function * feat: add rm handler, support specific files deletion. Glob not supported yet * feat: handle discover cases that the folder is actually empty * feat: handle discover empty folder better and support rmdir * feat: handle mv command * refactor: remove unused console logs
This commit is contained in:
1 parent
a732c1d119
commit
f0a09ac4d9
19 files changed
+326
-119
No files matched your search
@@ -28,12 +28,44 @@ describe('FileGraph', () => {
|
||||
type: 'directory',
|
||||
discovered: true,
|
||||
},
|
||||
{
|
||||
path: '/home/user/folder2/file2.txt',
|
||||
type: 'file',
|
||||
discovered: true,
|
||||
},
|
||||
]
|
||||
|
||||
fileGraph.add(filesToAdd)
|
||||
|
||||
expect(fileGraph.children.length).toBe(1)
|
||||
expect(fileGraph.children[0].children[0].children.length).toBe(2)
|
||||
expect(fileGraph.children[0].children[0].children.length).toBe(3)
|
||||
})
|
||||
|
||||
test('ignore files that already exist', () => {
|
||||
const fileGraph = new FileGraph(root)
|
||||
|
||||
const filesToAdd: FileObject[] = [
|
||||
{
|
||||
path: '/home/user/folder1',
|
||||
type: 'directory',
|
||||
discovered: true,
|
||||
},
|
||||
{
|
||||
path: '/home/user/folder1/file1.txt',
|
||||
type: 'file',
|
||||
discovered: true,
|
||||
},
|
||||
]
|
||||
|
||||
fileGraph.add(filesToAdd)
|
||||
|
||||
expect(fileGraph.children.length).toBe(1)
|
||||
expect(fileGraph.children[0].children[0].children.length).toBe(1)
|
||||
|
||||
fileGraph.add([filesToAdd[1]])
|
||||
|
||||
expect(fileGraph.children.length).toBe(1)
|
||||
expect(fileGraph.children[0].children[0].children.length).toBe(1)
|
||||
})
|
||||
|
||||
test('remove files from graph', () => {
|
||||
@@ -175,4 +207,36 @@ describe('FileGraph', () => {
|
||||
3
|
||||
)
|
||||
})
|
||||
|
||||
test('discover a empty directory which children just being deleted', () => {
|
||||
const fileGraph = new FileGraph(root)
|
||||
const discoverFiles = [
|
||||
{
|
||||
path: '/home/user/folder1',
|
||||
type: 'directory',
|
||||
discovered: true,
|
||||
},
|
||||
{
|
||||
path: '/home/user/folder1/file1.txt',
|
||||
type: 'file',
|
||||
discovered: true,
|
||||
},
|
||||
]
|
||||
|
||||
fileGraph.add(discoverFiles as FileObject[])
|
||||
expect(fileGraph.include('/home/user/folder1/file1.txt', 'file')).toBe(true)
|
||||
|
||||
fileGraph.discover([
|
||||
{
|
||||
path: '/home/user/folder1',
|
||||
type: 'directory',
|
||||
discovered: true,
|
||||
empty: true,
|
||||
},
|
||||
])
|
||||
|
||||
expect(fileGraph.include('/home/user/folder1/file1.txt', 'file')).toBe(
|
||||
false
|
||||
)
|
||||
})
|
||||
})
|
||||
@@ -1,5 +1,5 @@
|
||||
import { describe, test, expect } from '@jest/globals'
|
||||
import { DuplicateItemError, ParentNotExistsError } from '../errors.js'
|
||||
import { ParentNotExistsError } from '../errors.js'
|
||||
import FileNode, { IFileNode } from '../fileNode.js'
|
||||
import { FileObject } from '../file.js'
|
||||
|
||||
@@ -47,11 +47,11 @@ describe('FileNode', () => {
|
||||
})
|
||||
})
|
||||
|
||||
test('should throw error when adding duplicate item', () => {
|
||||
test('should override discovered when adding duplicate item', () => {
|
||||
const child: FileObject = {
|
||||
path: '/home/rudeus/test',
|
||||
type: 'directory',
|
||||
discovered: true,
|
||||
discovered: false,
|
||||
}
|
||||
|
||||
// Adding the child for the first time
|
||||
@@ -60,9 +60,10 @@ describe('FileNode', () => {
|
||||
expect(rootNode.children.length).toBe(1)
|
||||
|
||||
// Trying to add the same child again should throw an error
|
||||
expect(() => {
|
||||
rootNode.addChild(child)
|
||||
}).toThrow(DuplicateItemError)
|
||||
child.discovered = true
|
||||
rootNode.addChild(child)
|
||||
|
||||
expect(rootNode.children[0].discovered).toBe(true)
|
||||
})
|
||||
|
||||
test('should throw error when parent does not exist', () => {
|
||||
|
||||
Reference in new issue
Block a user