feat: add email repo unit test

This commit is contained in:
LinkinStar 2022-10-26 16:24:58 +08:00
parent e4522f280d
commit dd16b0db74
3 changed files with 54 additions and 15 deletions

View File

@ -22,6 +22,7 @@ func NewEmailRepo(data *data.Data) export.EmailRepo {
}
}
// SetCode The email code is used to verify that the link in the message is out of date
func (e *emailRepo) SetCode(ctx context.Context, code, content string) error {
err := e.data.Cache.SetString(ctx, code, content, 10*time.Minute)
if err != nil {
@ -30,6 +31,7 @@ func (e *emailRepo) SetCode(ctx context.Context, code, content string) error {
return nil
}
// VerifyCode verify the code if out of date
func (e *emailRepo) VerifyCode(ctx context.Context, code string) (content string, err error) {
content, err = e.data.Cache.GetString(ctx, code)
if err != nil {

View File

@ -0,0 +1,20 @@
package repo_test
import (
"context"
"testing"
"github.com/answerdev/answer/internal/repo/export"
"github.com/stretchr/testify/assert"
)
func Test_emailRepo_VerifyCode(t *testing.T) {
emailRepo := export.NewEmailRepo(dataSource)
code, content := "1111", "test"
err := emailRepo.SetCode(context.TODO(), code, content)
assert.NoError(t, err)
verifyContent, err := emailRepo.VerifyCode(context.TODO(), code)
assert.NoError(t, err)
assert.Equal(t, content, verifyContent)
}

View File

@ -11,7 +11,9 @@ import (
"github.com/answerdev/answer/internal/migrations"
"github.com/ory/dockertest/v3"
"github.com/ory/dockertest/v3/docker"
"github.com/segmentfault/pacman/cache"
"github.com/segmentfault/pacman/log"
"xorm.io/xorm"
"xorm.io/xorm/schemas"
)
@ -57,7 +59,7 @@ func TestMain(t *testing.M) {
tearDown()
}
}()
if err := initTestDB(dbSetting); err != nil {
if err := initTestDataSource(dbSetting); err != nil {
panic(err)
}
log.Info("init test database successfully")
@ -76,17 +78,29 @@ type TestDBSetting struct {
Connection string
}
func initTestDB(dbSetting TestDBSetting) error {
func initTestDataSource(dbSetting TestDBSetting) error {
connection, imageCleanUp, err := initDatabaseImage(dbSetting)
if err != nil {
return err
}
dbSetting.Connection = connection
ds, dbCleanUp, err := initDatabase(dbSetting)
dbEngine, err := initDatabase(dbSetting)
if err != nil {
return err
}
dataSource = ds
newCache, err := initCache()
if err != nil {
return err
}
newData, dbCleanUp, err := data.NewData(dbEngine, newCache)
if err != nil {
return err
}
dataSource = newData
tearDown = func() {
dbCleanUp()
log.Info("cleanup test database successfully")
@ -101,7 +115,10 @@ func initDatabaseImage(dbSetting TestDBSetting) (connection string, cleanup func
if dbSetting.Driver == string(schemas.SQLITE) {
return dbSetting.Connection, func() {
log.Info("remove database", dbSetting.Connection)
_ = os.Remove(dbSetting.Connection)
err = os.Remove(dbSetting.Connection)
if err != nil {
log.Error(err)
}
}, nil
}
pool, err := dockertest.NewPool("")
@ -136,20 +153,20 @@ func initDatabaseImage(dbSetting TestDBSetting) (connection string, cleanup func
return connection, func() { _ = pool.Purge(resource) }, nil
}
func initDatabase(dbSetting TestDBSetting) (dataSource *data.Data, cleanup func(), err error) {
func initDatabase(dbSetting TestDBSetting) (dbEngine *xorm.Engine, err error) {
dataConf := &data.Database{Driver: dbSetting.Driver, Connection: dbSetting.Connection}
db, err := data.NewDB(true, dataConf)
dbEngine, err = data.NewDB(true, dataConf)
if err != nil {
return nil, nil, fmt.Errorf("connection to database failed: %s", err)
return nil, fmt.Errorf("connection to database failed: %s", err)
}
err = migrations.InitDB(dataConf)
if err != nil {
return nil, nil, fmt.Errorf("migrations init database failed: %s", err)
return nil, fmt.Errorf("migrations init database failed: %s", err)
}
dataSource, dbCleanUp, err := data.NewData(db, nil)
if err != nil {
return nil, nil, fmt.Errorf("new data failed: %s", err)
}
return dataSource, dbCleanUp, nil
return dbEngine, nil
}
func initCache() (newCache cache.Cache, err error) {
newCache, _, err = data.NewCache(&data.CacheConf{})
return newCache, err
}