This repository has been archived on 2025-10-08. You can view files and clone it, but cannot push or open issues or pull requests.
miniauthold/pkg/miniauth/miniauth_test.go
kekskurse 4818cf15d2
All checks were successful
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/push/playwright Pipeline was successful
ci/woodpecker/push/deplyoment Pipeline was successful
chore: add smtp config to live system
2025-03-14 18:03:21 +01:00

179 lines
4.4 KiB
Go

package miniauth
import (
"testing"
"git.keks.cloud/kekskurse/miniauth/pkg/smtpclient"
"git.keks.cloud/kekskurse/miniauth/pkg/userstore"
"github.com/stretchr/testify/assert"
)
func TestRegistration(t *testing.T) {
tts := []struct {
name string
username string
password string
mail string
exptErr error
exptErrString string
}{
{
name: "invaloid username",
username: "abc",
password: "2b7B3Wm0KwIZ$Uvtc$!VOb",
mail: "mail@kekskurse.de",
exptErr: ErrUserHasInvalideChars,
exptErrString: "username has invalide chars: username has invalide chars",
},
{
name: "invaloid password",
username: "kekskurse",
password: "abc123d",
mail: "mail@kekskurse.de",
exptErr: ErrPasswordNotComplexEnough,
exptErrString: "password not complex enough: Password length must be not lower that 15 chars",
},
{
name: "invaloid password",
username: "kekskurse",
password: "abc123d,.,jfhfh",
mail: "mailabd.de",
exptErr: ErrMailAddressInvalide,
exptErrString: "email address invalide: mail: missing '@' or angle-addr",
},
{
name: "invaloid password",
username: "kekskurse",
password: "abc123d,.,jfhfh",
mail: "error@error.error",
exptErr: ErrCantSendMail,
exptErrString: "cant send mail: cant send mail to error mail",
},
{
name: "success",
username: "someuser",
password: "abc123d,.,jfhfh",
mail: "hello@example.com",
exptErr: nil,
exptErrString: "",
},
{
name: "mail already used",
username: "someuser2",
password: "abc123d,.,jfhfh",
mail: "hello@example.com",
exptErr: ErrMailAddressInvalide,
exptErrString: "email address invalide: email alreadys used",
},
}
ma := getMiniAuth(t)
for _, tt := range tts {
t.Run(tt.name, func(t *testing.T) {
err := ma.RegisterUser(tt.username, tt.mail, tt.password)
assert.ErrorIs(t, err, tt.exptErr)
if tt.exptErrString != "" {
assert.Equal(t, tt.exptErrString, err.Error())
}
})
}
}
func TestPasswordCheck(t *testing.T) {
tts := []struct {
name string
password string
exptErrorString string
}{
{
name: "to short",
password: "abc",
exptErrorString: "Password length must be not lower that 15 chars",
},
{
name: "no number",
password: "abcdefghijklmnop",
exptErrorString: "Password must contains at least 3 chars from 0123456789",
},
{
name: "no special characters",
password: "abcd0e3fg5hijklmnop",
exptErrorString: "Password must contains at least 3 chars from ,;.:-_#+*?=}])[({/&%$§!<>|",
},
{
name: "no special characters",
password: "abcd0e,3.f-g5hijklmnop",
exptErrorString: "",
},
}
ma := getMiniAuth(t)
for _, tt := range tts {
t.Run(tt.name, func(t *testing.T) {
err := ma.checkPasswordForRegistration(tt.password)
if tt.exptErrorString != "" {
assert.Equal(t, tt.exptErrorString, err.Error())
return
}
assert.Nil(t, err)
})
}
}
func TestInvalideUsernames(t *testing.T) {
tts := []struct {
name string
username string
exptErr error
}{
{
name: "not-to-short",
username: "abc",
exptErr: ErrUserHasInvalideChars,
},
{
name: "not-to-long",
username: "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
exptErr: ErrUserHasInvalideChars,
},
{
name: "special charakters",
username: "abcöfg",
exptErr: ErrUserHasInvalideChars,
},
{
name: "with a dot",
username: "kekskurse.16",
exptErr: ErrUserHasInvalideChars,
},
{
name: "username-ok",
username: "kekskurse",
exptErr: nil,
},
{
name: "username already taken",
username: "testuser",
exptErr: ErrUsernameIsTaken,
},
}
ma := getMiniAuth(t)
_, err := ma.store.UserWrite("testuser", "testpassword")
assert.Nil(t, err, "[setup] should be abel to write user without error")
for _, tt := range tts {
t.Run(tt.name, func(t *testing.T) {
err := ma.checkUsernameForRegistration(tt.username)
assert.Equal(t, tt.exptErr, err)
})
}
}
func getMiniAuth(t *testing.T) Miniauth {
us, err := userstore.NewDummyStore()
assert.Nil(t, err, "[setup] should be abel to creat dummy store")
sc := smtpclient.NewDummySMTPClient()
m := NewMiniauth(us, sc)
return m
}