85 lines
3.8 KiB
Swift
85 lines
3.8 KiB
Swift
//
|
|
// CameraDownloadStorageTests.swift
|
|
// suixinkanTests
|
|
//
|
|
|
|
import XCTest
|
|
@testable import suixinkan
|
|
|
|
/// CameraDownloadStorage 相对路径持久化测试。
|
|
final class CameraDownloadStorageTests: XCTestCase {
|
|
/// 测试 scoped 原图相对路径前缀。
|
|
func testRelativePathUsesScopedOriginalsPrefix() {
|
|
let scope = CameraDownloadStorage.Scope(accountKey: "user_101", albumID: 6603)
|
|
defer { CameraDownloadStorage.removeScopeDirectory(for: scope) }
|
|
|
|
let fileURL = CameraDownloadStorage.originalsDirectory(for: scope).appendingPathComponent("1730_test.JPG")
|
|
XCTAssertEqual(
|
|
CameraDownloadStorage.relativePath(for: fileURL),
|
|
"CameraDownloads/user_101/6603/originals/1730_test.JPG"
|
|
)
|
|
}
|
|
|
|
/// 测试相对路径解析。
|
|
func testResolveLocalURLFromRelativePath() {
|
|
let stored = "CameraDownloads/user_101/6603/originals/1730_test.JPG"
|
|
let resolved = CameraDownloadStorage.resolveLocalURL(from: stored)
|
|
let expected = CameraDownloadStorage.documentsDirectory.appendingPathComponent(stored)
|
|
XCTAssertEqual(resolved, expected)
|
|
}
|
|
|
|
/// 测试账号或相册不同不会生成相同目录。
|
|
func testScopedDirectoriesDoNotCollideAcrossAccountOrAlbum() {
|
|
let accountScope = CameraDownloadStorage.Scope(accountKey: "user_101", albumID: 6603)
|
|
let otherAccountScope = CameraDownloadStorage.Scope(accountKey: "user_102", albumID: 6603)
|
|
let otherAlbumScope = CameraDownloadStorage.Scope(accountKey: "user_101", albumID: 6604)
|
|
defer {
|
|
CameraDownloadStorage.removeScopeDirectory(for: accountScope)
|
|
CameraDownloadStorage.removeScopeDirectory(for: otherAccountScope)
|
|
CameraDownloadStorage.removeScopeDirectory(for: otherAlbumScope)
|
|
}
|
|
|
|
XCTAssertNotEqual(
|
|
CameraDownloadStorage.originalsDirectory(for: accountScope).path,
|
|
CameraDownloadStorage.originalsDirectory(for: otherAccountScope).path
|
|
)
|
|
XCTAssertNotEqual(
|
|
CameraDownloadStorage.originalsDirectory(for: accountScope).path,
|
|
CameraDownloadStorage.originalsDirectory(for: otherAlbumScope).path
|
|
)
|
|
}
|
|
|
|
/// 测试 scoped 目录清理只影响目标相册。
|
|
func testRemoveScopeDirectoryOnlyDeletesTargetScope() throws {
|
|
let scope = CameraDownloadStorage.Scope(accountKey: "user_101", albumID: 6603)
|
|
let otherScope = CameraDownloadStorage.Scope(accountKey: "user_101", albumID: 6604)
|
|
defer {
|
|
CameraDownloadStorage.removeScopeDirectory(for: scope)
|
|
CameraDownloadStorage.removeScopeDirectory(for: otherScope)
|
|
}
|
|
|
|
let fileURL = CameraDownloadStorage.uniqueLocalURL(for: "target.jpg", scope: scope)
|
|
let otherFileURL = CameraDownloadStorage.uniqueLocalURL(for: "other.jpg", scope: otherScope)
|
|
try Data("target".utf8).write(to: fileURL)
|
|
try Data("other".utf8).write(to: otherFileURL)
|
|
|
|
CameraDownloadStorage.removeScopeDirectory(for: scope)
|
|
|
|
XCTAssertFalse(FileManager.default.fileExists(atPath: fileURL.path))
|
|
XCTAssertTrue(FileManager.default.fileExists(atPath: otherFileURL.path))
|
|
}
|
|
|
|
/// 测试预览 URL 字符串生成。
|
|
func testPreviewURLStringFromRelativePath() throws {
|
|
let scope = CameraDownloadStorage.Scope(accountKey: "user_101", albumID: 6603)
|
|
let fileURL = CameraDownloadStorage.uniqueLocalURL(for: "preview.jpg", scope: scope)
|
|
try Data("jpeg".utf8).write(to: fileURL)
|
|
defer { CameraDownloadStorage.removeScopeDirectory(for: scope) }
|
|
|
|
let stored = CameraDownloadStorage.relativePath(for: fileURL)
|
|
let preview = CameraDownloadStorage.previewURLString(from: stored)
|
|
XCTAssertFalse(preview.isEmpty)
|
|
XCTAssertTrue(preview.hasPrefix("file://"))
|
|
}
|
|
}
|