From 003cec4f4806e028322ae5fe1cc9cbcad96b982f Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Thu, 24 Mar 2022 21:50:39 +0530 Subject: [PATCH] feat: add tests for revoke and enable access --- server/test/enable_access_test.go | 57 +++++++++++++++++++++++++++++++ server/test/resolvers_test.go | 2 ++ server/test/revoke_access_test.go | 54 +++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 server/test/enable_access_test.go create mode 100644 server/test/revoke_access_test.go diff --git a/server/test/enable_access_test.go b/server/test/enable_access_test.go new file mode 100644 index 0000000..c54f91b --- /dev/null +++ b/server/test/enable_access_test.go @@ -0,0 +1,57 @@ +package test + +import ( + "fmt" + "testing" + + "github.com/authorizerdev/authorizer/server/constants" + "github.com/authorizerdev/authorizer/server/crypto" + "github.com/authorizerdev/authorizer/server/db" + "github.com/authorizerdev/authorizer/server/envstore" + "github.com/authorizerdev/authorizer/server/graph/model" + "github.com/authorizerdev/authorizer/server/resolvers" + "github.com/stretchr/testify/assert" +) + +func enableAccessTest(t *testing.T, s TestSetup) { + t.Helper() + t.Run(`should revoke access`, func(t *testing.T) { + req, ctx := createContext(s) + email := "revoke_access." + s.TestInfo.Email + _, err := resolvers.MagicLinkLoginResolver(ctx, model.MagicLinkLoginInput{ + Email: email, + }) + assert.NoError(t, err) + verificationRequest, err := db.Provider.GetVerificationRequestByEmail(email, constants.VerificationTypeMagicLinkLogin) + verifyRes, err := resolvers.VerifyEmailResolver(ctx, model.VerifyEmailInput{ + Token: verificationRequest.Token, + }) + assert.NoError(t, err) + assert.NotNil(t, verifyRes.AccessToken) + + h, err := crypto.EncryptPassword(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret)) + assert.Nil(t, err) + req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), h)) + + res, err := resolvers.RevokeAccessResolver(ctx, model.UpdateAccessInput{ + UserID: verifyRes.User.ID, + }) + assert.NoError(t, err) + assert.NotEmpty(t, res.Message) + + res, err = resolvers.EnableAccessResolver(ctx, model.UpdateAccessInput{ + UserID: verifyRes.User.ID, + }) + assert.NoError(t, err) + assert.NotEmpty(t, res.Message) + + // it should allow login with revoked access + res, err = resolvers.MagicLinkLoginResolver(ctx, model.MagicLinkLoginInput{ + Email: email, + }) + assert.Nil(t, err) + assert.NotEmpty(t, res.Message) + + cleanData(email) + }) +} diff --git a/server/test/resolvers_test.go b/server/test/resolvers_test.go index 225f656..40812b1 100644 --- a/server/test/resolvers_test.go +++ b/server/test/resolvers_test.go @@ -48,6 +48,8 @@ func TestResolvers(t *testing.T) { adminSessionTests(t, s) updateEnvTests(t, s) envTests(t, s) + revokeAccessTest(t, s) + enableAccessTest(t, s) generateJWTkeyTest(t, s) // user tests diff --git a/server/test/revoke_access_test.go b/server/test/revoke_access_test.go new file mode 100644 index 0000000..5317721 --- /dev/null +++ b/server/test/revoke_access_test.go @@ -0,0 +1,54 @@ +package test + +import ( + "fmt" + "testing" + + "github.com/authorizerdev/authorizer/server/constants" + "github.com/authorizerdev/authorizer/server/crypto" + "github.com/authorizerdev/authorizer/server/db" + "github.com/authorizerdev/authorizer/server/envstore" + "github.com/authorizerdev/authorizer/server/graph/model" + "github.com/authorizerdev/authorizer/server/resolvers" + "github.com/stretchr/testify/assert" +) + +func revokeAccessTest(t *testing.T, s TestSetup) { + t.Helper() + t.Run(`should revoke access`, func(t *testing.T) { + req, ctx := createContext(s) + email := "revoke_access." + s.TestInfo.Email + _, err := resolvers.MagicLinkLoginResolver(ctx, model.MagicLinkLoginInput{ + Email: email, + }) + assert.NoError(t, err) + verificationRequest, err := db.Provider.GetVerificationRequestByEmail(email, constants.VerificationTypeMagicLinkLogin) + verifyRes, err := resolvers.VerifyEmailResolver(ctx, model.VerifyEmailInput{ + Token: verificationRequest.Token, + }) + assert.NoError(t, err) + assert.NotNil(t, verifyRes.AccessToken) + + res, err := resolvers.RevokeAccessResolver(ctx, model.UpdateAccessInput{ + UserID: verifyRes.User.ID, + }) + assert.Error(t, err) + + h, err := crypto.EncryptPassword(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret)) + assert.Nil(t, err) + req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), h)) + + res, err = resolvers.RevokeAccessResolver(ctx, model.UpdateAccessInput{ + UserID: verifyRes.User.ID, + }) + assert.NoError(t, err) + assert.NotEmpty(t, res.Message) + + // it should not allow login with revoked access + _, err = resolvers.MagicLinkLoginResolver(ctx, model.MagicLinkLoginInput{ + Email: email, + }) + assert.Error(t, err) + cleanData(email) + }) +}