mana-swift-ui/Tests/ManaAuthUITests/PasswordStrengthTests.swift
Till JS 5d7d486323 feat(ManaAuthUI): Passwortstärke-Anzeige in Sign-Up + Reset
ManaPasswordStrength (reine Heuristik: Laenge + Zeichenklassen, keine
externe Lib) + ManaPasswordStrengthView (segmentierte Anzeige, blendet
bei leerem Feld aus, .weak via brand.error). Eingebunden unter den
newPassword-Feldern in ManaSignUpView und ManaResetPasswordView.
7 Unit-Tests gegen die Bewertungslogik.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 19:16:50 +02:00

44 lines
1.4 KiB
Swift

import Testing
@testable import ManaAuthUI
@Suite("Passwortstärke-Heuristik")
struct PasswordStrengthTests {
@Test("Leeres Passwort liefert nil (nichts anzeigen)")
func emptyIsNil() {
#expect(ManaPasswordStrength.evaluate("") == nil)
}
@Test("Unter Mindestlänge immer schwach, egal wie komplex")
func tooShortIsWeak() {
#expect(ManaPasswordStrength.evaluate("Ab1!") == .weak)
#expect(ManaPasswordStrength.evaluate("aB3$x") == .weak)
}
@Test("Genau Mindestlänge, nur Kleinbuchstaben = schwach")
func minLengthLowercaseOnlyIsWeak() {
#expect(ManaPasswordStrength.evaluate("abcdefgh") == .weak)
}
@Test("Mittel: Mindestlänge + eine Zeichenklasse mehr")
func fair() {
// 8 Zeichen + Ziffer → score 2 → mittel
#expect(ManaPasswordStrength.evaluate("abcdefg1") == .fair)
}
@Test("Gut: mehrere Zeichenklassen")
func good() {
// 8 Zeichen + Groß/Klein + Ziffer → score 3 → gut
#expect(ManaPasswordStrength.evaluate("Abcdefg1") == .good)
}
@Test("Stark: lang + alle Zeichenklassen")
func strong() {
// ≥12 + Groß/Klein + Ziffer + Symbol → score 5 → stark
#expect(ManaPasswordStrength.evaluate("Abcdefgh123!") == .strong)
}
@Test("Eigene Mindestlänge wird respektiert")
func customMinLength() {
#expect(ManaPasswordStrength.evaluate("abcdef", minLength: 10) == .weak)
}
}