chatdesk-ui/auth_v2.169.0/internal/api/password_test.go

118 lines
2.1 KiB
Go

package api
import (
"context"
"testing"
"github.com/stretchr/testify/require"
"github.com/supabase/auth/internal/conf"
)
func TestPasswordStrengthChecks(t *testing.T) {
examples := []struct {
MinLength int
RequiredCharacters []string
Password string
Reasons []string
}{
{
MinLength: 6,
Password: "12345",
Reasons: []string{
"length",
},
},
{
MinLength: 6,
RequiredCharacters: []string{
"a",
"b",
"c",
},
Password: "123",
Reasons: []string{
"length",
"characters",
},
},
{
MinLength: 6,
RequiredCharacters: []string{
"a",
"b",
"c",
},
Password: "a123",
Reasons: []string{
"length",
"characters",
},
},
{
MinLength: 6,
RequiredCharacters: []string{
"a",
"b",
"c",
},
Password: "ab123",
Reasons: []string{
"length",
"characters",
},
},
{
MinLength: 6,
RequiredCharacters: []string{
"a",
"b",
"c",
},
Password: "c123",
Reasons: []string{
"length",
"characters",
},
},
{
MinLength: 6,
RequiredCharacters: []string{
"a",
"b",
"c",
},
Password: "abc123",
Reasons: nil,
},
{
MinLength: 6,
RequiredCharacters: []string{},
Password: "zZgXb5gzyCNrV36qwbOSbKVQsVJd28mC1TwRpeB0y6sFNICJyjD6bILKJMsjyKDzBdaY5tmi8zY9BWJYmt3vULLmyafjIDLYjy8qhETu0mS2jj1uQBgSAzJn9Zjm8EFa",
Reasons: nil,
},
}
for i, example := range examples {
api := &API{
config: &conf.GlobalConfiguration{
Password: conf.PasswordConfiguration{
MinLength: example.MinLength,
RequiredCharacters: conf.PasswordRequiredCharacters(example.RequiredCharacters),
},
},
}
err := api.checkPasswordStrength(context.Background(), example.Password)
switch e := err.(type) {
case *WeakPasswordError:
require.Equal(t, e.Reasons, example.Reasons, "Example %d failed with wrong reasons", i)
case *HTTPError:
require.Equal(t, e.ErrorCode, ErrorCodeValidationFailed, "Example %d failed with wrong error code", i)
default:
require.NoError(t, err, "Example %d failed with error", i)
}
}
}