Skip to content

Commit

Permalink
Merge pull request #3 from akdilsiz/development
Browse files Browse the repository at this point in the history
Development
  • Loading branch information
akdilsiz committed Sep 24, 2023
2 parents 8a69e08 + 647853b commit bdcc448
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 21 deletions.
9 changes: 8 additions & 1 deletion fileNode.js
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,10 @@ class FileNode {
}
}

if (deletedNode === null) {
return { fileNode: null, error: ErrFileNodeNotFound}
}

return { fileNode: deletedNode, error: null }
}
UpdateWithExtra(extra = new ExtraPayload()) {
Expand All @@ -200,7 +204,7 @@ class FileNode {

for (let i = 0; i < parentNode.Subs.length; i++) {
if (parentNode.Subs[i].Name === fromPath.Name()) {
return { fileNode: null, error: ErrFileExists }
return { fileNode: null, error: fromPath.IsDir() ? ErrFileExists : ErrFileNodeExists }
}
}

Expand Down Expand Up @@ -254,6 +258,9 @@ class FileNode {
node = this.Subs[i].SearchByUUID(uUID)
if (node !== null) {
wantedNode = node
break
} else {
wantedNode = null
}
}
if (wantedNode !== null) {
Expand Down
2 changes: 2 additions & 0 deletions fileNode_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,8 @@ describe('FileNode Tests', () => {
nodeUUID = tree.Subs[2].UUID,
node = tree.SearchByUUID(nodeUUID)

console.log(node)
console.log(tree.Subs)
unitJS.assert.equal(tree.Subs[2], node)
})

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "fs-shadow-js",
"version": "1.0.0",
"version": "1.0.1",
"description": "FS-Shadow Javascript",
"main": "index.js",
"type": "commonjs",
Expand Down
31 changes: 17 additions & 14 deletions watcherVirtual.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const { Path } = require('./path')
const VirtualPath = require('./virtualPath')
const { ExtraPayload, MetaData } = require('./types')
const { Event, EventTypes } = require('./event')
Expand All @@ -7,9 +6,9 @@ const EventTransaction = require('./eventTransaction')

class VirtualTree {
FileTree = new FileNode()
Path = new Path()
ParentPath = new Path()
constructor(fileTree = new FileNode(), path = new Path(), parentPath = new Path()) {
Path = new VirtualPath()
ParentPath = new VirtualPath()
constructor(fileTree = new FileNode(), path = new VirtualPath(), parentPath = new VirtualPath()) {
this.FileTree = fileTree
this.Path = path
this.ParentPath = parentPath
Expand All @@ -30,11 +29,11 @@ class VirtualTree {
node = response.fileNode
error = response.error
break
case EventTypes.Write:
response = this.Write(event.FromPath)
node = response.fileNode
error = response.error
break
// case EventTypes.Write:
// response = this.Write(event.FromPath)
// node = response.fileNode
// error = response.error
// break
case EventTypes.Create:
response = this.Create(event.FromPath, bExtra)
node = response.fileNode
Expand Down Expand Up @@ -62,6 +61,8 @@ class VirtualTree {
}
Restore(tree = new FileNode()) {
this.FileTree = tree

return this
}

SearchByPath(p = '') {
Expand All @@ -75,25 +76,27 @@ class VirtualTree {
console.log(JSON.stringify(this.FileTree.ToObject(), null, 2))
console.log(`----------------${label}----------------\n\n`)
}
Create(fromPath = new Path(), extra = new ExtraPayload()) {
Create(fromPath = new VirtualPath(), extra = new ExtraPayload()) {
const eventPath = fromPath.ExcludePath(this.ParentPath),
{ fileNode, error } = this.FileTree.Create(eventPath, fromPath)

if (error) {
return { fileNode: null, error: error }
}

fileNode.UpdateWithExtra(extra)

return { fileNode: fileNode, error: null }
}
Remove(fromPath = new Path()) {
Remove(fromPath = new VirtualPath()) {
const { fileNode, error } = this.FileTree.Remove(fromPath.ExcludePath(this.ParentPath))
if (error) {
return { fileNode: null, error: error }
}

return { fileNode: fileNode, error: null }
}
Rename(fromPath = new Path(), toPath = new Path()) {
Rename(fromPath = new VirtualPath(), toPath = new VirtualPath()) {
const { fileNode, error } = this.FileTree.Rename(fromPath.ExcludePath(this.ParentPath),
toPath.ExcludePath(this.ParentPath))

Expand All @@ -103,7 +106,7 @@ class VirtualTree {

return { fileNode: fileNode, error: null }
}
Move(fromPath = new Path(), toPath = new Path()) {
Move(fromPath = new VirtualPath(), toPath = new VirtualPath()) {
const { fileNode, error } = this.FileTree.Move(fromPath.ExcludePath(this.ParentPath),
toPath.ExcludePath(this.ParentPath))

Expand All @@ -113,7 +116,7 @@ class VirtualTree {

return { fileNode: fileNode, error: null }
}
Write(fromPath = new Path()) {
Write(fromPath = new VirtualPath()) {
return { fileNode: null, error: null }
}

Expand Down
80 changes: 75 additions & 5 deletions watcherVirtual_test.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const unitJS = require('unit.js')
const { v4 } = require('uuid')
const { ErrFileNodeExists, ErrFileNodeNotFound} = require('./errors')
const VirtualPath = require('./virtualPath')
const { ExtraPayload, MetaData } = require('./types')
const { Watcher } = require('./watcher')
Expand All @@ -8,6 +9,21 @@ const EventTransaction = require('./eventTransaction')
const FileNode = require('./fileNode')
const { VirtualTree, NewVirtualPathWatcher } = require('./watcherVirtual')

const makeDummyTree = () => {
const rootUUID = v4()

return new FileNode(
[
new FileNode([], 'a', v4(), rootUUID),
new FileNode([], 'b', v4(), rootUUID),
new FileNode([], 'c', v4(), rootUUID),
new FileNode([], 'd', v4(), rootUUID)
],
'alphabet',
rootUUID
)
}

describe('VirtualTree Tests', () => {
it('with valid params', () => {
const path = new VirtualPath('vPath', true),
Expand All @@ -20,7 +36,7 @@ describe('VirtualTree Tests', () => {
unitJS.value(path.ParentPath()).is(virtualTree.ParentPath)
})

it('.Handler() with Create', () => {
it('.Handler() with events', () => {
const path = new VirtualPath('vPath', true),
rootUUID = v4(),
rootFolder = '/tmp',
Expand All @@ -34,16 +50,20 @@ describe('VirtualTree Tests', () => {
eventFilePath = filePath.ExcludePath(new VirtualPath(rootFolder, true)),
renameFilePath = new VirtualPath(`${testFolder}/test-2.txt`, false),
renameEventFilePath = renameFilePath.ExcludePath(new VirtualPath(rootFolder, true)),
moveFolder = `${testFolder}/moveFolder`,
moveFolderPath = new VirtualPath(moveFolder, true),
moveFolderEventPath = moveFolderPath.ExcludePath(new VirtualPath(rootFolder, true)),
movedFilePath = new VirtualPath(`${moveFolder}/test-2.txt`, true),
root = new FileNode([], rootPath.Name(), rootUUID, '', new MetaData(true)),
virtualTree = new VirtualTree(root, path, path.ParentPath())

const { eventTransaction, error } = virtualTree.Handler(new Event(EventTypes.Create, eventFolderPath, folderPath))
const { eventTransaction, error } = virtualTree.Handler(new Event(EventTypes.Create, eventFolderPath, folderPath), new ExtraPayload(v4()))

unitJS.value(error).isNull()
unitJS.value(eventTransaction).isInstanceOf(EventTransaction)
unitJS.assert.equal(1, virtualTree.FileTree.Subs.length)

const { eventTransaction: eventTransaction2, error: error2 } = virtualTree.Handler(new Event(EventTypes.Create, eventFilePath, filePath))
const { eventTransaction: eventTransaction2, error: error2 } = virtualTree.Handler(new Event(EventTypes.Create, eventFilePath, filePath), new ExtraPayload(v4()))

unitJS.value(error2).isNull()
unitJS.value(eventTransaction2).isInstanceOf(EventTransaction)
Expand All @@ -57,14 +77,64 @@ describe('VirtualTree Tests', () => {
unitJS.assert.equal('test-2.txt', searchedNode.Name)
unitJS.assert.equal(rootUUID, searchedNode.ParentUUID)

const { eventTransaction: eventTransaction4, error: error4 } = virtualTree.Handler(new Event(EventTypes.Remove, eventFolderPath))
const { eventTransaction: eventTransaction4, error: error4 } = virtualTree.Handler(new Event(EventTypes.Create, moveFolderEventPath, moveFolderPath), new ExtraPayload(v4()))

unitJS.value(error4).isNull()
unitJS.value(eventTransaction4).isInstanceOf(EventTransaction)
unitJS.value(virtualTree.SearchByPath(eventFolderPath.String())).isNull()
unitJS.assert.equal(3, virtualTree.FileTree.Subs.length)

const { eventTransaction: eventTransaction5, error: error5 } = virtualTree.Handler(new Event(EventTypes.Move, renameEventFilePath, moveFolderEventPath))

unitJS.value(error5).isNull()
unitJS.value(eventTransaction5).isInstanceOf(EventTransaction)
const searched = virtualTree.SearchByPath(movedFilePath.ExcludePath(new VirtualPath(rootFolder, true)).String())
unitJS.assert.equal(eventTransaction4.UUID, searched.ParentUUID)
unitJS.value(virtualTree.SearchByPath(renameEventFilePath.String())).isNull()

const { eventTransaction: eventTransaction6, error: error6 } = virtualTree.Handler(new Event(EventTypes.Remove, eventFolderPath))

unitJS.value(error6).isNull()
unitJS.value(eventTransaction6).isInstanceOf(EventTransaction)
unitJS.value(virtualTree.SearchByUUID(eventTransaction6.UUID)).isNull()

const { eventTransaction: eventTransaction7, error: error7 } = virtualTree.Handler(new Event(EventTypes.Write, movedFilePath))

unitJS.value(error7).isInstanceOf(Error)
unitJS.value(eventTransaction7).isNull()

const { eventTransaction: eventTransaction8, error: error8 } = virtualTree.Handler(new Event(EventTypes.Create, moveFolderEventPath, moveFolderPath), new ExtraPayload(v4()))

unitJS.value(error8).is(ErrFileNodeExists)
unitJS.value(eventTransaction8).isNull()

const { eventTransaction: eventTransaction9, error: error9 } = virtualTree.Handler(new Event(EventTypes.Remove, eventFolderPath))

unitJS.value(error9).is(ErrFileNodeNotFound)
unitJS.value(eventTransaction9).isNull()

const { eventTransaction: eventTransaction10, error: error10 } = virtualTree.Handler(new Event(EventTypes.Rename, eventFilePath, renameEventFilePath))

unitJS.value(error10).is(ErrFileNodeNotFound)
unitJS.value(eventTransaction10).isNull()

const { eventTransaction: eventTransaction11, error: error11 } = virtualTree.Handler(new Event(EventTypes.Move, renameEventFilePath, moveFolderEventPath))

unitJS.value(error11).is(ErrFileNodeNotFound)
unitJS.value(eventTransaction11).isNull()

const { fileNode: fileNode12, error: error12 } = virtualTree.Write(movedFilePath)
unitJS.value(error12).isNull()
unitJS.value(fileNode12).isNull()

virtualTree.PrintTree('FS Shadow')
})

it('.Restore()', () => {
const dummyTree = makeDummyTree(),
virtualTree = new VirtualTree(new FileNode(), new VirtualPath('/tmp')).Restore(dummyTree)

unitJS.assert.equal(dummyTree, virtualTree.FileTree)
})
})

describe('NewVirtualWatcher Tests', () => {
Expand Down

0 comments on commit bdcc448

Please sign in to comment.