初始提交
This commit is contained in:
52
suixinkanTests/LoginViewModelTests.swift
Normal file
52
suixinkanTests/LoginViewModelTests.swift
Normal file
@ -0,0 +1,52 @@
|
||||
//
|
||||
// LoginViewModelTests.swift
|
||||
// suixinkanTests
|
||||
//
|
||||
// Created by Codex on 2026/6/20.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import suixinkan
|
||||
|
||||
@MainActor
|
||||
/// 登录页 ViewModel 测试,覆盖手机号规范化、表单校验和偏好恢复。
|
||||
final class LoginViewModelTests: XCTestCase {
|
||||
/// 测试 +86 手机号会被规范化为 11 位国内手机号。
|
||||
func testNormalizeUsernameCountryCodeRemovesChinaPrefix() {
|
||||
let viewModel = LoginViewModel()
|
||||
viewModel.username = "+86 186 5185 7230"
|
||||
|
||||
viewModel.normalizeUsernameCountryCodeIfNeeded()
|
||||
|
||||
XCTAssertEqual(viewModel.username, "18651857230")
|
||||
XCTAssertEqual(viewModel.normalizedUsername, "18651857230")
|
||||
XCTAssertTrue(viewModel.isValidPhone)
|
||||
}
|
||||
|
||||
/// 测试未勾选协议时登录校验返回隐私协议错误。
|
||||
func testValidateForLoginRequiresPrivacyAgreement() {
|
||||
let viewModel = LoginViewModel()
|
||||
viewModel.username = "18651857230"
|
||||
viewModel.password = "secret123"
|
||||
viewModel.privacyChecked = false
|
||||
|
||||
XCTAssertEqual(viewModel.validateForLogin(), .privacyUnchecked)
|
||||
}
|
||||
|
||||
/// 测试登录偏好只恢复手机号和协议状态,不恢复密码。
|
||||
func testApplyPreferencesRestoresUsernameAndPrivacyOnly() {
|
||||
let viewModel = LoginViewModel()
|
||||
viewModel.password = "manual-password"
|
||||
|
||||
viewModel.applyPreferences(
|
||||
LoginPreferences(
|
||||
lastUsername: "18651857230",
|
||||
privacyAgreementAccepted: true
|
||||
)
|
||||
)
|
||||
|
||||
XCTAssertEqual(viewModel.username, "18651857230")
|
||||
XCTAssertTrue(viewModel.privacyChecked)
|
||||
XCTAssertEqual(viewModel.password, "manual-password")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user