116 lines
4.6 KiB
Go
116 lines
4.6 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
"git.infra.nkode.tech/dkelly/nkode-core/email"
|
|
"git.infra.nkode.tech/dkelly/nkode-core/entities"
|
|
"git.infra.nkode.tech/dkelly/nkode-core/repository"
|
|
"git.infra.nkode.tech/dkelly/nkode-core/security"
|
|
"github.com/stretchr/testify/assert"
|
|
"log"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestNKodeAPI(t *testing.T) {
|
|
//db1 := NewInMemoryDb()
|
|
//testNKodeAPI(t, &db1)
|
|
|
|
dbPath := os.Getenv("TEST_DB")
|
|
ctx := context.Background()
|
|
sqlitedb, err := repository.NewSqliteRepository(ctx, dbPath)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
sqlitedb.Start()
|
|
defer func(sqldb *repository.SqliteRepository) {
|
|
if err := sqldb.Stop(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}(sqlitedb)
|
|
testNKodeAPI(t, sqlitedb)
|
|
|
|
}
|
|
|
|
func testNKodeAPI(t *testing.T, db repository.CustomerUserRepository) {
|
|
bufferSize := 100
|
|
emailsPerSec := 14
|
|
testClient := email.TestEmailClient{}
|
|
queue := email.NewEmailQueue(bufferSize, emailsPerSec, &testClient)
|
|
queue.Start()
|
|
defer queue.Stop()
|
|
attrsPerKey := 5
|
|
numbOfKeys := 4
|
|
for idx := 0; idx < 1; idx++ {
|
|
userEmail := entities.UserEmail("test_username" + security.GenerateNonSecureRandomString(12) + "@example.com")
|
|
passcodeLen := 4
|
|
nkodePolicy := entities.NewDefaultNKodePolicy()
|
|
keypadSize := entities.KeypadDimension{AttrsPerKey: attrsPerKey, NumbOfKeys: numbOfKeys}
|
|
nkodeApi := NewNKodeAPI(db, queue)
|
|
customerId, err := nkodeApi.CreateNewCustomer(nkodePolicy)
|
|
assert.NoError(t, err)
|
|
signupResponse, err := nkodeApi.GenerateSignupResetInterface(userEmail, *customerId, keypadSize, false)
|
|
assert.NoError(t, err)
|
|
setInterface := signupResponse.UserIdxInterface
|
|
sessionIdStr := signupResponse.SessionId
|
|
sessionId, err := entities.SessionIdFromString(sessionIdStr)
|
|
assert.NoError(t, err)
|
|
keypadSize = entities.KeypadDimension{AttrsPerKey: numbOfKeys, NumbOfKeys: numbOfKeys}
|
|
userPasscode := setInterface[:passcodeLen]
|
|
setKeySelect, err := entities.SelectKeyByAttrIdx(setInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
confirmInterface, err := nkodeApi.SetNKode(*customerId, sessionId, setKeySelect)
|
|
assert.NoError(t, err)
|
|
confirmKeySelect, err := entities.SelectKeyByAttrIdx(confirmInterface, userPasscode, keypadSize)
|
|
err = nkodeApi.ConfirmNKode(*customerId, sessionId, confirmKeySelect)
|
|
assert.NoError(t, err)
|
|
|
|
keypadSize = entities.KeypadDimension{AttrsPerKey: attrsPerKey, NumbOfKeys: numbOfKeys}
|
|
loginInterface, err := nkodeApi.GetLoginInterface(userEmail, *customerId)
|
|
assert.NoError(t, err)
|
|
loginKeySelection, err := entities.SelectKeyByAttrIdx(loginInterface.UserIdxInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
_, err = nkodeApi.Login(*customerId, userEmail, loginKeySelection)
|
|
assert.NoError(t, err)
|
|
|
|
err = nkodeApi.RenewAttributes(*customerId)
|
|
assert.NoError(t, err)
|
|
|
|
loginInterface, err = nkodeApi.GetLoginInterface(userEmail, *customerId)
|
|
assert.NoError(t, err)
|
|
loginKeySelection, err = entities.SelectKeyByAttrIdx(loginInterface.UserIdxInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
_, err = nkodeApi.Login(*customerId, userEmail, loginKeySelection)
|
|
assert.NoError(t, err)
|
|
|
|
/// Reset nKode
|
|
attrsPerKey = 6
|
|
keypadSize = entities.KeypadDimension{AttrsPerKey: attrsPerKey, NumbOfKeys: numbOfKeys}
|
|
resetResponse, err := nkodeApi.GenerateSignupResetInterface(userEmail, *customerId, keypadSize, true)
|
|
assert.NoError(t, err)
|
|
setInterface = resetResponse.UserIdxInterface
|
|
sessionIdStr = resetResponse.SessionId
|
|
sessionId, err = entities.SessionIdFromString(sessionIdStr)
|
|
assert.NoError(t, err)
|
|
keypadSize = entities.KeypadDimension{AttrsPerKey: numbOfKeys, NumbOfKeys: numbOfKeys}
|
|
userPasscode = setInterface[:passcodeLen]
|
|
setKeySelect, err = entities.SelectKeyByAttrIdx(setInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
confirmInterface, err = nkodeApi.SetNKode(*customerId, sessionId, setKeySelect)
|
|
assert.NoError(t, err)
|
|
confirmKeySelect, err = entities.SelectKeyByAttrIdx(confirmInterface, userPasscode, keypadSize)
|
|
err = nkodeApi.ConfirmNKode(*customerId, sessionId, confirmKeySelect)
|
|
assert.NoError(t, err)
|
|
|
|
keypadSize = entities.KeypadDimension{AttrsPerKey: attrsPerKey, NumbOfKeys: numbOfKeys}
|
|
loginInterface2, err := nkodeApi.GetLoginInterface(userEmail, *customerId)
|
|
assert.NoError(t, err)
|
|
loginKeySelection, err = entities.SelectKeyByAttrIdx(loginInterface2.UserIdxInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
_, err = nkodeApi.Login(*customerId, userEmail, loginKeySelection)
|
|
assert.NoError(t, err)
|
|
signupResponse, err = nkodeApi.GenerateSignupResetInterface(userEmail, *customerId, keypadSize, false)
|
|
assert.Error(t, err)
|
|
}
|
|
}
|