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 }