generated from PenaSide/GolangTemplate
192 lines
6.6 KiB
Go
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)
|
|
})
|
|
})
|
|
}
|