Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions __tests__/files/file.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import { File } from '../../lib/files/file'
import { FileType } from '../../lib/files/fileType'
import { Permission } from '../../lib/permissions'

describe('File creation', () => {
test('Valid dav file', () => {
const file = new File({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma'
})

expect(file).toBeInstanceOf(File)
expect(file.type).toBe(FileType.File)

// various data
expect(file.mime).toBe('image/jpeg')
expect(file.owner).toBe('emma')
expect(file.size).toBeUndefined()
expect(file.attributes).toStrictEqual({})

// path checks
expect(file.basename).toBe('picture.jpg')
expect(file.extension).toBe('.jpg')
expect(file.dirname).toBe('https://cloud.domain.com/remote.php/dav/files/emma/Photos')
expect(file.root).toBe('/files/emma/Photos')
expect(file.isDavRessource).toBe(true)
expect(file.permissions).toBe(Permission.READ)
})

test('Valid remote file', () => {
const file = new File({
source: 'https://domain.com/Photos/picture.jpg',
mime: 'image/jpeg',
owner: null
})

expect(file).toBeInstanceOf(File)
expect(file.type).toBe(FileType.File)

// various data
expect(file.mime).toBe('image/jpeg')
expect(file.owner).toBeNull()
expect(file.size).toBeUndefined()
expect(file.attributes).toStrictEqual({})

// path checks
expect(file.basename).toBe('picture.jpg')
expect(file.extension).toBe('.jpg')
expect(file.dirname).toBe('https://domain.com/Photos')
expect(file.root).toBeNull()
expect(file.isDavRessource).toBe(false)
expect(file.permissions).toBe(Permission.READ)
})
})

describe('File data change', () => {
test('Rename a file', () => {
const file = new File({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma'
})

expect(file.basename).toBe('picture.jpg')
expect(file.dirname).toBe('https://cloud.domain.com/remote.php/dav/files/emma/Photos')
expect(file.root).toBe('/files/emma/Photos')

file.rename('picture-old.jpg')

expect(file.basename).toBe('picture-old.jpg')
expect(file.dirname).toBe('https://cloud.domain.com/remote.php/dav/files/emma/Photos')
expect(file.source).toBe('https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture-old.jpg')
expect(file.root).toBe('/files/emma/Photos')
})

test('Changing source', () => {
const file = new File({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma'
})

expect(file.basename).toBe('picture.jpg')
expect(file.dirname).toBe('https://cloud.domain.com/remote.php/dav/files/emma/Photos')
expect(file.root).toBe('/files/emma/Photos')

file.move('https://cloud.domain.com/remote.php/dav/files/emma/Pictures/picture-old.jpg')

expect(file.basename).toBe('picture-old.jpg')
expect(file.dirname).toBe('https://cloud.domain.com/remote.php/dav/files/emma/Pictures')
expect(file.source).toBe('https://cloud.domain.com/remote.php/dav/files/emma/Pictures/picture-old.jpg')
expect(file.root).toBe('/files/emma/Pictures')
})
})
91 changes: 91 additions & 0 deletions __tests__/files/folder.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import { Folder } from '../../lib/files/folder'
import { FileType } from '../../lib/files/fileType'
import { Permission } from '../../lib/permissions'

describe('File creation', () => {
test('Valid dav folder', () => {
const folder = new Folder({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/',
owner: 'emma'
})

expect(folder).toBeInstanceOf(Folder)
expect(folder.type).toBe(FileType.Folder)

// various data
expect(folder.mime).toBe('httpd/unix-directory')
expect(folder.owner).toBe('emma')
expect(folder.size).toBeUndefined()
expect(folder.attributes).toStrictEqual({})

// path checks
expect(folder.basename).toBe('Photos')
expect(folder.extension).toBeNull()
expect(folder.dirname).toBe('https://cloud.domain.com/remote.php/dav/files/emma')
expect(folder.root).toBe('/files/emma')
expect(folder.isDavRessource).toBe(true)
expect(folder.permissions).toBe(Permission.READ)
})

test('Valid remote folder', () => {
const folder = new Folder({
source: 'https://domain.com/Photos/',
owner: null
})

expect(folder).toBeInstanceOf(Folder)
expect(folder.type).toBe(FileType.Folder)

// various data
expect(folder.mime).toBe('httpd/unix-directory')
expect(folder.owner).toBeNull()
expect(folder.size).toBeUndefined()
expect(folder.attributes).toStrictEqual({})

// path checks
expect(folder.basename).toBe('Photos')
expect(folder.extension).toBeNull()
expect(folder.dirname).toBe('https://domain.com')
expect(folder.root).toBeNull()
expect(folder.isDavRessource).toBe(false)
expect(folder.permissions).toBe(Permission.READ)
})
})

describe('Folder data change', () => {
test('Rename a folder', () => {
const folder = new Folder({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos',
owner: 'emma'
})

expect(folder.basename).toBe('Photos')
expect(folder.dirname).toBe('https://cloud.domain.com/remote.php/dav/files/emma')
expect(folder.root).toBe('/files/emma')

folder.rename('Pictures')

expect(folder.basename).toBe('Pictures')
expect(folder.dirname).toBe('https://cloud.domain.com/remote.php/dav/files/emma')
expect(folder.source).toBe('https://cloud.domain.com/remote.php/dav/files/emma/Pictures')
expect(folder.root).toBe('/files/emma')
})

test('Changing source', () => {
const folder = new Folder({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/',
owner: 'emma'
})

expect(folder.basename).toBe('Photos')
expect(folder.dirname).toBe('https://cloud.domain.com/remote.php/dav/files/emma')
expect(folder.root).toBe('/files/emma')

folder.move('https://cloud.domain.com/remote.php/dav/files/emma/Pictures/')

expect(folder.basename).toBe('Pictures')
expect(folder.dirname).toBe('https://cloud.domain.com/remote.php/dav/files/emma')
expect(folder.source).toBe('https://cloud.domain.com/remote.php/dav/files/emma/Pictures')
expect(folder.root).toBe('/files/emma')
})
})
173 changes: 173 additions & 0 deletions __tests__/files/node.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
import { File } from '../../lib/files/file'
import { Folder } from '../../lib/files/folder'
import NodeData, { Attribute } from '../../lib/files/nodeData'

describe('Node testing', () => {
test('Root null fallback', () => {
const file = new File({
source: 'https://cloud.domain.com/remote.php/dav/picture.jpg',
mime: 'image/jpeg',
owner: 'emma'
})
expect(file.root).toBeNull()
})

test('Remove source ending slash', () => {
const file = new Folder({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/',
owner: 'emma'
})
expect(file.source).toBe('https://cloud.domain.com/remote.php/dav/files/emma/Photos')
})

test('Invalid rename', () => {
const file = new Folder({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/',
owner: 'emma'
})
expect(() => file.rename('new/folder')).toThrowError('Invalid basename')
})
})

describe('Sanity checks', () => {
test('Invalid id', () => {
expect(() => new File({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma',
id: '1234' as unknown as number,
})).toThrowError('Invalid id type of value')

expect(() => new File({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma',
id: -1234,
})).toThrowError('Invalid id type of value')
})

test('Invalid source', () => {
expect(() => new File({} as unknown as NodeData)).toThrowError('Missing mandatory source')
expect(() => new File({
source: 'cloud.domain.com/remote.php/dav/Photos',
mime: 'image/jpeg',
owner: 'emma'
})).toThrowError('Invalid source')
expect(() => new File({
source: '/remote.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma'
})).toThrowError('Invalid source')

})

test('Invalid mtime', () => {
expect(() => new File({
source: 'https://cloud.domain.com/remote.php/dav/Photos',
mime: 'image',
owner: 'emma',
mtime: 'invalid' as unknown as Date
})).toThrowError('Invalid mtime type')
})


test('Invalid crtime', () => {
expect(() => new File({
source: 'https://cloud.domain.com/remote.php/dav/Photos',
mime: 'image',
owner: 'emma',
crtime: 'invalid' as unknown as Date
})).toThrowError('Invalid crtime type')
})

test('Invalid mime', () => {
expect(() => new File({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg',
mime: 'image',
owner: 'emma'
})).toThrowError('Missing or invalid mandatory mime')
})

test('Invalid attributes', () => {
expect(() => new File({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma',
attributes: 'test' as unknown as Attribute,
})).toThrowError('Invalid attributes format')
})

test('Invalid permissions', () => {
expect(() => new File({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma',
permissions: 324,
})).toThrowError('Invalid permissions')
})

test('Invalid size', () => {
expect(() => new File({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma',
size: 'test' as unknown as number,
})).toThrowError('Invalid size type')
})

test('Invalid owner', () => {
expect(() => new File({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: true as unknown as string,
})).toThrowError('Invalid owner')
})
})

describe('Dav service detection', () => {
test('Known dav services', () => {
const file1 = new File({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma',
})
expect(file1.isDavRessource).toBe(true)

const file2 = new File({
source: 'https://cloud.domain.com/remote.php/webdav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma',
})
expect(file2.isDavRessource).toBe(true)

const file3 = new File({
source: 'https://cloud.domain.com/public.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma',
})
expect(file3.isDavRessource).toBe(true)

const file4 = new File({
source: 'https://cloud.domain.com/public.php/webdav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma',
})
expect(file4.isDavRessource).toBe(true)
})

test('Custom dav service', () => {
const file1 = new File({
source: 'https://cloud.domain.com/test.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma',
}, /test\.php\/dav/)
expect(file1.isDavRessource).toBe(true)

const file2 = new File({
source: 'https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg',
mime: 'image/jpeg',
owner: 'emma',
}, /test\.php\/dav/)
expect(file2.isDavRessource).toBe(false)
})
})
2 changes: 0 additions & 2 deletions __tests__/humanFileSize.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ declare global {
}
}

jest.mock

describe('humanFileSize', () => {
describe('formatFileSize', () => {
it('renders file sizes with the correct unit', function() {
Expand Down
Loading