authorizer/server/test/test.go

156 lines
4.7 KiB
Go
Raw Normal View History

package test
import (
"context"
2022-01-08 12:46:26 +00:00
"fmt"
"net/http"
"net/http/httptest"
2022-05-31 02:44:03 +00:00
"os"
2022-01-08 12:46:26 +00:00
"time"
2022-05-31 02:44:03 +00:00
log "github.com/sirupsen/logrus"
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/db"
"github.com/authorizerdev/authorizer/server/env"
"github.com/authorizerdev/authorizer/server/handlers"
2022-05-27 17:50:38 +00:00
"github.com/authorizerdev/authorizer/server/memorystore"
"github.com/authorizerdev/authorizer/server/middlewares"
"github.com/gin-gonic/gin"
)
// common user data to share across tests
type TestData struct {
Email string
Password string
WebhookEndpoint string
TestWebhookEventTypes []string
TestEmailTemplateEventTypes []string
}
type TestSetup struct {
GinEngine *gin.Engine
GinContext *gin.Context
Server *httptest.Server
TestInfo TestData
}
2021-12-23 08:47:44 +00:00
func cleanData(email string) {
2022-07-10 16:19:33 +00:00
ctx := context.Background()
verificationRequest, err := db.Provider.GetVerificationRequestByEmail(ctx, email, constants.VerificationTypeBasicAuthSignup)
2022-05-11 14:55:57 +00:00
if err == nil {
2022-07-10 16:19:33 +00:00
err = db.Provider.DeleteVerificationRequest(ctx, verificationRequest)
if err != nil {
log.Debug("DeleteVerificationRequest err", err)
}
2022-05-11 14:55:57 +00:00
}
2021-12-23 08:47:44 +00:00
2022-07-10 16:19:33 +00:00
verificationRequest, err = db.Provider.GetVerificationRequestByEmail(ctx, email, constants.VerificationTypeForgotPassword)
2022-05-11 14:55:57 +00:00
if err == nil {
2022-07-10 16:19:33 +00:00
err = db.Provider.DeleteVerificationRequest(ctx, verificationRequest)
if err != nil {
log.Debug("DeleteVerificationRequest err", err)
}
2022-05-11 14:55:57 +00:00
}
2021-12-23 08:47:44 +00:00
2022-07-10 16:19:33 +00:00
verificationRequest, err = db.Provider.GetVerificationRequestByEmail(ctx, email, constants.VerificationTypeUpdateEmail)
2022-05-11 14:55:57 +00:00
if err == nil {
2022-07-10 16:19:33 +00:00
err = db.Provider.DeleteVerificationRequest(ctx, verificationRequest)
if err != nil {
log.Debug("DeleteVerificationRequest err", err)
}
2022-05-11 14:55:57 +00:00
}
2021-12-23 08:47:44 +00:00
2022-07-10 16:19:33 +00:00
verificationRequest, err = db.Provider.GetVerificationRequestByEmail(ctx, email, constants.VerificationTypeMagicLinkLogin)
2022-05-11 14:55:57 +00:00
if err == nil {
2022-07-10 16:19:33 +00:00
err = db.Provider.DeleteVerificationRequest(ctx, verificationRequest)
if err != nil {
log.Debug("DeleteVerificationRequest err", err)
}
2022-05-11 14:55:57 +00:00
}
2022-04-22 14:26:55 +00:00
2022-07-29 19:42:20 +00:00
otp, err := db.Provider.GetOTPByEmail(ctx, email)
if err == nil {
err = db.Provider.DeleteOTP(ctx, otp)
if err != nil {
log.Debug("DeleteOTP err", err)
}
2022-07-29 19:42:20 +00:00
}
2022-07-10 16:19:33 +00:00
dbUser, err := db.Provider.GetUserByEmail(ctx, email)
2022-05-11 14:55:57 +00:00
if err == nil {
err = db.Provider.DeleteUser(ctx, dbUser)
if err != nil {
log.Debug("DeleteUser err", err)
}
2022-05-11 14:55:57 +00:00
}
2021-12-23 08:47:44 +00:00
}
2021-12-24 00:57:39 +00:00
func createContext(s TestSetup) (*http.Request, context.Context) {
req, _ := http.NewRequest(
"POST",
"http://"+s.Server.Listener.Addr().String()+"/graphql",
nil,
)
ctx := context.WithValue(req.Context(), "GinContextKey", s.GinContext)
s.GinContext.Request = req
return req, ctx
}
func testSetup() TestSetup {
testData := TestData{
Email: fmt.Sprintf("%d_authorizer_tester@yopmail.com", time.Now().Unix()),
Password: "Test@123",
WebhookEndpoint: "https://62f93101e05644803533cf36.mockapi.io/authorizer/webhook",
TestWebhookEventTypes: []string{constants.UserAccessEnabledWebhookEvent, constants.UserAccessRevokedWebhookEvent, constants.UserCreatedWebhookEvent, constants.UserDeletedWebhookEvent, constants.UserLoginWebhookEvent, constants.UserSignUpWebhookEvent},
TestEmailTemplateEventTypes: []string{constants.VerificationTypeBasicAuthSignup, constants.VerificationTypeForgotPassword, constants.VerificationTypeMagicLinkLogin, constants.VerificationTypeUpdateEmail},
}
2022-05-31 02:44:03 +00:00
err := os.Setenv(constants.EnvKeyEnvPath, "../../.env.test")
if err != nil {
log.Fatal("Error loading .env.sample file")
}
err = memorystore.InitRequiredEnv()
if err != nil {
log.Fatal("Error loading required env: ", err)
}
2022-05-31 09:30:11 +00:00
err = memorystore.InitMemStore()
if err != nil {
log.Fatal("Error loading memory store: ", err)
}
2022-05-30 07:17:50 +00:00
memorystore.Provider.UpdateEnvVariable(constants.EnvKeySmtpHost, "smtp.yopmail.com")
memorystore.Provider.UpdateEnvVariable(constants.EnvKeySmtpPort, "2525")
memorystore.Provider.UpdateEnvVariable(constants.EnvKeySmtpUsername, "lakhan@yopmail.com")
memorystore.Provider.UpdateEnvVariable(constants.EnvKeySmtpPassword, "test")
memorystore.Provider.UpdateEnvVariable(constants.EnvKeySenderEmail, "info@yopmail.com")
2022-05-31 07:41:54 +00:00
memorystore.Provider.UpdateEnvVariable(constants.EnvKeyProtectedRoles, "admin")
2022-05-31 09:30:11 +00:00
err = db.InitDB()
if err != nil {
log.Fatal("Error loading db: ", err)
}
err = env.InitAllEnv()
if err != nil {
log.Fatal("Error loading env: ", err)
}
w := httptest.NewRecorder()
c, r := gin.CreateTestContext(w)
r.Use(middlewares.GinContextToContextMiddleware())
r.Use(middlewares.CORSMiddleware())
r.POST("/graphql", handlers.GraphqlHandler())
server := httptest.NewServer(r)
return TestSetup{
GinEngine: r,
GinContext: c,
Server: server,
TestInfo: testData,
}
}