openai_images_oauth_unavailable_cooldown_test.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. //go:build unit
  2. package service
  3. import (
  4. "context"
  5. "encoding/json"
  6. "testing"
  7. "github.com/Wei-Shaw/sub2api/internal/config"
  8. "github.com/stretchr/testify/require"
  9. )
  10. func TestOpenAIImagesOAuthUnavailableCooldownSettingsDefaultAndStoredValue(t *testing.T) {
  11. repo := newMockSettingRepo()
  12. svc := NewSettingService(repo, &config.Config{})
  13. settings, err := svc.GetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background())
  14. require.NoError(t, err)
  15. require.Equal(t, 30, settings.CooldownMinutes)
  16. require.NoError(t, svc.SetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background(), &OpenAIImagesOAuthUnavailableCooldownSettings{CooldownMinutes: 7}))
  17. settings, err = svc.GetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background())
  18. require.NoError(t, err)
  19. require.Equal(t, 7, settings.CooldownMinutes)
  20. }
  21. func TestSetOpenAIImagesOAuthUnavailableCooldownSettingsBoundaries(t *testing.T) {
  22. svc := NewSettingService(newMockSettingRepo(), &config.Config{})
  23. for _, minutes := range []int{1, openAIImagesOAuthUnavailableMaxCooldownMinutes} {
  24. err := svc.SetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background(), &OpenAIImagesOAuthUnavailableCooldownSettings{CooldownMinutes: minutes})
  25. require.NoError(t, err, "should accept cooldown_minutes=%d", minutes)
  26. }
  27. for _, minutes := range []int{0, -1, openAIImagesOAuthUnavailableMaxCooldownMinutes + 1} {
  28. err := svc.SetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background(), &OpenAIImagesOAuthUnavailableCooldownSettings{CooldownMinutes: minutes})
  29. require.ErrorContains(t, err, "cooldown_minutes must be between 1-120")
  30. }
  31. }
  32. func TestOpenAIImagesOAuthUnavailableCooldownSettingsRejectsOverflowingValue(t *testing.T) {
  33. maxInt := int(^uint(0) >> 1)
  34. repo := newMockSettingRepo()
  35. svc := NewSettingService(repo, &config.Config{})
  36. err := svc.SetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background(), &OpenAIImagesOAuthUnavailableCooldownSettings{CooldownMinutes: maxInt})
  37. require.ErrorContains(t, err, "cooldown_minutes must be between 1-120")
  38. for _, minutes := range []int{openAIImagesOAuthUnavailableMaxCooldownMinutes + 1, maxInt} {
  39. data, marshalErr := json.Marshal(OpenAIImagesOAuthUnavailableCooldownSettings{CooldownMinutes: minutes})
  40. require.NoError(t, marshalErr)
  41. repo.data[SettingKeyOpenAIImagesOAuthUnavailableCooldownSettings] = string(data)
  42. settings, getErr := svc.GetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background())
  43. require.NoError(t, getErr)
  44. require.Equal(t, openAIImagesOAuthUnavailableDefaultCooldownMinutes, settings.CooldownMinutes)
  45. }
  46. }