chore: add user id to mail
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

This commit is contained in:
kekskurse 2025-03-13 21:42:39 +01:00
parent 7b5df08e45
commit 0b192b8f7e
7 changed files with 74 additions and 12 deletions

View file

@ -6,4 +6,5 @@ var (
ErrUserHasInvalideChars = errors.New("username has invalide chars") ErrUserHasInvalideChars = errors.New("username has invalide chars")
ErrUsernameIsTaken = errors.New("username already takebn") ErrUsernameIsTaken = errors.New("username already takebn")
ErrPasswordNotComplexEnough = errors.New("password not complex enough") ErrPasswordNotComplexEnough = errors.New("password not complex enough")
ErrCantCreateUser = errors.New("cant create user")
) )

View file

@ -32,6 +32,18 @@ func (m Miniauth) RegisterUser(username string, mail string, password string) er
return utils.WrapError(ErrPasswordNotComplexEnough, err, log) return utils.WrapError(ErrPasswordNotComplexEnough, err, log)
} }
id, err := m.store.UserWrite(username, password)
if err != nil {
return utils.WrapError(ErrCantCreateUser, err, log)
}
log = log.With().Int64("userid", id).Logger()
err = m.store.MailAdd(mail, id, true)
if err != nil {
return utils.WrapError(ErrCantCreateUser, err, log)
}
return nil return nil
} }

View file

@ -7,6 +7,43 @@ import (
"github.com/stretchr/testify/assert" "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",
},
}
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)
assert.Equal(t, tt.exptErrString, err.Error())
})
}
}
func TestPasswordCheck(t *testing.T) { func TestPasswordCheck(t *testing.T) {
tts := []struct { tts := []struct {
name string name string

View file

@ -5,12 +5,12 @@ import (
"github.com/google/uuid" "github.com/google/uuid"
) )
func (s Store) MailAdd(mail string, primary bool) error { func (s Store) MailAdd(mail string, userID int64, primary bool) error {
query := "INSERT INTO mail (mail, validationCode, isPrimary) VALUES (?, ?, ?);" query := "INSERT INTO mail (mail, user_id, validation_code, is_primary) VALUES (?, ?, ?, ?);"
log := s.log.With().Str("func", "MailAdd").Str("mail", mail).Bool("primary", primary).Str("query", query).Logger() log := s.log.With().Str("func", "MailAdd").Int64("user_id", userID).Str("mail", mail).Bool("primary", primary).Str("query", query).Logger()
validatenCode := uuid.NewString() validatenCode := uuid.NewString()
_, err := s.db.Exec(query, mail, validatenCode, primary) _, err := s.db.Exec(query, mail, userID, validatenCode, primary)
if err != nil { if err != nil {
return utils.WrapError(ErrCantExecuteQuery, err, log) return utils.WrapError(ErrCantExecuteQuery, err, log)
} }

View file

@ -10,9 +10,13 @@ func TestAddMail(t *testing.T) {
store, err := NewDummyStore() store, err := NewDummyStore()
assert.Nil(t, err, "[setup] should be abel to create dummystore") assert.Nil(t, err, "[setup] should be abel to create dummystore")
_, err = store.UserWrite("kekskurse", "kekskurse")
assert.Nil(t, err, "[setup] should be abel to store user")
tts := []struct { tts := []struct {
name string name string
mail string mail string
user_id int64
primearyMail bool primearyMail bool
ExptErr error ExptErr error
ExptErrString string ExptErrString string
@ -20,11 +24,13 @@ func TestAddMail(t *testing.T) {
{ {
name: "test-add-first-mail", name: "test-add-first-mail",
mail: "mail1@kekskurse.de", mail: "mail1@kekskurse.de",
user_id: 1,
primearyMail: false, primearyMail: false,
}, },
{ {
name: "test-add-mail-again-should-return-error", name: "test-add-mail-again-should-return-error",
mail: "mail1@kekskurse.de", mail: "mail1@kekskurse.de",
user_id: 1,
primearyMail: false, primearyMail: false,
ExptErr: ErrCantExecuteQuery, ExptErr: ErrCantExecuteQuery,
ExptErrString: "cant execute query: constraint failed: UNIQUE constraint failed: mail.mail (2067)", ExptErrString: "cant execute query: constraint failed: UNIQUE constraint failed: mail.mail (2067)",
@ -33,7 +39,7 @@ func TestAddMail(t *testing.T) {
for _, tt := range tts { for _, tt := range tts {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
err := store.MailAdd(tt.mail, tt.primearyMail) err := store.MailAdd(tt.mail, tt.user_id, tt.primearyMail)
if tt.ExptErr == nil { if tt.ExptErr == nil {
assert.Nil(t, err) assert.Nil(t, err)
} else { } else {
@ -45,7 +51,7 @@ func TestAddMail(t *testing.T) {
var validateCode string var validateCode string
isValidated = true isValidated = true
err = store.db.QueryRow("SELECT validationCode, isValidated FROM mail WHERE mail = ?", tt.mail).Scan(&validateCode, &isValidated) err = store.db.QueryRow("SELECT validation_code, is_validated FROM mail WHERE mail = ?", tt.mail).Scan(&validateCode, &isValidated)
assert.Nil(t, err, "should get mail infos from db without error") assert.Nil(t, err, "should get mail infos from db without error")
assert.False(t, isValidated, "mail should not be validated") assert.False(t, isValidated, "mail should not be validated")
assert.NotEmpty(t, validateCode, "validaten code should not be empty") assert.NotEmpty(t, validateCode, "validaten code should not be empty")

View file

@ -11,9 +11,12 @@ CREATE TABLE mail (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP, created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
user_id INTEGER NOT NULL,
mail TEXT NOT NULL UNIQUE, mail TEXT NOT NULL UNIQUE,
validationCode TEXT NOT NULL UNIQUE, validation_code TEXT NOT NULL UNIQUE,
isValidated BOOLEAN NOT NULL DEFAULT 0, is_validated BOOLEAN NOT NULL DEFAULT 0,
isPrimary BOOLEAN NOT NULL DEFAULT 0 is_primary BOOLEAN NOT NULL DEFAULT 0,
FOREIGN KEY(user_id) REFERENCES users(id)
); );

View file

@ -16,8 +16,11 @@ CREATE TABLE mail (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP, created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
user_id INTEGER NOT NULL,
mail TEXT NOT NULL UNIQUE, mail TEXT NOT NULL UNIQUE,
validationCode TEXT NOT NULL UNIQUE, validation_code TEXT NOT NULL UNIQUE,
isValidated BOOLEAN NOT NULL DEFAULT 0, is_validated BOOLEAN NOT NULL DEFAULT 0,
isPrimary BOOLEAN NOT NULL DEFAULT 0 is_primary BOOLEAN NOT NULL DEFAULT 0,
FOREIGN KEY(user_id) REFERENCES users(id)
); );