openai_gateway_403_reset_test.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package service
  2. import (
  3. "context"
  4. "testing"
  5. "github.com/stretchr/testify/require"
  6. )
  7. type openAI403CounterResetStub struct {
  8. resetCalls []int64
  9. }
  10. func (s *openAI403CounterResetStub) IncrementOpenAI403Count(context.Context, int64, int) (int64, error) {
  11. return 0, nil
  12. }
  13. func (s *openAI403CounterResetStub) ResetOpenAI403Count(_ context.Context, accountID int64) error {
  14. s.resetCalls = append(s.resetCalls, accountID)
  15. return nil
  16. }
  17. func TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage(t *testing.T) {
  18. counter := &openAI403CounterResetStub{}
  19. rateLimitSvc := NewRateLimitService(nil, nil, nil, nil, nil)
  20. rateLimitSvc.SetOpenAI403CounterCache(counter)
  21. usageRepo := &openAIRecordUsageLogRepoStub{inserted: true}
  22. billingRepo := &openAIRecordUsageBillingRepoStub{result: &UsageBillingApplyResult{Applied: true}}
  23. userRepo := &openAIRecordUsageUserRepoStub{}
  24. subRepo := &openAIRecordUsageSubRepoStub{}
  25. svc := newOpenAIRecordUsageServiceWithBillingRepoForTest(usageRepo, billingRepo, userRepo, subRepo, nil)
  26. svc.rateLimitService = rateLimitSvc
  27. err := svc.RecordUsage(context.Background(), &OpenAIRecordUsageInput{
  28. Result: &OpenAIForwardResult{
  29. RequestID: "resp_zero_usage_reset_403",
  30. Model: "gpt-5.1",
  31. },
  32. APIKey: &APIKey{ID: 1001, Group: &Group{RateMultiplier: 1}},
  33. User: &User{ID: 2001},
  34. Account: &Account{ID: 777, Platform: PlatformOpenAI},
  35. })
  36. require.NoError(t, err)
  37. require.Equal(t, []int64{777}, counter.resetCalls)
  38. require.Equal(t, 1, usageRepo.calls)
  39. }