feat: 更新素材管理和举报风险地图
This commit is contained in:
91
suixinkanTests/SettingViewModelTests.swift
Normal file
91
suixinkanTests/SettingViewModelTests.swift
Normal file
@ -0,0 +1,91 @@
|
||||
//
|
||||
// SettingViewModelTests.swift
|
||||
// suixinkanTests
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import suixinkan
|
||||
|
||||
/// 设置中心 ViewModel 测试。
|
||||
final class SettingViewModelTests: XCTestCase {
|
||||
func testAppVersionUsesClientInfoFormatting() {
|
||||
let viewModel = SettingViewModel(
|
||||
infoDictionary: [
|
||||
"CFBundleShortVersionString": "1.2",
|
||||
"CFBundleVersion": "9",
|
||||
],
|
||||
environment: .testing
|
||||
)
|
||||
|
||||
XCTAssertEqual(viewModel.appVersion, "1.2.9")
|
||||
}
|
||||
|
||||
func testAppDownloadURLUsesEnvironmentBaseURL() {
|
||||
let viewModel = SettingViewModel(infoDictionary: [:], environment: .testing)
|
||||
|
||||
XCTAssertEqual(viewModel.appDownloadURL.absoluteString, "https://api-test.zhifly.cn/h5/app/download")
|
||||
}
|
||||
|
||||
func testVersionCodeComparison() {
|
||||
XCTAssertTrue(SettingViewModel.isNewerVersionCode(11, than: 10))
|
||||
XCTAssertFalse(SettingViewModel.isNewerVersionCode(10, than: 10))
|
||||
XCTAssertFalse(SettingViewModel.isNewerVersionCode(9, than: 10))
|
||||
XCTAssertFalse(SettingViewModel.isNewerVersionCode(11, than: nil))
|
||||
}
|
||||
|
||||
func testAgreementDestinationsMapToAndroidPaths() {
|
||||
let viewModel = SettingViewModel(infoDictionary: [:], environment: .testing)
|
||||
|
||||
let about = viewModel.agreementDestination(for: .aboutUs)
|
||||
let userAgreement = viewModel.agreementDestination(for: .userAgreement)
|
||||
let privacy = viewModel.agreementDestination(for: .privacyPolicy)
|
||||
|
||||
XCTAssertEqual(about.title, "关于我们")
|
||||
XCTAssertEqual(about.url.absoluteString, "https://api-test.zhifly.cn/h5/app/about-us")
|
||||
XCTAssertEqual(userAgreement.title, "用户协议")
|
||||
XCTAssertEqual(userAgreement.url.absoluteString, "https://api-test.zhifly.cn/h5/app/user-agreement")
|
||||
XCTAssertEqual(privacy.title, "隐私政策")
|
||||
XCTAssertEqual(privacy.url.absoluteString, "https://api-test.zhifly.cn/h5/app/privacy-policy")
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func testCheckLatestVersionMarksNewVersionWhenVersionCodeIsHigher() async throws {
|
||||
let json = """
|
||||
{
|
||||
"code": 100000,
|
||||
"msg": "success",
|
||||
"data": {
|
||||
"id": 1,
|
||||
"type": 1,
|
||||
"version": "1.0.1",
|
||||
"operator": "admin",
|
||||
"description": "update",
|
||||
"status": 1,
|
||||
"created_at": "2026-07-09 00:00:00",
|
||||
"updated_at": "2026-07-09 00:00:00",
|
||||
"deleted_at": null,
|
||||
"version_code": 8,
|
||||
"apk_url": "https://example.com/app.apk",
|
||||
"is_force_update": 0,
|
||||
"approve_notes": ""
|
||||
}
|
||||
}
|
||||
""".data(using: .utf8)!
|
||||
let session = MockURLSession(responses: [json])
|
||||
let client = APIClient(environment: .testing, session: session)
|
||||
let api = SettingAPI(client: client)
|
||||
let viewModel = SettingViewModel(
|
||||
infoDictionary: [
|
||||
"CFBundleShortVersionString": "1.0.0",
|
||||
"CFBundleVersion": "7",
|
||||
],
|
||||
environment: .testing
|
||||
)
|
||||
|
||||
await viewModel.checkLatestVersion(api: api)
|
||||
|
||||
XCTAssertEqual(viewModel.latestVersion?.versionCode, 8)
|
||||
XCTAssertTrue(viewModel.hasNewVersion)
|
||||
XCTAssertEqual(session.requests.first?.url?.path, "/api/app/latest-version")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user