Files
Luma/Tests/SaslFailureMessageTests.swift
T
wt fc07855036
iOS CI / Build and Test SwiftUI App (push) Canceled after 0s
Build Unsigned iOS and macOS Apps / Build Unsigned iOS IPA (push) Canceled after 0s
Build Unsigned iOS and macOS Apps / Build macOS ZIP (push) Canceled after 0s
#11 fix SASL login failures with non-ASCII passwords
- Normalize SCRAM passwords with RFC 4013 SASLprep before the
  challenge response, so they match SASLprep-compliant servers
  (Martin hashes raw UTF-8) and PLAIN still sends the password
  untouched.
- Capture the raw <failure/> condition with LumaSaslFailureModule and
  map SASL errors to actionable Russian messages instead of the
  cryptic OS-localized "Martin.SaslError, error 5".
- Cover SASLprep and failure message mapping with unit tests and new
  verify.sh invariants.
2026-08-29 01:26:03 +07:00

49 lines
1.9 KiB
Swift

import Martin
import XCTest
@testable import Luma
final class SaslFailureMessageTests: XCTestCase {
func testNotAuthorizedProducesActionableMessage() {
let message = SaslFailureMessage.describe(
error: SaslError.not_authorized, condition: nil, serverText: nil)
XCTAssertEqual(
message,
"Сервер отклонил имя пользователя или пароль. Проверьте JID и пароль.")
}
func testServerTextWinsOverCondition() {
let message = SaslFailureMessage.describe(
error: SaslError.not_authorized,
condition: "not-authorized",
serverText: "Bad password")
XCTAssertEqual(message, "Сервер отклонил вход: Bad password")
}
func testAccountDisabledIsExplained() {
let message = SaslFailureMessage.describe(
error: SaslError.not_authorized,
condition: "account-disabled",
serverText: nil)
XCTAssertEqual(
message,
"Аккаунт отключён на сервере. Обратитесь к администратору сервера.")
}
func testCredentialsExpiredIsExplained() {
let message = SaslFailureMessage.describe(
error: SaslError.not_authorized,
condition: "credentials-expired",
serverText: nil)
XCTAssertEqual(message, "Срок действия пароля истёк. Обновите пароль на сервере.")
}
func testTemporaryAuthFailureIsExplained() {
let message = SaslFailureMessage.describe(
error: SaslError.temporary_auth_failure, condition: nil, serverText: nil)
XCTAssertEqual(
message,
"Сервер временно не может проверить учётные данные. Попробуйте через минуту.")
}
}