authorizer/server/test/integration_test.go

156 lines
4.8 KiB
Go
Raw Normal View History

2022-01-17 06:02:13 +00:00
package test
import (
2022-07-10 16:19:33 +00:00
"context"
"os"
"strings"
2022-01-17 06:02:13 +00:00
"testing"
"time"
2022-01-17 06:02:13 +00:00
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/db"
2023-08-01 10:39:17 +00:00
"github.com/authorizerdev/authorizer/server/db/models"
2022-01-17 06:02:13 +00:00
"github.com/authorizerdev/authorizer/server/env"
2022-05-30 03:49:55 +00:00
"github.com/authorizerdev/authorizer/server/memorystore"
"github.com/authorizerdev/authorizer/server/utils"
2022-01-17 06:02:13 +00:00
)
func TestResolvers(t *testing.T) {
databases := map[string]string{
2023-01-17 20:08:00 +00:00
constants.DbTypeSqlite: "../../test.db",
constants.DbTypeArangodb: "http://localhost:8529",
constants.DbTypeMongodb: "mongodb://localhost:27017",
constants.DbTypeScyllaDB: "127.0.0.1:9042",
constants.DbTypeDynamoDB: "http://0.0.0.0:8000",
constants.DbTypeCouchbaseDB: "couchbase://127.0.0.1",
}
testDBs := strings.Split(os.Getenv("TEST_DBS"), ",")
t.Log("Running tests for following dbs: ", testDBs)
for dbType := range databases {
if !utils.StringSliceContains(testDBs, dbType) {
delete(databases, dbType)
}
}
if utils.StringSliceContains(testDBs, constants.DbTypeSqlite) && len(testDBs) == 1 {
// do nothing
} else {
t.Log("waiting for docker containers to start...")
// wait for docker containers to spun up
time.Sleep(30 * time.Second)
2022-01-17 06:02:13 +00:00
}
2022-03-09 13:25:18 +00:00
testDb := "authorizer_test"
s := testSetup()
defer s.Server.Close()
2022-01-17 06:02:13 +00:00
for dbType, dbURL := range databases {
2022-07-10 16:19:33 +00:00
ctx := context.Background()
2022-05-30 07:17:50 +00:00
memorystore.Provider.UpdateEnvVariable(constants.EnvKeyDatabaseURL, dbURL)
memorystore.Provider.UpdateEnvVariable(constants.EnvKeyDatabaseType, dbType)
memorystore.Provider.UpdateEnvVariable(constants.EnvKeyDatabaseName, testDb)
os.Setenv(constants.EnvKeyDatabaseURL, dbURL)
os.Setenv(constants.EnvKeyDatabaseType, dbType)
os.Setenv(constants.EnvKeyDatabaseName, testDb)
if dbType == constants.DbTypeDynamoDB {
memorystore.Provider.UpdateEnvVariable(constants.EnvAwsRegion, "ap-south-1")
os.Setenv(constants.EnvAwsRegion, "ap-south-1")
2023-07-23 01:59:29 +00:00
os.Unsetenv(constants.EnvAwsAccessKeyID)
os.Unsetenv(constants.EnvAwsSecretAccessKey)
// Remove aws credentials from env, so that local dynamodb can be used
memorystore.Provider.UpdateEnvVariable(constants.EnvAwsAccessKeyID, "")
memorystore.Provider.UpdateEnvVariable(constants.EnvAwsSecretAccessKey, "")
}
2023-01-24 23:49:01 +00:00
if dbType == constants.DbTypeCouchbaseDB {
memorystore.Provider.UpdateEnvVariable(constants.EnvKeyDatabaseUsername, "Administrator")
os.Setenv(constants.EnvKeyDatabaseUsername, "Administrator")
memorystore.Provider.UpdateEnvVariable(constants.EnvKeyDatabasePassword, "password")
os.Setenv(constants.EnvKeyDatabasePassword, "password")
}
memorystore.InitRequiredEnv()
2022-03-02 12:12:31 +00:00
err := db.InitDB()
if err != nil {
t.Logf("Error initializing database: %s", err.Error())
2022-03-02 12:12:31 +00:00
}
2022-01-17 06:02:13 +00:00
// clean the persisted config for test to use fresh config
2022-07-10 16:19:33 +00:00
envData, err := db.Provider.GetEnv(ctx)
2023-08-01 10:39:17 +00:00
if err == nil && envData == nil {
envData = &models.Env{
EnvData: "",
}
_, err = db.Provider.UpdateEnv(ctx, envData)
if err != nil {
t.Logf("Error updating env: %s", err.Error())
}
} else if err != nil {
t.Logf("Error getting env: %s", err.Error())
}
err = env.PersistEnv()
if err != nil {
t.Logf("Error persisting env: %s", err.Error())
2022-01-17 06:02:13 +00:00
}
2022-05-30 07:17:50 +00:00
memorystore.Provider.UpdateEnvVariable(constants.EnvKeyEnv, "test")
memorystore.Provider.UpdateEnvVariable(constants.EnvKeyIsProd, false)
2022-01-17 06:02:13 +00:00
t.Run("should pass tests for "+dbType, func(t *testing.T) {
2022-07-11 14:10:54 +00:00
// admin resolvers tests
2022-01-17 06:02:13 +00:00
adminSignupTests(t, s)
2022-07-11 14:10:54 +00:00
addWebhookTest(t, s) // add webhooks for all the system events
testEndpointTest(t, s)
2022-01-17 06:02:13 +00:00
verificationRequestsTest(t, s)
2022-07-11 14:10:54 +00:00
updateWebhookTest(t, s)
webhookTest(t, s)
webhooksTest(t, s)
//usersTest(t, s)
2023-01-05 14:46:41 +00:00
userTest(t, s)
2022-01-17 06:02:13 +00:00
deleteUserTest(t, s)
//updateUserTest(t, s)
2022-01-17 06:02:13 +00:00
adminLoginTests(t, s)
adminLogoutTests(t, s)
adminSessionTests(t, s)
updateEnvTests(t, s)
envTests(t, s)
revokeAccessTest(t, s)
enableAccessTest(t, s)
2022-03-24 13:53:43 +00:00
generateJWTkeyTest(t, s)
addEmailTemplateTest(t, s)
updateEmailTemplateTest(t, s)
emailTemplatesTest(t, s)
deleteEmailTemplateTest(t, s)
2022-01-17 06:02:13 +00:00
2022-07-11 14:10:54 +00:00
// user resolvers tests
2022-01-17 06:02:13 +00:00
loginTests(t, s)
signupTests(t, s)
2022-12-24 21:52:42 +00:00
mobileSingupTest(t, s)
mobileLoginTests(t, s)
totpLoginTest(t, s)
totpSignupTest(t, s)
2022-01-17 06:02:13 +00:00
forgotPasswordTest(t, s)
resendVerifyEmailTests(t, s)
resetPasswordTest(t, s)
verifyEmailTest(t, s)
sessionTests(t, s)
profileTests(t, s)
updateProfileTests(t, s)
magicLinkLoginTests(t, s)
logoutTests(t, s)
metaTests(t, s)
inviteUserTest(t, s)
validateJwtTokenTest(t, s)
verifyOTPTest(t, s)
2022-07-29 19:42:20 +00:00
resendOTPTest(t, s)
validateSessionTests(t, s)
2023-10-10 18:46:53 +00:00
deactivateAccountTests(t, s)
updateAllUsersTest(t, s)
webhookLogsTest(t, s) // get logs after above resolver tests are done
deleteWebhookTest(t, s) // delete webhooks (admin resolver)
2022-01-17 06:02:13 +00:00
})
}
}