implement and test forget and reset nkode
This commit is contained in:
@@ -20,7 +20,7 @@ import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNkodeAPI(t *testing.T) {
|
||||
func TestNKodeAPI(t *testing.T) {
|
||||
tr := NewTestRouter()
|
||||
tr.Start()
|
||||
defer func(tr *TestRouter) {
|
||||
@@ -34,10 +34,9 @@ func TestNkodeAPI(t *testing.T) {
|
||||
attrPerKey := 9
|
||||
numKeys := 6
|
||||
userEmail := "test_username" + security.GenerateRandomString(12) + "@example.com"
|
||||
reset := false
|
||||
|
||||
// *** Signup ***
|
||||
resp, status, err := tr.Signup(customerID, attrPerKey, numKeys, userEmail, reset)
|
||||
resp, status, err := tr.Signup(customerID, attrPerKey, numKeys, userEmail)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 200, status)
|
||||
|
||||
@@ -82,7 +81,54 @@ func TestNkodeAPI(t *testing.T) {
|
||||
assert.NotEmpty(t, tokens.RefreshToken)
|
||||
|
||||
// *** Renew Attributes ***
|
||||
status, err = tr.RenewAttributes(customerID)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 200, status)
|
||||
loginInterface, status, err = tr.GetLoginInterface(userEmail, customerID)
|
||||
assert.NoError(t, err)
|
||||
loginKeySelection, err = entities.SelectKeyByAttrIdx(loginInterface.UserIdxInterface, userPasscode, kp)
|
||||
assert.NoError(t, err)
|
||||
tokens, status, err = tr.Login(customerID, userEmail, loginKeySelection)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// *** Test Forgot nKode ***
|
||||
status, err = tr.ForgotNKode(customerID, userEmail)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 200, status)
|
||||
|
||||
// *** Test Reset nKode ***
|
||||
nkodeResetJwt, err := security.ResetNKodeToken(userEmail, customerID)
|
||||
assert.NoError(t, err)
|
||||
resetResp, status, err := tr.Reset(customerID, attrPerKey, numKeys, userEmail, nkodeResetJwt)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 200, status)
|
||||
assert.NotEmpty(t, resetResp.SessionId)
|
||||
userPasscode = resetResp.UserIdxInterface[:passcodeLen]
|
||||
setKeySelection, err = entities.SelectKeyByAttrIdx(resetResp.UserIdxInterface, userPasscode, kpSet)
|
||||
assert.NoError(t, err)
|
||||
confirmInterface, status, err = tr.SetNKode(customerID, setKeySelection, resetResp.SessionId)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 200, status)
|
||||
confirmKeySelection, err = entities.SelectKeyByAttrIdx(confirmInterface, userPasscode, kpSet)
|
||||
assert.NoError(t, err)
|
||||
status, err = tr.ConfirmNKode(customerID, confirmKeySelection, resetResp.SessionId)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 200, status)
|
||||
loginInterface, status, err = tr.GetLoginInterface(userEmail, customerID)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 200, status)
|
||||
loginKeySelection, err = entities.SelectKeyByAttrIdx(loginInterface.UserIdxInterface, userPasscode, kp)
|
||||
assert.NoError(t, err)
|
||||
tokens, status, err = tr.Login(customerID, userEmail, loginKeySelection)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 200, status)
|
||||
assert.NotEmpty(t, tokens.AccessToken)
|
||||
assert.NotEmpty(t, tokens.RefreshToken)
|
||||
|
||||
// *** Test Reset nKode with invalid token ***
|
||||
_, status, err = tr.Reset(customerID, attrPerKey, numKeys, userEmail, "invalid token")
|
||||
assert.Error(t, err)
|
||||
assert.Equal(t, 403, status)
|
||||
}
|
||||
|
||||
type TestRouter struct {
|
||||
@@ -102,8 +148,8 @@ func NewTestRouter() *TestRouter {
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
sesClient := email.NewSESClient()
|
||||
emailQueue := email.NewEmailQueue(email.EmailQueueBufferSize, email.MaxEmailsPerSecond, &sesClient)
|
||||
emailClient := email.TestEmailClient{}
|
||||
emailQueue := email.NewEmailQueue(email.EmailQueueBufferSize, email.MaxEmailsPerSecond, &emailClient)
|
||||
nkodeAPI := api.NewNKodeAPI(repo, emailQueue)
|
||||
h := NkodeHandler{
|
||||
API: nkodeAPI,
|
||||
@@ -157,15 +203,13 @@ func (r *TestRouter) Signup(
|
||||
attrsPerKey int,
|
||||
numberOfKeys int,
|
||||
userEmail string,
|
||||
reset bool,
|
||||
) (*entities.SignupResetInterface, int, error) {
|
||||
body := bytes.NewBufferString(fmt.Sprintf(
|
||||
"customer_id=%s&attrs_per_key=%d&numb_of_keys=%d&email=%s&reset=%t",
|
||||
"customer_id=%s&attrs_per_key=%d&numb_of_keys=%d&email=%s",
|
||||
customerID,
|
||||
attrsPerKey,
|
||||
numberOfKeys,
|
||||
userEmail,
|
||||
reset,
|
||||
))
|
||||
req := httptest.NewRequest(http.MethodPost, "/signup", body)
|
||||
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
@@ -290,3 +334,48 @@ func (r *TestRouter) RenewAttributes(
|
||||
r.Router.ServeHTTP(rec, req)
|
||||
return rec.Code, nil
|
||||
}
|
||||
|
||||
func (r *TestRouter) ForgotNKode(
|
||||
customerID string,
|
||||
userEmail string,
|
||||
) (int, error) {
|
||||
data := models.ForgotNKodePost{
|
||||
CustomerId: customerID,
|
||||
UserEmail: userEmail,
|
||||
}
|
||||
body, err := json.Marshal(data)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
req := httptest.NewRequest(http.MethodPost, "/forgot-nkode", bytes.NewBuffer(body))
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
rec := httptest.NewRecorder()
|
||||
r.Router.ServeHTTP(rec, req)
|
||||
return rec.Code, nil
|
||||
}
|
||||
|
||||
func (r *TestRouter) Reset(
|
||||
customerID string,
|
||||
attrsPerKey int,
|
||||
numberOfKeys int,
|
||||
userEmail string,
|
||||
resetAuthToken string,
|
||||
) (*entities.SignupResetInterface, int, error) {
|
||||
body := bytes.NewBufferString(fmt.Sprintf(
|
||||
"customer_id=%s&attrs_per_key=%d&numb_of_keys=%d&email=%s",
|
||||
customerID,
|
||||
attrsPerKey,
|
||||
numberOfKeys,
|
||||
userEmail,
|
||||
))
|
||||
req := httptest.NewRequest(http.MethodPost, "/reset-nkode", body)
|
||||
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
req.Header.Set("Authorization", "Bearer "+resetAuthToken)
|
||||
rec := httptest.NewRecorder()
|
||||
r.Router.ServeHTTP(rec, req)
|
||||
var resp entities.SignupResetInterface
|
||||
if err := json.Unmarshal(rec.Body.Bytes(), &resp); err != nil {
|
||||
return nil, rec.Code, err
|
||||
}
|
||||
return &resp, rec.Code, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user