miniauth/pkg/userstore/mail_test.go
2025-03-18 12:06:17 +01:00

147 lines
4.2 KiB
Go

package userstore
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestCheckMailExist(t *testing.T) {
store, err := NewDummyStore()
assert.Nil(t, err, "[setup] should be abel to create dummystore")
id, err := store.UserWrite("foo", "foo")
assert.Nil(t, err, "[setup] should be abel to create user")
err = store.MailAdd("mail@kekskurse.de", id, false)
assert.Nil(t, err, "[setup] should be abel to add mail")
_, err = store.db.Exec("UPDATE mail SET is_validated = 1 WHERE mail = ?", "mail@kekskurse.de")
assert.Nil(t, err)
tts := []struct {
name string
mail string
used bool
}{
{
name: "mail addresse unused",
mail: "foo@bar.de",
used: false,
},
{
name: "mail address used",
mail: "mail@kekskurse.de",
used: true,
},
}
for _, tt := range tts {
t.Run(tt.name, func(t *testing.T) {
used, err := store.MailCheckExists(tt.mail)
assert.Nil(t, err)
assert.Equal(t, tt.used, used)
})
}
}
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
}{
{
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)",
},
}
for _, tt := range tts {
t.Run(tt.name, func(t *testing.T) {
err := store.MailAdd(tt.mail, tt.user_id, tt.primearyMail)
if tt.ExptErr == nil {
assert.Nil(t, err)
} else {
assert.ErrorIs(t, err, tt.ExptErr)
assert.Equal(t, tt.ExptErrString, err.Error())
return
}
var isValidated bool
var validateCode string
isValidated = true
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")
})
}
}
func TestDeleteMail(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")
err = store.MailAdd("mail1@example.com", 1, true)
assert.Nil(t, err, "[setup] should be abel to store mail")
err = store.MailAdd("mail2@example.com", 1, false)
assert.Nil(t, err, "[setup] should be abel to store mail2")
var count int
err = store.db.QueryRow("SELECT COUNT(*) FROM mail").Scan(&count)
assert.Nil(t, err, "should execute count query for mail")
assert.Equal(t, 2, count, "should found 2 mails in the database")
err = store.MailRemove("mail1@example.com")
assert.Nil(t, err, "should be abel to remove mail wthout error")
err = store.db.QueryRow("SELECT COUNT(*) FROM mail").Scan(&count)
assert.Nil(t, err, "should execute count query for mail")
assert.Equal(t, 1, count, "should found 1 mails in the database")
}
func TestGetPrimaryMailForUser(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")
err = store.MailAdd("mail1@example.com", 1, true)
assert.Nil(t, err, "[setup] should be abel to store mail")
err = store.MailAdd("mail2@example.com", 1, false)
assert.Nil(t, err, "[setup] should be abel to store mail2")
mail, err := store.MailGetPrimaryForUsername("kekskurse")
assert.Nil(t, err)
assert.Equal(t, "mail1@example.com", mail.Mail)
assert.Equal(t, true, mail.IsPrimary)
assert.Equal(t, false, mail.IsValidated)
assert.Equal(t, time.Now().Year(), mail.CreatedAt.Year())
assert.Equal(t, time.Now().Year(), mail.UpdatedAt.Year())
}