From cf96a0087fc11d060f982c2ade744382b74d85fc Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Mon, 14 Aug 2023 14:15:52 +0530 Subject: [PATCH] Fix tests for verifying otp using mfa session --- server/resolvers/verify_otp.go | 18 ++++++++++++++++++ server/test/mobile_login_test.go | 17 +++++++++++++++++ server/test/mobile_signup_test.go | 15 +++++++++++++++ server/test/resend_otp_test.go | 15 +++++++++++++++ server/test/verify_otp_test.go | 16 +++++++++++++++- 5 files changed, 80 insertions(+), 1 deletion(-) diff --git a/server/resolvers/verify_otp.go b/server/resolvers/verify_otp.go index adf0e35..6a63683 100644 --- a/server/resolvers/verify_otp.go +++ b/server/resolvers/verify_otp.go @@ -31,6 +31,15 @@ func VerifyOtpResolver(ctx context.Context, params model.VerifyOTPRequest) (*mod mfaSession, err := cookie.GetMfaSession(gc) if err != nil { log.Debug("Failed to get otp request by email: ", err) + // // Ignore mfa session error in test env + // // dont trigger email sending in case of test + // envKey, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyEnv) + // if err != nil { + // envKey = "" + // } + // if envKey != constants.TestEnv { + // + // } return res, fmt.Errorf(`invalid session: %s`, err.Error()) } @@ -76,6 +85,15 @@ func VerifyOtpResolver(ctx context.Context, params model.VerifyOTPRequest) (*mod if _, err := memorystore.Provider.GetMfaSession(user.ID, mfaSession); err != nil { log.Debug("Failed to get mfa session: ", err) + // Ignore mfa session error in test env + // dont trigger email sending in case of test + // envKey, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyEnv) + // if err != nil { + // envKey = "" + // } + // if envKey != constants.TestEnv { + // + // } return res, fmt.Errorf(`invalid session: %s`, err.Error()) } diff --git a/server/test/mobile_login_test.go b/server/test/mobile_login_test.go index 4cc181a..6f0823c 100644 --- a/server/test/mobile_login_test.go +++ b/server/test/mobile_login_test.go @@ -1,12 +1,18 @@ package test import ( + "fmt" + "strings" "testing" + "time" + "github.com/authorizerdev/authorizer/server/constants" "github.com/authorizerdev/authorizer/server/db" "github.com/authorizerdev/authorizer/server/graph/model" + "github.com/authorizerdev/authorizer/server/memorystore" "github.com/authorizerdev/authorizer/server/refs" "github.com/authorizerdev/authorizer/server/resolvers" + "github.com/google/uuid" "github.com/stretchr/testify/assert" ) @@ -48,6 +54,17 @@ func mobileLoginTests(t *testing.T, s TestSetup) { smsRequest, err := db.Provider.GetOTPByPhoneNumber(ctx, phoneNumber) assert.NoError(t, err) assert.NotEmpty(t, smsRequest.Otp) + // Get user by phone number + user, err := db.Provider.GetUserByPhoneNumber(ctx, phoneNumber) + assert.NoError(t, err) + assert.NotNil(t, user) + // Set mfa cookie session + mfaSession := uuid.NewString() + memorystore.Provider.SetMfaSession(user.ID, mfaSession, time.Now().Add(1*time.Minute).Unix()) + cookie := fmt.Sprintf("%s=%s;", constants.MfaCookieName+"_session", mfaSession) + cookie = strings.TrimSuffix(cookie, ";") + req, ctx := createContext(s) + req.Header.Set("Cookie", cookie) verifySMSRequest, err := resolvers.VerifyOtpResolver(ctx, model.VerifyOTPRequest{ PhoneNumber: &phoneNumber, Otp: smsRequest.Otp, diff --git a/server/test/mobile_signup_test.go b/server/test/mobile_signup_test.go index c93472f..e0982e1 100644 --- a/server/test/mobile_signup_test.go +++ b/server/test/mobile_signup_test.go @@ -1,7 +1,10 @@ package test import ( + "fmt" + "strings" "testing" + "time" "github.com/authorizerdev/authorizer/server/constants" "github.com/authorizerdev/authorizer/server/db" @@ -9,6 +12,7 @@ import ( "github.com/authorizerdev/authorizer/server/memorystore" "github.com/authorizerdev/authorizer/server/refs" "github.com/authorizerdev/authorizer/server/resolvers" + "github.com/google/uuid" "github.com/stretchr/testify/assert" ) @@ -79,6 +83,17 @@ func mobileSingupTest(t *testing.T, s TestSetup) { otp, err := db.Provider.GetOTPByPhoneNumber(ctx, phoneNumber) assert.Nil(t, err) assert.NotEmpty(t, otp.Otp) + // Get user by phone number + user, err := db.Provider.GetUserByPhoneNumber(ctx, phoneNumber) + assert.NoError(t, err) + assert.NotNil(t, user) + // Set mfa cookie session + mfaSession := uuid.NewString() + memorystore.Provider.SetMfaSession(user.ID, mfaSession, time.Now().Add(1*time.Minute).Unix()) + cookie := fmt.Sprintf("%s=%s;", constants.MfaCookieName+"_session", mfaSession) + cookie = strings.TrimSuffix(cookie, ";") + req, ctx := createContext(s) + req.Header.Set("Cookie", cookie) otpRes, err := resolvers.VerifyOtpResolver(ctx, model.VerifyOTPRequest{ PhoneNumber: &phoneNumber, Otp: otp.Otp, diff --git a/server/test/resend_otp_test.go b/server/test/resend_otp_test.go index 1550957..3f1e738 100644 --- a/server/test/resend_otp_test.go +++ b/server/test/resend_otp_test.go @@ -2,13 +2,18 @@ package test import ( "context" + "fmt" + "strings" "testing" + "time" "github.com/authorizerdev/authorizer/server/constants" "github.com/authorizerdev/authorizer/server/db" "github.com/authorizerdev/authorizer/server/graph/model" + "github.com/authorizerdev/authorizer/server/memorystore" "github.com/authorizerdev/authorizer/server/refs" "github.com/authorizerdev/authorizer/server/resolvers" + "github.com/google/uuid" "github.com/stretchr/testify/assert" ) @@ -89,6 +94,16 @@ func resendOTPTest(t *testing.T, s TestSetup) { }) assert.Error(t, err) assert.Nil(t, verifyOtpRes) + // Get user by email + user, err := db.Provider.GetUserByEmail(ctx, email) + assert.NoError(t, err) + assert.NotNil(t, user) + // Set mfa cookie session + mfaSession := uuid.NewString() + memorystore.Provider.SetMfaSession(user.ID, mfaSession, time.Now().Add(1*time.Minute).Unix()) + cookie := fmt.Sprintf("%s=%s;", constants.MfaCookieName+"_session", mfaSession) + cookie = strings.TrimSuffix(cookie, ";") + req.Header.Set("Cookie", cookie) verifyOtpRes, err = resolvers.VerifyOtpResolver(ctx, model.VerifyOTPRequest{ Email: &email, Otp: newOtp.Otp, diff --git a/server/test/verify_otp_test.go b/server/test/verify_otp_test.go index 750deb5..455ac12 100644 --- a/server/test/verify_otp_test.go +++ b/server/test/verify_otp_test.go @@ -2,13 +2,18 @@ package test import ( "context" + "fmt" + "strings" "testing" + "time" "github.com/authorizerdev/authorizer/server/constants" "github.com/authorizerdev/authorizer/server/db" "github.com/authorizerdev/authorizer/server/graph/model" + "github.com/authorizerdev/authorizer/server/memorystore" "github.com/authorizerdev/authorizer/server/refs" "github.com/authorizerdev/authorizer/server/resolvers" + "github.com/google/uuid" "github.com/stretchr/testify/assert" ) @@ -63,7 +68,16 @@ func verifyOTPTest(t *testing.T, s TestSetup) { otp, err := db.Provider.GetOTPByEmail(ctx, email) assert.NoError(t, err) assert.NotEmpty(t, otp.Otp) - + // Get user by email + user, err := db.Provider.GetUserByEmail(ctx, email) + assert.NoError(t, err) + assert.NotNil(t, user) + // Set mfa cookie session + mfaSession := uuid.NewString() + memorystore.Provider.SetMfaSession(user.ID, mfaSession, time.Now().Add(1*time.Minute).Unix()) + cookie := fmt.Sprintf("%s=%s;", constants.MfaCookieName+"_session", mfaSession) + cookie = strings.TrimSuffix(cookie, ";") + req.Header.Set("Cookie", cookie) verifyOtpRes, err := resolvers.VerifyOtpResolver(ctx, model.VerifyOTPRequest{ Email: &email, Otp: otp.Otp,