chore: add user id to mail
This commit is contained in:
parent
7b5df08e45
commit
0b192b8f7e
7 changed files with 74 additions and 12 deletions
pkg
miniauth
userstore
|
@ -6,4 +6,5 @@ var (
|
|||
ErrUserHasInvalideChars = errors.New("username has invalide chars")
|
||||
ErrUsernameIsTaken = errors.New("username already takebn")
|
||||
ErrPasswordNotComplexEnough = errors.New("password not complex enough")
|
||||
ErrCantCreateUser = errors.New("cant create user")
|
||||
)
|
||||
|
|
|
@ -32,6 +32,18 @@ func (m Miniauth) RegisterUser(username string, mail string, password string) er
|
|||
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
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,43 @@ import (
|
|||
"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) {
|
||||
tts := []struct {
|
||||
name string
|
||||
|
|
|
@ -5,12 +5,12 @@ import (
|
|||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func (s Store) MailAdd(mail string, primary bool) error {
|
||||
query := "INSERT INTO mail (mail, validationCode, isPrimary) VALUES (?, ?, ?);"
|
||||
log := s.log.With().Str("func", "MailAdd").Str("mail", mail).Bool("primary", primary).Str("query", query).Logger()
|
||||
func (s Store) MailAdd(mail string, userID int64, primary bool) error {
|
||||
query := "INSERT INTO mail (mail, user_id, validation_code, is_primary) VALUES (?, ?, ?, ?);"
|
||||
log := s.log.With().Str("func", "MailAdd").Int64("user_id", userID).Str("mail", mail).Bool("primary", primary).Str("query", query).Logger()
|
||||
|
||||
validatenCode := uuid.NewString()
|
||||
_, err := s.db.Exec(query, mail, validatenCode, primary)
|
||||
_, err := s.db.Exec(query, mail, userID, validatenCode, primary)
|
||||
if err != nil {
|
||||
return utils.WrapError(ErrCantExecuteQuery, err, log)
|
||||
}
|
||||
|
|
|
@ -10,9 +10,13 @@ func TestAddMail(t *testing.T) {
|
|||
store, err := NewDummyStore()
|
||||
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 {
|
||||
name string
|
||||
mail string
|
||||
user_id int64
|
||||
primearyMail bool
|
||||
ExptErr error
|
||||
ExptErrString string
|
||||
|
@ -20,11 +24,13 @@ func TestAddMail(t *testing.T) {
|
|||
{
|
||||
name: "test-add-first-mail",
|
||||
mail: "mail1@kekskurse.de",
|
||||
user_id: 1,
|
||||
primearyMail: false,
|
||||
},
|
||||
{
|
||||
name: "test-add-mail-again-should-return-error",
|
||||
mail: "mail1@kekskurse.de",
|
||||
user_id: 1,
|
||||
primearyMail: false,
|
||||
ExptErr: ErrCantExecuteQuery,
|
||||
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 {
|
||||
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 {
|
||||
assert.Nil(t, err)
|
||||
} else {
|
||||
|
@ -45,7 +51,7 @@ func TestAddMail(t *testing.T) {
|
|||
var validateCode string
|
||||
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.False(t, isValidated, "mail should not be validated")
|
||||
assert.NotEmpty(t, validateCode, "validaten code should not be empty")
|
||||
|
|
|
@ -11,9 +11,12 @@ CREATE TABLE mail (
|
|||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
user_id INTEGER NOT NULL,
|
||||
mail TEXT NOT NULL UNIQUE,
|
||||
validationCode TEXT NOT NULL UNIQUE,
|
||||
isValidated BOOLEAN NOT NULL DEFAULT 0,
|
||||
isPrimary BOOLEAN NOT NULL DEFAULT 0
|
||||
validation_code TEXT NOT NULL UNIQUE,
|
||||
is_validated BOOLEAN NOT NULL DEFAULT 0,
|
||||
is_primary BOOLEAN NOT NULL DEFAULT 0,
|
||||
|
||||
FOREIGN KEY(user_id) REFERENCES users(id)
|
||||
);
|
||||
|
||||
|
|
|
@ -16,8 +16,11 @@ CREATE TABLE mail (
|
|||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
user_id INTEGER NOT NULL,
|
||||
mail TEXT NOT NULL UNIQUE,
|
||||
validationCode TEXT NOT NULL UNIQUE,
|
||||
isValidated BOOLEAN NOT NULL DEFAULT 0,
|
||||
isPrimary BOOLEAN NOT NULL DEFAULT 0
|
||||
validation_code TEXT NOT NULL UNIQUE,
|
||||
is_validated BOOLEAN NOT NULL DEFAULT 0,
|
||||
is_primary BOOLEAN NOT NULL DEFAULT 0,
|
||||
|
||||
FOREIGN KEY(user_id) REFERENCES users(id)
|
||||
);
|
Loading…
Add table
Reference in a new issue