84 lines
2.0 KiB
Go
84 lines
2.0 KiB
Go
package aghuser_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/AdguardTeam/AdGuardHome/internal/aghuser"
|
|
"github.com/AdguardTeam/golibs/errors"
|
|
"github.com/AdguardTeam/golibs/testutil"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"golang.org/x/crypto/bcrypt"
|
|
)
|
|
|
|
func TestDB(t *testing.T) {
|
|
db := aghuser.NewDefaultDB()
|
|
|
|
const (
|
|
userWithIDPassRaw = "user_with_id_password"
|
|
userSecondPassRaw = "user_second_password"
|
|
)
|
|
|
|
userWithIDPassHash, err := bcrypt.GenerateFromPassword(
|
|
[]byte(userWithIDPassRaw),
|
|
bcrypt.DefaultCost,
|
|
)
|
|
require.NoError(t, err)
|
|
|
|
userSecondPassHash, err := bcrypt.GenerateFromPassword(
|
|
[]byte(userSecondPassRaw),
|
|
bcrypt.DefaultCost,
|
|
)
|
|
require.NoError(t, err)
|
|
|
|
userWithIDPass := aghuser.NewDefaultPassword(string(userWithIDPassHash))
|
|
userSecondPass := aghuser.NewDefaultPassword(string(userSecondPassHash))
|
|
|
|
var (
|
|
userWithID = &aghuser.User{
|
|
ID: aghuser.MustNewUserID(),
|
|
Login: "user_with_id",
|
|
Password: userWithIDPass,
|
|
}
|
|
userSecond = &aghuser.User{
|
|
ID: aghuser.MustNewUserID(),
|
|
Login: "user_second",
|
|
Password: userSecondPass,
|
|
}
|
|
userDuplicateLogin = &aghuser.User{
|
|
ID: aghuser.MustNewUserID(),
|
|
Login: userWithID.Login,
|
|
Password: userWithIDPass,
|
|
}
|
|
)
|
|
|
|
ctx := testutil.ContextWithTimeout(t, testTimeout)
|
|
|
|
err = db.Create(ctx, userWithID)
|
|
require.NoError(t, err)
|
|
|
|
err = db.Create(ctx, userSecond)
|
|
require.NoError(t, err)
|
|
|
|
err = db.Create(ctx, userDuplicateLogin)
|
|
assert.ErrorIs(t, err, errors.ErrDuplicated)
|
|
|
|
got, err := db.ByUUID(ctx, userWithID.ID)
|
|
require.NoError(t, err)
|
|
|
|
assert.Equal(t, userWithID, got)
|
|
assert.True(t, got.Password.Authenticate(ctx, userWithIDPassRaw))
|
|
|
|
got, err = db.ByLogin(ctx, userSecond.Login)
|
|
require.NoError(t, err)
|
|
|
|
assert.Equal(t, userSecond, got)
|
|
assert.True(t, got.Password.Authenticate(ctx, userSecondPassRaw))
|
|
|
|
users, err := db.All(ctx)
|
|
require.NoError(t, err)
|
|
|
|
assert.Len(t, users, 2)
|
|
assert.Equal(t, []*aghuser.User{userSecond, userWithID}, users)
|
|
}
|