Integration test (sort of) for account verify
This commit is contained in:
parent
f60e5659b6
commit
510dfe2b96
1 changed files with 131 additions and 9 deletions
|
@ -10,6 +10,7 @@ import (
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"lbryio/lbry-id/auth"
|
"lbryio/lbry-id/auth"
|
||||||
|
@ -80,9 +81,11 @@ func request(t *testing.T, method string, handler func(http.ResponseWriter, *htt
|
||||||
handler(w, req)
|
handler(w, req)
|
||||||
responseBody, _ := ioutil.ReadAll(w.Body)
|
responseBody, _ := ioutil.ReadAll(w.Body)
|
||||||
|
|
||||||
err := json.Unmarshal(responseBody, &jsonResult)
|
if jsonResult != nil {
|
||||||
if err != nil {
|
err := json.Unmarshal(responseBody, &jsonResult)
|
||||||
t.Errorf("Error unmarshalling response body err: %+v body: %s", err, responseBody)
|
if err != nil {
|
||||||
|
t.Errorf("Error unmarshalling response body err: %+v body: %s", err, responseBody)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return responseBody, w.Result().StatusCode
|
return responseBody, w.Result().StatusCode
|
||||||
|
@ -93,8 +96,9 @@ func TestIntegrationWalletUpdates(t *testing.T) {
|
||||||
st, tmpFile := storeTestInit(t)
|
st, tmpFile := storeTestInit(t)
|
||||||
defer storeTestCleanup(tmpFile)
|
defer storeTestCleanup(tmpFile)
|
||||||
|
|
||||||
|
// Excluding env and email from the integration
|
||||||
env := map[string]string{
|
env := map[string]string{
|
||||||
"ACCOUNT_VERIFICATION_MODE": "EmailVerify",
|
"ACCOUNT_WHITELIST": "abc@example.com",
|
||||||
}
|
}
|
||||||
s := Server{&auth.Auth{}, &st, &TestEnv{env}, &TestMail{}}
|
s := Server{&auth.Auth{}, &st, &TestEnv{env}, &TestMail{}}
|
||||||
|
|
||||||
|
@ -133,7 +137,7 @@ func TestIntegrationWalletUpdates(t *testing.T) {
|
||||||
// result.Token is in hex, auth.TokenLength is bytes in the original
|
// result.Token is in hex, auth.TokenLength is bytes in the original
|
||||||
expectedTokenLength := auth.TokenLength * 2
|
expectedTokenLength := auth.TokenLength * 2
|
||||||
if len(authToken1.Token) != expectedTokenLength {
|
if len(authToken1.Token) != expectedTokenLength {
|
||||||
t.Fatalf("Expected auth response to contain token length 32: result: %+v", string(responseBody))
|
t.Fatalf("Expected auth response to contain token length %d: result: %+v", auth.TokenLength, string(responseBody))
|
||||||
}
|
}
|
||||||
if authToken1.DeviceId != "dev-1" {
|
if authToken1.DeviceId != "dev-1" {
|
||||||
t.Fatalf("Unexpected response DeviceId. want: %+v got: %+v", "dev-1", authToken1.DeviceId)
|
t.Fatalf("Unexpected response DeviceId. want: %+v got: %+v", "dev-1", authToken1.DeviceId)
|
||||||
|
@ -262,8 +266,9 @@ func TestIntegrationChangePassword(t *testing.T) {
|
||||||
st, tmpFile := storeTestInit(t)
|
st, tmpFile := storeTestInit(t)
|
||||||
defer storeTestCleanup(tmpFile)
|
defer storeTestCleanup(tmpFile)
|
||||||
|
|
||||||
|
// Excluding env and email from the integration
|
||||||
env := map[string]string{
|
env := map[string]string{
|
||||||
"ACCOUNT_VERIFICATION_MODE": "EmailVerify",
|
"ACCOUNT_WHITELIST": "abc@example.com",
|
||||||
}
|
}
|
||||||
s := Server{&auth.Auth{}, &st, &TestEnv{env}, &TestMail{}}
|
s := Server{&auth.Auth{}, &st, &TestEnv{env}, &TestMail{}}
|
||||||
|
|
||||||
|
@ -324,7 +329,7 @@ func TestIntegrationChangePassword(t *testing.T) {
|
||||||
// result.Token is in hex, auth.TokenLength is bytes in the original
|
// result.Token is in hex, auth.TokenLength is bytes in the original
|
||||||
expectedTokenLength := auth.TokenLength * 2
|
expectedTokenLength := auth.TokenLength * 2
|
||||||
if len(authToken.Token) != expectedTokenLength {
|
if len(authToken.Token) != expectedTokenLength {
|
||||||
t.Fatalf("Expected auth response to contain token length 32: result: %+v", string(responseBody))
|
t.Fatalf("Expected auth response to contain token length %d: result: %+v", auth.TokenLength, string(responseBody))
|
||||||
}
|
}
|
||||||
if authToken.DeviceId != "dev-1" {
|
if authToken.DeviceId != "dev-1" {
|
||||||
t.Fatalf("Unexpected response DeviceId. want: %+v got: %+v", "dev-1", authToken.DeviceId)
|
t.Fatalf("Unexpected response DeviceId. want: %+v got: %+v", "dev-1", authToken.DeviceId)
|
||||||
|
@ -407,7 +412,7 @@ func TestIntegrationChangePassword(t *testing.T) {
|
||||||
// result.Token is in hex, auth.TokenLength is bytes in the original
|
// result.Token is in hex, auth.TokenLength is bytes in the original
|
||||||
expectedTokenLength = auth.TokenLength * 2
|
expectedTokenLength = auth.TokenLength * 2
|
||||||
if len(authToken.Token) != expectedTokenLength {
|
if len(authToken.Token) != expectedTokenLength {
|
||||||
t.Fatalf("Expected auth response to contain token length 32: result: %+v", string(responseBody))
|
t.Fatalf("Expected auth response to contain token length %d: result: %+v", auth.TokenLength, string(responseBody))
|
||||||
}
|
}
|
||||||
if authToken.DeviceId != "dev-1" {
|
if authToken.DeviceId != "dev-1" {
|
||||||
t.Fatalf("Unexpected response DeviceId. want: %+v got: %+v", "dev-1", authToken.DeviceId)
|
t.Fatalf("Unexpected response DeviceId. want: %+v got: %+v", "dev-1", authToken.DeviceId)
|
||||||
|
@ -512,7 +517,7 @@ func TestIntegrationChangePassword(t *testing.T) {
|
||||||
// result.Token is in hex, auth.TokenLength is bytes in the original
|
// result.Token is in hex, auth.TokenLength is bytes in the original
|
||||||
expectedTokenLength = auth.TokenLength * 2
|
expectedTokenLength = auth.TokenLength * 2
|
||||||
if len(authToken.Token) != expectedTokenLength {
|
if len(authToken.Token) != expectedTokenLength {
|
||||||
t.Fatalf("Expected auth response to contain token length 32: result: %+v", string(responseBody))
|
t.Fatalf("Expected auth response to contain token length %d: result: %+v", auth.TokenLength, string(responseBody))
|
||||||
}
|
}
|
||||||
if authToken.DeviceId != "dev-1" {
|
if authToken.DeviceId != "dev-1" {
|
||||||
t.Fatalf("Unexpected response DeviceId. want: %+v got: %+v", "dev-1", authToken.DeviceId)
|
t.Fatalf("Unexpected response DeviceId. want: %+v got: %+v", "dev-1", authToken.DeviceId)
|
||||||
|
@ -546,3 +551,120 @@ func TestIntegrationChangePassword(t *testing.T) {
|
||||||
t.Fatalf("Unexpected response values. want: %+v got: %+v", expectedResponse, walletGetResponse)
|
t.Fatalf("Unexpected response values. want: %+v got: %+v", expectedResponse, walletGetResponse)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIntegrationVerifyAccount(t *testing.T) {
|
||||||
|
st, tmpFile := storeTestInit(t)
|
||||||
|
defer storeTestCleanup(tmpFile)
|
||||||
|
|
||||||
|
// Excluding env and email from the integration. We will spy on emails sent.
|
||||||
|
env := map[string]string{
|
||||||
|
"ACCOUNT_VERIFICATION_MODE": "EmailVerify",
|
||||||
|
}
|
||||||
|
testMail := TestMail{}
|
||||||
|
s := Server{&auth.Auth{}, &st, &TestEnv{env}, &testMail}
|
||||||
|
|
||||||
|
////////////////////
|
||||||
|
t.Log("Request: Register email address")
|
||||||
|
////////////////////
|
||||||
|
|
||||||
|
var registerResponse struct{}
|
||||||
|
responseBody, statusCode := request(
|
||||||
|
t,
|
||||||
|
http.MethodPost,
|
||||||
|
s.register,
|
||||||
|
PathRegister,
|
||||||
|
®isterResponse,
|
||||||
|
`{"email": "abc@example.com", "password": "123", "clientSaltSeed": "1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd"}`,
|
||||||
|
)
|
||||||
|
|
||||||
|
checkStatusCode(t, statusCode, responseBody, http.StatusCreated)
|
||||||
|
|
||||||
|
// result.Token is in hex, auth.TokenLength is bytes in the original
|
||||||
|
expectedTokenLength := auth.TokenLength * 2
|
||||||
|
if len(testMail.SendVerificationEmailCall.Token) != expectedTokenLength {
|
||||||
|
t.Fatalf("Expected account verify email to contain token length %d: result: %+v", auth.TokenLength, string(responseBody))
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////
|
||||||
|
t.Log("Request: Resend verify email")
|
||||||
|
////////////////////
|
||||||
|
|
||||||
|
var resendVerifyResponse struct{}
|
||||||
|
responseBody, statusCode = request(
|
||||||
|
t,
|
||||||
|
http.MethodPost,
|
||||||
|
s.resendVerifyEmail,
|
||||||
|
PathResendVerify,
|
||||||
|
&resendVerifyResponse,
|
||||||
|
`{"email": "abc@example.com"}`,
|
||||||
|
)
|
||||||
|
|
||||||
|
checkStatusCode(t, statusCode, responseBody)
|
||||||
|
|
||||||
|
// result.Token is in hex, auth.TokenLength is bytes in the original
|
||||||
|
expectedTokenLength = auth.TokenLength * 2
|
||||||
|
if len(testMail.SendVerificationEmailCall.Token) != expectedTokenLength {
|
||||||
|
t.Fatalf("Expected account verify email to contain token length %d: result: %+v", auth.TokenLength, string(responseBody))
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////
|
||||||
|
t.Log("Request: Get auth token and fail for not being verified")
|
||||||
|
////////////////////
|
||||||
|
|
||||||
|
var authToken auth.AuthToken
|
||||||
|
responseBody, statusCode = request(
|
||||||
|
t,
|
||||||
|
http.MethodPost,
|
||||||
|
s.getAuthToken,
|
||||||
|
PathAuthToken,
|
||||||
|
&authToken,
|
||||||
|
`{"deviceId": "dev-1", "email": "abc@example.com", "password": "123"}`,
|
||||||
|
)
|
||||||
|
|
||||||
|
checkStatusCode(t, statusCode, responseBody, http.StatusUnauthorized)
|
||||||
|
|
||||||
|
////////////////////
|
||||||
|
t.Log("Request: Verify account")
|
||||||
|
////////////////////
|
||||||
|
|
||||||
|
responseBody, statusCode = request(
|
||||||
|
t,
|
||||||
|
http.MethodGet,
|
||||||
|
s.verify,
|
||||||
|
PathVerify+"?verifyToken="+string(testMail.SendVerificationEmailCall.Token),
|
||||||
|
nil,
|
||||||
|
``,
|
||||||
|
)
|
||||||
|
|
||||||
|
checkStatusCode(t, statusCode, responseBody)
|
||||||
|
if strings.TrimSpace(string(responseBody)) != "Your account has been verified." {
|
||||||
|
t.Fatalf("Unexpected resonse from verify account endpoint. Got: '" + string(responseBody) + "'")
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////
|
||||||
|
t.Log("Request: Get auth token")
|
||||||
|
////////////////////
|
||||||
|
|
||||||
|
responseBody, statusCode = request(
|
||||||
|
t,
|
||||||
|
http.MethodPost,
|
||||||
|
s.getAuthToken,
|
||||||
|
PathAuthToken,
|
||||||
|
&authToken,
|
||||||
|
`{"deviceId": "dev-1", "email": "abc@example.com", "password": "123"}`,
|
||||||
|
)
|
||||||
|
|
||||||
|
checkStatusCode(t, statusCode, responseBody)
|
||||||
|
|
||||||
|
// result.Token is in hex, auth.TokenLength is bytes in the original
|
||||||
|
expectedTokenLength = auth.TokenLength * 2
|
||||||
|
if len(authToken.Token) != expectedTokenLength {
|
||||||
|
t.Fatalf("Expected auth response to contain token length %d: result: %+v", auth.TokenLength, string(responseBody))
|
||||||
|
}
|
||||||
|
if authToken.DeviceId != "dev-1" {
|
||||||
|
t.Fatalf("Unexpected response DeviceId. want: %+v got: %+v", "dev-1", authToken.DeviceId)
|
||||||
|
}
|
||||||
|
if authToken.Scope != auth.ScopeFull {
|
||||||
|
t.Fatalf("Unexpected response Scope. want: %+v got: %+v", auth.ScopeFull, authToken.Scope)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue