account_shadow_parent_test.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package admin
  2. import (
  3. "testing"
  4. "github.com/Wei-Shaw/sub2api/internal/handler/dto"
  5. "github.com/Wei-Shaw/sub2api/internal/service"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func TestEnrichShadowParentInfo(t *testing.T) {
  9. pid := int64(100)
  10. parent := &service.Account{
  11. ID: 100,
  12. Credentials: map[string]any{
  13. "email": "owner@example.com",
  14. "plan_type": "pro",
  15. "subscription_expires_at": "2026-12-31T00:00:00Z",
  16. "chatgpt_account_id": "acct_123",
  17. },
  18. Extra: map[string]any{"privacy_mode": "training_off"},
  19. }
  20. parents := map[int64]*service.Account{100: parent}
  21. shadow := AccountWithConcurrency{Account: &dto.Account{ID: 200, ParentAccountID: &pid}}
  22. normal := AccountWithConcurrency{Account: &dto.Account{ID: 1}}
  23. orphan := AccountWithConcurrency{Account: &dto.Account{ID: 201, ParentAccountID: ptrInt64(999)}}
  24. items := []AccountWithConcurrency{shadow, normal, orphan}
  25. enrichShadowParentInfo(items, parents)
  26. require.Equal(t, "owner@example.com", items[0].ParentEmail, "影子回填母账号邮箱")
  27. require.Equal(t, "pro", items[0].ParentPlanType)
  28. require.Equal(t, "training_off", items[0].ParentPrivacyMode)
  29. require.Equal(t, "2026-12-31T00:00:00Z", items[0].ParentSubscriptionExpiresAt)
  30. require.Equal(t, "acct_123", items[0].ParentChatGPTAccountID)
  31. require.Empty(t, items[1].ParentEmail, "非影子不回填")
  32. require.Empty(t, items[2].ParentEmail, "母账号缺失时优雅留空")
  33. }
  34. func ptrInt64(v int64) *int64 { return &v }