feat: release OpsXShell 2.1.0 native Tauri edition

This commit is contained in:
Logan.Li committed 2026-07-30 23:32:51 +08:00
1 parent e9a0d21758
commit a3dba0c6ed
311 files changed
+31748 -14897

No files matched your search

+73 -1
View File
@@ -3,7 +3,16 @@
*/
import { describe, it, expect } from 'vitest'
import { formatSize, formatSpeed, formatDate, getFileExtension, sortFiles } from '../../../src/components/sftp/utils'
import {
formatSize,
formatSpeed,
formatDate,
getFileExtension,
sortFiles,
filterFilesByName,
isHiddenFileName,
filterHiddenFiles,
} from '../../../src/components/sftp/utils'
import type { FileItem } from '../../../src/components/sftp/types'
describe('SFTP Utils', () => {
@@ -111,4 +120,67 @@ describe('SFTP Utils', () => {
expect(mockFiles).toEqual(original)
})
})
describe('filterFilesByName', () => {
const mockFiles: FileItem[] = [
{ name: 'test.txt', path: '/test.txt', type: 'file', size: 100, modified: 1000, permissions: '-rw-r--r--' },
{ name: 'docs', path: '/docs', type: 'directory', size: 0, modified: 2000, permissions: 'drwxr-xr-x' },
{ name: 'image.png', path: '/image.png', type: 'file', size: 500, modified: 500, permissions: '-rw-r--r--' },
{ name: 'backup.zip', path: '/backup.zip', type: 'file', size: 1000, modified: 1500, permissions: '-rw-r--r--' },
{ name: 'Test_Report.PDF', path: '/Test_Report.PDF', type: 'file', size: 200, modified: 1200, permissions: '-rw-r--r--' },
]
it('空查询应返回原列表引用', () => {
expect(filterFilesByName(mockFiles, '')).toBe(mockFiles)
expect(filterFilesByName(mockFiles, ' ')).toBe(mockFiles)
})
it('应按子串匹配文件名', () => {
const result = filterFilesByName(mockFiles, 'image')
expect(result.map((f) => f.name)).toEqual(['image.png'])
})
it('应不区分大小写', () => {
const result = filterFilesByName(mockFiles, 'test')
expect(result.map((f) => f.name).sort()).toEqual(['Test_Report.PDF', 'test.txt'])
})
it('可匹配扩展名', () => {
const result = filterFilesByName(mockFiles, '.png')
expect(result).toHaveLength(1)
expect(result[0].name).toBe('image.png')
})
it('无匹配时返回空数组', () => {
expect(filterFilesByName(mockFiles, 'xyz-not-exist')).toEqual([])
})
})
describe('isHiddenFileName / filterHiddenFiles', () => {
const mockFiles: FileItem[] = [
{ name: 'readme.md', path: '/readme.md', type: 'file', size: 10, modified: 1, permissions: '-rw-r--r--' },
{ name: '.gitignore', path: '/.gitignore', type: 'file', size: 20, modified: 2, permissions: '-rw-r--r--' },
{ name: '.config', path: '/.config', type: 'directory', size: 0, modified: 3, permissions: 'drwxr-xr-x' },
{ name: '.', path: '/.', type: 'directory', size: 0, modified: 4, permissions: 'drwxr-xr-x' },
{ name: '..', path: '/..', type: 'directory', size: 0, modified: 5, permissions: 'drwxr-xr-x' },
{ name: 'src', path: '/src', type: 'directory', size: 0, modified: 6, permissions: 'drwxr-xr-x' },
]
it('应识别点文件与 . / ..', () => {
expect(isHiddenFileName('.gitignore')).toBe(true)
expect(isHiddenFileName('.')).toBe(true)
expect(isHiddenFileName('..')).toBe(true)
expect(isHiddenFileName('readme.md')).toBe(false)
})
it('默认应隐藏点文件,并始终排除 . / ..', () => {
const result = filterHiddenFiles(mockFiles, false)
expect(result.map((f) => f.name).sort()).toEqual(['readme.md', 'src'])
})
it('显示隐藏文件时仍排除 . / ..', () => {
const result = filterHiddenFiles(mockFiles, true)
expect(result.map((f) => f.name).sort()).toEqual(['.config', '.gitignore', 'readme.md', 'src'])
})
})
})