group_mapper_codex_manifest_test.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package dto
  2. import (
  3. "encoding/json"
  4. "testing"
  5. "github.com/Wei-Shaw/sub2api/internal/service"
  6. "github.com/stretchr/testify/require"
  7. )
  8. // 固定账号 manifest 配置必须在管理端 DTO 完整序列化:漏映射会让编辑对话框回显
  9. // 关闭状态,管理员保存无关字段时会把已开启的配置静默关掉。用户侧 DTO 不携带该字段。
  10. func TestGroupMapperRoundTripsCodexModelsManifestConfig(t *testing.T) {
  11. group := &service.Group{
  12. ID: 31, Name: "codex-manifest-dto", Platform: service.PlatformOpenAI, Status: service.StatusActive,
  13. CodexModelsManifestConfig: service.GroupCodexModelsManifestConfig{
  14. Enabled: true,
  15. AccountIDs: []int64{101, 202},
  16. FallbackToScheduler: true,
  17. },
  18. }
  19. adminJSON, err := json.Marshal(GroupFromServiceAdmin(group))
  20. require.NoError(t, err)
  21. var adminEnvelope struct {
  22. CodexModelsManifestConfig *struct {
  23. Enabled bool `json:"enabled"`
  24. AccountIDs []int64 `json:"account_ids"`
  25. FallbackToScheduler bool `json:"fallback_to_scheduler"`
  26. } `json:"codex_models_manifest_config"`
  27. }
  28. require.NoError(t, json.Unmarshal(adminJSON, &adminEnvelope))
  29. require.NotNil(t, adminEnvelope.CodexModelsManifestConfig, "GroupFromServiceAdmin 漏映射 codex_models_manifest_config")
  30. require.True(t, adminEnvelope.CodexModelsManifestConfig.Enabled)
  31. require.Equal(t, []int64{101, 202}, adminEnvelope.CodexModelsManifestConfig.AccountIDs)
  32. require.True(t, adminEnvelope.CodexModelsManifestConfig.FallbackToScheduler)
  33. userJSON, err := json.Marshal(GroupFromService(group))
  34. require.NoError(t, err)
  35. require.NotContains(t, string(userJSON), "codex_models_manifest_config", "用户侧分组 DTO 不得暴露管理端 manifest 配置")
  36. }