customer/internal/initialize/config_test.go
2023-05-16 04:12:34 +03:00

192 lines
6.6 KiB
Go

package initialize_test
import (
"testing"
"time"
"github.com/golang-jwt/jwt/v5"
"github.com/stretchr/testify/assert"
"golang.org/x/oauth2"
"golang.org/x/oauth2/google"
"golang.org/x/oauth2/vk"
"penahub.gitlab.yandexcloud.net/pena-services/pena-social-auth/internal/initialize"
"penahub.gitlab.yandexcloud.net/pena-services/pena-social-auth/internal/models"
"penahub.gitlab.yandexcloud.net/pena-services/pena-social-auth/pkg/mongo"
)
func setDefaultTestingENV(t *testing.T) *models.Config {
t.Helper()
defaultGoogleURL := models.GoogleURL{
Redirect: "http://www.google.com/callback",
OAuthHost: "http://www.google.com/oauth",
}
defaultVKURL := models.VKURL{
Redirect: "http://www.vk.ru/callback",
}
defaultAmocrmURL := models.AmocrmURL{
Redirect: "http://www.amocrm.ru/callback",
OAuthHost: "http://www.amocrm.ru/oauth",
UserInfo: "http://www.amocrm.ru/user",
AccessToken: "http://www.amocrm.ru/token",
}
defaultAuthURL := models.AuthMicroServiceURL{
Exchange: "http://www.auth.ru/callback",
Register: "http://www.auth.ru/register",
User: "http://www.auth.ru/user",
}
defaultGoogleOAuthConfiguration := oauth2.Config{
RedirectURL: defaultGoogleURL.Redirect,
ClientID: "google_client_id",
ClientSecret: "google_client_secret",
Scopes: []string{
"openid",
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/userinfo.profile",
},
Endpoint: google.Endpoint,
}
defaultVKOAuthConfiguration := oauth2.Config{
RedirectURL: defaultVKURL.Redirect,
ClientID: "vk_client_id",
ClientSecret: "vk_client_secret",
Scopes: []string{"email"},
Endpoint: vk.Endpoint,
}
defaultAmocrmOAuthConfiguration := oauth2.Config{
RedirectURL: defaultAmocrmURL.Redirect,
ClientID: "amocrm_client_id",
ClientSecret: "amocrm_client_secret",
Scopes: nil,
Endpoint: oauth2.Endpoint{
AuthURL: defaultAmocrmURL.OAuthHost,
TokenURL: defaultAmocrmURL.AccessToken,
AuthStyle: models.BodyAuthStyle,
},
}
defaultConfiguration := models.Config{
HTTP: models.HTTPConfiguration{
Host: "localhost",
Port: "8080",
},
Service: models.ServiceConfiguration{
Google: models.GoogleConfiguration{
ClientID: defaultGoogleOAuthConfiguration.ClientID,
ClientSecret: defaultGoogleOAuthConfiguration.ClientSecret,
OAuthConfig: defaultGoogleOAuthConfiguration,
URL: defaultGoogleURL,
},
VK: models.VKConfiguration{
ClientID: defaultVKOAuthConfiguration.ClientID,
ClientSecret: defaultVKOAuthConfiguration.ClientSecret,
OAuthConfig: defaultVKOAuthConfiguration,
URL: defaultVKURL,
},
Amocrm: models.AmocrmConfiguration{
ClientID: defaultAmocrmOAuthConfiguration.ClientID,
ClientSecret: defaultAmocrmOAuthConfiguration.ClientSecret,
OAuthConfig: defaultAmocrmOAuthConfiguration,
URL: defaultAmocrmURL,
},
AuthMicroservice: models.AuthMicroserviceConfiguration{
AuthGroup: "group",
PrivateSignKey: "key",
URL: defaultAuthURL,
},
JWT: models.JWTConfiguration{
PrivateKey: "jwt private key",
PublicKey: "jwt public key",
Issuer: "issuer",
Audience: "audience",
Algorithm: *jwt.SigningMethodRS256,
ExpiresIn: 15 * time.Minute,
},
},
Database: mongo.Configuration{
Host: "localhost",
Port: "27017",
User: "user",
Password: "pass",
Auth: "db",
DatabaseName: "db",
},
}
t.Setenv("JWT_PUBLIC_KEY", defaultConfiguration.Service.JWT.PublicKey)
t.Setenv("JWT_PRIVATE_KEY", defaultConfiguration.Service.JWT.PrivateKey)
t.Setenv("JWT_ISSUER", defaultConfiguration.Service.JWT.Issuer)
t.Setenv("JWT_AUDIENCE", defaultConfiguration.Service.JWT.Audience)
t.Setenv("GOOGLE_CLIENT_ID", defaultConfiguration.Service.Google.ClientID)
t.Setenv("GOOGLE_CLIENT_SECRET", defaultConfiguration.Service.Google.ClientSecret)
t.Setenv("GOOGLE_REDIRECT_URL", defaultConfiguration.Service.Google.URL.Redirect)
t.Setenv("GOOGLE_OAUTH_HOST", defaultConfiguration.Service.Google.URL.OAuthHost)
t.Setenv("VK_CLIENT_ID", defaultConfiguration.Service.VK.ClientID)
t.Setenv("VK_CLIENT_SECRET", defaultConfiguration.Service.VK.ClientSecret)
t.Setenv("VK_REDIRECT_URL", defaultConfiguration.Service.VK.URL.Redirect)
t.Setenv("AMOCRM_CLIENT_ID", defaultConfiguration.Service.Amocrm.ClientID)
t.Setenv("AMOCRM_CLIENT_SECRET", defaultConfiguration.Service.Amocrm.ClientSecret)
t.Setenv("AMOCRM_REDIRECT_URL", defaultConfiguration.Service.Amocrm.URL.Redirect)
t.Setenv("AMOCRM_OAUTH_HOST", defaultConfiguration.Service.Amocrm.URL.OAuthHost)
t.Setenv("AMOCRM_USER_INFO_URL", defaultConfiguration.Service.Amocrm.URL.UserInfo)
t.Setenv("AMOCRM_ACCESS_TOKEN_URL", defaultConfiguration.Service.Amocrm.URL.AccessToken)
t.Setenv("AUTH_MICROSERVICE_GROUP", defaultConfiguration.Service.AuthMicroservice.AuthGroup)
t.Setenv("AUTH_MICROSERVICE_PRIVATE_SIGN_KEY", defaultConfiguration.Service.AuthMicroservice.PrivateSignKey)
t.Setenv("AUTH_MICROSERVICE_EXHANGE_URL", defaultConfiguration.Service.AuthMicroservice.URL.Exchange)
t.Setenv("AUTH_MICROSERVICE_REGISTER_URL", defaultConfiguration.Service.AuthMicroservice.URL.Register)
t.Setenv("AUTH_MICROSERVICE_USER_URL", defaultConfiguration.Service.AuthMicroservice.URL.User)
t.Setenv("MONGO_HOST", defaultConfiguration.Database.Host)
t.Setenv("MONGO_PORT", defaultConfiguration.Database.Port)
t.Setenv("MONGO_USER", defaultConfiguration.Database.User)
t.Setenv("MONGO_PASSWORD", defaultConfiguration.Database.Password)
t.Setenv("MONGO_AUTH", defaultConfiguration.Database.Auth)
t.Setenv("MONGO_DB_NAME", defaultConfiguration.Database.DatabaseName)
return &defaultConfiguration
}
func TestConfiguration(t *testing.T) {
t.Run("Успешная инициализация конфигурации", func(t *testing.T) {
defaultConfiguration := setDefaultTestingENV(t)
assert.NotPanics(t, func() {
configuration, err := initialize.Configuration("")
assert.NoError(t, err)
assert.Equal(t, defaultConfiguration, configuration)
})
})
t.Run("Ошибка при наличии кривого url", func(t *testing.T) {
setDefaultTestingENV(t)
t.Setenv("AMOCRM_USER_INFO_URL", "url")
assert.NotPanics(t, func() {
configuration, err := initialize.Configuration("")
assert.Error(t, err)
assert.Nil(t, configuration)
})
})
t.Run("Ошибка при отсутствии обязательного env", func(t *testing.T) {
assert.NotPanics(t, func() {
configuration, err := initialize.Configuration("")
assert.Error(t, err)
assert.Nil(t, configuration)
})
})
}