Files
sub2api/backend/internal/service/openai_images_oauth_unavailable_cooldown_test.go
T

60 lines
2.5 KiB
Go

//go:build unit
package service
import (
"context"
"encoding/json"
"testing"
"github.com/Wei-Shaw/sub2api/internal/config"
"github.com/stretchr/testify/require"
)
func TestOpenAIImagesOAuthUnavailableCooldownSettingsDefaultAndStoredValue(t *testing.T) {
repo := newMockSettingRepo()
svc := NewSettingService(repo, &config.Config{})
settings, err := svc.GetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background())
require.NoError(t, err)
require.Equal(t, 30, settings.CooldownMinutes)
require.NoError(t, svc.SetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background(), &OpenAIImagesOAuthUnavailableCooldownSettings{CooldownMinutes: 7}))
settings, err = svc.GetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background())
require.NoError(t, err)
require.Equal(t, 7, settings.CooldownMinutes)
}
func TestSetOpenAIImagesOAuthUnavailableCooldownSettingsBoundaries(t *testing.T) {
svc := NewSettingService(newMockSettingRepo(), &config.Config{})
for _, minutes := range []int{1, openAIImagesOAuthUnavailableMaxCooldownMinutes} {
err := svc.SetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background(), &OpenAIImagesOAuthUnavailableCooldownSettings{CooldownMinutes: minutes})
require.NoError(t, err, "should accept cooldown_minutes=%d", minutes)
}
for _, minutes := range []int{0, -1, openAIImagesOAuthUnavailableMaxCooldownMinutes + 1} {
err := svc.SetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background(), &OpenAIImagesOAuthUnavailableCooldownSettings{CooldownMinutes: minutes})
require.ErrorContains(t, err, "cooldown_minutes must be between 1-120")
}
}
func TestOpenAIImagesOAuthUnavailableCooldownSettingsRejectsOverflowingValue(t *testing.T) {
maxInt := int(^uint(0) >> 1)
repo := newMockSettingRepo()
svc := NewSettingService(repo, &config.Config{})
err := svc.SetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background(), &OpenAIImagesOAuthUnavailableCooldownSettings{CooldownMinutes: maxInt})
require.ErrorContains(t, err, "cooldown_minutes must be between 1-120")
for _, minutes := range []int{openAIImagesOAuthUnavailableMaxCooldownMinutes + 1, maxInt} {
data, marshalErr := json.Marshal(OpenAIImagesOAuthUnavailableCooldownSettings{CooldownMinutes: minutes})
require.NoError(t, marshalErr)
repo.data[SettingKeyOpenAIImagesOAuthUnavailableCooldownSettings] = string(data)
settings, getErr := svc.GetOpenAIImagesOAuthUnavailableCooldownSettings(context.Background())
require.NoError(t, getErr)
require.Equal(t, openAIImagesOAuthUnavailableDefaultCooldownMinutes, settings.CooldownMinutes)
}
}