vibetunnel/ios/VibeTunnelTests/Models/FileEntryTests.swift
Peter Steinberger 9ee544b28b iOS: add tests
2025-06-23 14:58:11 +02:00

162 lines
6.1 KiB
Swift

import Foundation
import Testing
@testable import VibeTunnel
@Suite("FileEntry Tests", .tags(.models))
struct FileEntryTests {
@Test("File entry initialization")
func fileEntryInit() {
let fileEntry = FileEntry(
name: "test.txt",
path: "/home/user/test.txt",
type: .file,
size: 1024,
permissions: "rw-r--r--",
modifiedDate: Date(timeIntervalSince1970: 1700000000),
owner: "user",
group: "staff"
)
#expect(fileEntry.name == "test.txt")
#expect(fileEntry.path == "/home/user/test.txt")
#expect(fileEntry.type == .file)
#expect(fileEntry.size == 1024)
#expect(fileEntry.permissions == "rw-r--r--")
#expect(fileEntry.owner == "user")
#expect(fileEntry.group == "staff")
}
@Test("Directory entry initialization")
func directoryEntryInit() {
let dirEntry = FileEntry(
name: "Documents",
path: "/home/user/Documents",
type: .directory,
size: 4096,
permissions: "rwxr-xr-x",
modifiedDate: Date(),
owner: "user",
group: "staff"
)
#expect(dirEntry.type == .directory)
#expect(dirEntry.isDirectory == true)
#expect(dirEntry.isFile == false)
}
@Test("Symlink entry initialization")
func symlinkEntryInit() {
let linkEntry = FileEntry(
name: "link",
path: "/home/user/link",
type: .symlink,
size: 10,
permissions: "lrwxrwxrwx",
modifiedDate: Date()
)
#expect(linkEntry.type == .symlink)
#expect(linkEntry.isDirectory == false)
#expect(linkEntry.isFile == false)
}
@Test("File entry type helpers")
func fileTypeHelpers() {
let file = FileEntry(name: "file", path: "/file", type: .file, size: 100, permissions: "", modifiedDate: Date())
let dir = FileEntry(name: "dir", path: "/dir", type: .directory, size: 4096, permissions: "", modifiedDate: Date())
let link = FileEntry(name: "link", path: "/link", type: .symlink, size: 10, permissions: "", modifiedDate: Date())
#expect(file.isFile == true)
#expect(file.isDirectory == false)
#expect(dir.isFile == false)
#expect(dir.isDirectory == true)
#expect(link.isFile == false)
#expect(link.isDirectory == false)
}
@Test("File size formatting")
func fileSizeFormatting() {
#expect(FileEntry.formatSize(0) == "0 B")
#expect(FileEntry.formatSize(512) == "512 B")
#expect(FileEntry.formatSize(1024) == "1.0 KB")
#expect(FileEntry.formatSize(1536) == "1.5 KB")
#expect(FileEntry.formatSize(1048576) == "1.0 MB")
#expect(FileEntry.formatSize(1572864) == "1.5 MB")
#expect(FileEntry.formatSize(1073741824) == "1.0 GB")
#expect(FileEntry.formatSize(1610612736) == "1.5 GB")
}
@Test("Icon names for file types")
func iconNames() {
let file = FileEntry(name: "file", path: "/file", type: .file, size: 100, permissions: "", modifiedDate: Date())
let dir = FileEntry(name: "dir", path: "/dir", type: .directory, size: 4096, permissions: "", modifiedDate: Date())
let link = FileEntry(name: "link", path: "/link", type: .symlink, size: 10, permissions: "", modifiedDate: Date())
#expect(file.iconName == "doc")
#expect(dir.iconName == "folder")
#expect(link.iconName == "link")
}
@Test("Special file icons")
func specialFileIcons() {
let imageFile = FileEntry(name: "photo.jpg", path: "/photo.jpg", type: .file, size: 1000, permissions: "", modifiedDate: Date())
let textFile = FileEntry(name: "readme.txt", path: "/readme.txt", type: .file, size: 100, permissions: "", modifiedDate: Date())
let codeFile = FileEntry(name: "main.swift", path: "/main.swift", type: .file, size: 500, permissions: "", modifiedDate: Date())
#expect(imageFile.iconName == "photo")
#expect(textFile.iconName == "doc.text")
#expect(codeFile.iconName == "doc.text")
}
@Test("File entry identifiable")
func fileEntryIdentifiable() {
let file1 = FileEntry(name: "test1.txt", path: "/test1.txt", type: .file, size: 100, permissions: "", modifiedDate: Date())
let file2 = FileEntry(name: "test2.txt", path: "/test2.txt", type: .file, size: 100, permissions: "", modifiedDate: Date())
#expect(file1.id == "/test1.txt")
#expect(file2.id == "/test2.txt")
#expect(file1.id != file2.id)
}
@Test("File entry equatable")
func fileEntryEquatable() {
let date = Date()
let file1 = FileEntry(name: "test.txt", path: "/test.txt", type: .file, size: 100, permissions: "rw-r--r--", modifiedDate: date)
let file2 = FileEntry(name: "test.txt", path: "/test.txt", type: .file, size: 100, permissions: "rw-r--r--", modifiedDate: date)
let file3 = FileEntry(name: "other.txt", path: "/other.txt", type: .file, size: 100, permissions: "rw-r--r--", modifiedDate: date)
#expect(file1 == file2)
#expect(file1 != file3)
}
@Test("Codable encoding and decoding")
func codable() throws {
let original = FileEntry(
name: "test.txt",
path: "/home/user/test.txt",
type: .file,
size: 1024,
permissions: "rw-r--r--",
modifiedDate: Date(timeIntervalSince1970: 1700000000),
owner: "user",
group: "staff"
)
let encoder = JSONEncoder()
let data = try encoder.encode(original)
let decoder = JSONDecoder()
let decoded = try decoder.decode(FileEntry.self, from: data)
#expect(decoded.name == original.name)
#expect(decoded.path == original.path)
#expect(decoded.type == original.type)
#expect(decoded.size == original.size)
#expect(decoded.permissions == original.permissions)
#expect(decoded.owner == original.owner)
#expect(decoded.group == original.group)
}
}