| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- //go:build unit
- package service
- import (
- "context"
- "testing"
- "github.com/Wei-Shaw/sub2api/internal/config"
- "github.com/stretchr/testify/require"
- )
- type settingWeChatRepoStub struct {
- values map[string]string
- }
- func (s *settingWeChatRepoStub) Get(context.Context, string) (*Setting, error) {
- panic("unexpected Get call")
- }
- func (s *settingWeChatRepoStub) GetValue(_ context.Context, key string) (string, error) {
- if value, ok := s.values[key]; ok {
- return value, nil
- }
- return "", ErrSettingNotFound
- }
- func (s *settingWeChatRepoStub) Set(context.Context, string, string) error {
- panic("unexpected Set call")
- }
- func (s *settingWeChatRepoStub) GetMultiple(_ context.Context, keys []string) (map[string]string, error) {
- out := make(map[string]string, len(keys))
- for _, key := range keys {
- if value, ok := s.values[key]; ok {
- out[key] = value
- }
- }
- return out, nil
- }
- func (s *settingWeChatRepoStub) SetMultiple(context.Context, map[string]string) error {
- panic("unexpected SetMultiple call")
- }
- func (s *settingWeChatRepoStub) GetAll(context.Context) (map[string]string, error) {
- panic("unexpected GetAll call")
- }
- func (s *settingWeChatRepoStub) Delete(context.Context, string) error {
- panic("unexpected Delete call")
- }
- func TestSettingService_GetWeChatConnectOAuthConfig_UsesDatabaseOverrides(t *testing.T) {
- repo := &settingWeChatRepoStub{
- values: map[string]string{
- SettingKeyWeChatConnectEnabled: "true",
- SettingKeyWeChatConnectAppID: "wx-db-app",
- SettingKeyWeChatConnectAppSecret: "wx-db-secret",
- SettingKeyWeChatConnectMode: "mp",
- SettingKeyWeChatConnectScopes: "snsapi_base",
- SettingKeyWeChatConnectOpenEnabled: "true",
- SettingKeyWeChatConnectMPEnabled: "true",
- SettingKeyWeChatConnectRedirectURL: "https://api.example.com/api/v1/auth/oauth/wechat/callback",
- SettingKeyWeChatConnectFrontendRedirectURL: "/auth/wechat/callback",
- },
- }
- svc := NewSettingService(repo, &config.Config{})
- got, err := svc.GetWeChatConnectOAuthConfig(context.Background())
- require.NoError(t, err)
- require.True(t, got.Enabled)
- require.Equal(t, "wx-db-app", got.AppIDForMode("mp"))
- require.Equal(t, "wx-db-secret", got.AppSecretForMode("mp"))
- require.True(t, got.OpenEnabled)
- require.True(t, got.MPEnabled)
- require.Equal(t, "mp", got.Mode)
- require.Equal(t, "snsapi_base", got.Scopes)
- require.Equal(t, "https://api.example.com/api/v1/auth/oauth/wechat/callback", got.RedirectURL)
- require.Equal(t, "/auth/wechat/callback", got.FrontendRedirectURL)
- }
- func TestSettingService_GetWeChatConnectOAuthConfig_FallsBackToConfigWhenDatabaseEmpty(t *testing.T) {
- repo := &settingWeChatRepoStub{values: map[string]string{}}
- svc := NewSettingService(repo, &config.Config{
- WeChat: config.WeChatConnectConfig{
- Enabled: true,
- OpenEnabled: true,
- MPEnabled: true,
- Mode: "open",
- OpenAppID: "wx-open-config",
- OpenAppSecret: "wx-open-secret",
- MPAppID: "wx-mp-config",
- MPAppSecret: "wx-mp-secret",
- FrontendRedirectURL: "/auth/wechat/config-callback",
- },
- })
- got, err := svc.GetWeChatConnectOAuthConfig(context.Background())
- require.NoError(t, err)
- require.True(t, got.Enabled)
- require.True(t, got.OpenEnabled)
- require.True(t, got.MPEnabled)
- require.Equal(t, "wx-open-config", got.AppIDForMode("open"))
- require.Equal(t, "wx-open-secret", got.AppSecretForMode("open"))
- require.Equal(t, "wx-mp-config", got.AppIDForMode("mp"))
- require.Equal(t, "wx-mp-secret", got.AppSecretForMode("mp"))
- require.Equal(t, "/auth/wechat/config-callback", got.FrontendRedirectURL)
- require.Empty(t, got.RedirectURL)
- }
- func TestSettingService_GetWeChatConnectOAuthConfig_IgnoresSyntheticDisabledCapabilitiesFromMigration118(t *testing.T) {
- repo := &settingWeChatRepoStub{
- values: map[string]string{
- SettingKeyWeChatConnectOpenEnabled: "false",
- SettingKeyWeChatConnectMPEnabled: "false",
- },
- }
- svc := NewSettingService(repo, &config.Config{
- WeChat: config.WeChatConnectConfig{
- Enabled: true,
- OpenEnabled: true,
- MPEnabled: true,
- Mode: "open",
- OpenAppID: "wx-open-config",
- OpenAppSecret: "wx-open-secret",
- MPAppID: "wx-mp-config",
- MPAppSecret: "wx-mp-secret",
- FrontendRedirectURL: "/auth/wechat/config-callback",
- },
- })
- got, err := svc.GetWeChatConnectOAuthConfig(context.Background())
- require.NoError(t, err)
- require.True(t, got.Enabled)
- require.True(t, got.OpenEnabled)
- require.True(t, got.MPEnabled)
- require.Equal(t, "wx-open-config", got.AppIDForMode("open"))
- require.Equal(t, "wx-mp-config", got.AppIDForMode("mp"))
- }
- func TestSettingService_ParseSettings_FallsBackToConfigForWeChatAdminView(t *testing.T) {
- svc := NewSettingService(&settingWeChatRepoStub{values: map[string]string{}}, &config.Config{
- WeChat: config.WeChatConnectConfig{
- Enabled: true,
- OpenEnabled: true,
- Mode: "open",
- OpenAppID: "wx-open-config",
- OpenAppSecret: "wx-open-secret",
- FrontendRedirectURL: "/auth/wechat/config-callback",
- },
- })
- got := svc.parseSettings(map[string]string{})
- require.True(t, got.WeChatConnectEnabled)
- require.True(t, got.WeChatConnectOpenEnabled)
- require.Equal(t, "wx-open-config", got.WeChatConnectOpenAppID)
- require.True(t, got.WeChatConnectOpenAppSecretConfigured)
- require.Equal(t, "/auth/wechat/config-callback", got.WeChatConnectFrontendRedirectURL)
- require.Equal(t, "open", got.WeChatConnectMode)
- require.Equal(t, "snsapi_login", got.WeChatConnectScopes)
- }
|