35 lines
989 B
Go
35 lines
989 B
Go
|
|
package auth
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"errors"
|
|||
|
|
"strings"
|
|||
|
|
"testing"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
func TestValidatePassword(t *testing.T) {
|
|||
|
|
cases := []struct {
|
|||
|
|
name string
|
|||
|
|
pw string
|
|||
|
|
want error
|
|||
|
|
}{
|
|||
|
|
{"нормальный", "Password123", nil},
|
|||
|
|
{"ровно минимум (10)", "abcdefg123", nil},
|
|||
|
|
{"с кириллицей", "пароль1234", nil},
|
|||
|
|
{"слишком короткий", "Password1", ErrPasswordShort},
|
|||
|
|
{"ровно 9", "short1234"[:9], ErrPasswordShort},
|
|||
|
|
{"пустой", "", ErrPasswordShort},
|
|||
|
|
{"только буквы", "verylongpassword", ErrPasswordWeak},
|
|||
|
|
{"только цифры", "1234567890", ErrPasswordWeak},
|
|||
|
|
{"без цифры в середине", "abcdefghij1", nil},
|
|||
|
|
{"длиннее 72 байт", strings.Repeat("a1", 40), ErrPasswordLong},
|
|||
|
|
}
|
|||
|
|
for _, tc := range cases {
|
|||
|
|
t.Run(tc.name, func(t *testing.T) {
|
|||
|
|
err := ValidatePassword(tc.pw)
|
|||
|
|
if !errors.Is(err, tc.want) {
|
|||
|
|
t.Errorf("ValidatePassword(%q) = %v, want %v", tc.pw, err, tc.want)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|