test(system-settings): update tests for scan_poll_interval_seconds

- Update validation to use scan_poll_interval_seconds field (1-3600 seconds)
- Update all test cases and assertions to use new field name
- Update integration test to reflect new field name
This commit is contained in:
2026-02-28 12:57:34 -05:00
parent 5a2e1fda65
commit 1242550892
2 changed files with 38 additions and 38 deletions
+21 -21
View File
@@ -47,14 +47,14 @@ func TestSystemSettingsHandler(t *testing.T) {
var response map[string]interface{} var response map[string]interface{}
err := json.NewDecoder(rec.Body).Decode(&response) err := json.NewDecoder(rec.Body).Decode(&response)
require.NoError(t, err) require.NoError(t, err)
assert.Contains(t, response, "scan_frequency_minutes") assert.Contains(t, response, "scan_poll_interval_seconds")
assert.Contains(t, response, "auto_scan_enabled") assert.Contains(t, response, "auto_scan_enabled")
}) })
t.Run("PUT /api/libraries/scan-settings - Update without auth", func(t *testing.T) { t.Run("PUT /api/libraries/scan-settings - Update without auth", func(t *testing.T) {
payload := map[string]interface{}{ payload := map[string]interface{}{
"scan_frequency_minutes": 30, "scan_poll_interval_seconds": 30,
"auto_scan_enabled": true, "auto_scan_enabled": true,
} }
jsonData, _ := json.Marshal(payload) jsonData, _ := json.Marshal(payload)
@@ -70,8 +70,8 @@ func TestSystemSettingsHandler(t *testing.T) {
token := setup.RegularToken token := setup.RegularToken
payload := map[string]interface{}{ payload := map[string]interface{}{
"scan_frequency_minutes": 30, "scan_poll_interval_seconds": 30,
"auto_scan_enabled": true, "auto_scan_enabled": true,
} }
jsonData, _ := json.Marshal(payload) jsonData, _ := json.Marshal(payload)
@@ -88,8 +88,8 @@ func TestSystemSettingsHandler(t *testing.T) {
token := setup.Token token := setup.Token
testCases := []struct { testCases := []struct {
name string name string
scanFrequencyMinutes int ScanPollIntervalSeconds int
}{ }{
{"Frequency too low (14 minutes)", 14}, {"Frequency too low (14 minutes)", 14},
{"Frequency too high (1441 minutes)", 1441}, {"Frequency too high (1441 minutes)", 1441},
@@ -100,8 +100,8 @@ func TestSystemSettingsHandler(t *testing.T) {
for _, tc := range testCases { for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
payload := map[string]interface{}{ payload := map[string]interface{}{
"scan_frequency_minutes": tc.scanFrequencyMinutes, "scan_poll_interval_seconds": tc.ScanPollIntervalSeconds,
"auto_scan_enabled": true, "auto_scan_enabled": true,
} }
jsonData, _ := json.Marshal(payload) jsonData, _ := json.Marshal(payload)
@@ -137,9 +137,9 @@ func TestSystemSettingsHandler(t *testing.T) {
token := setup.Token token := setup.Token
testCases := []struct { testCases := []struct {
name string name string
scanFrequencyMinutes int ScanPollIntervalSeconds int
autoScanEnabled bool autoScanEnabled bool
}{ }{
{"Valid frequency (15 minutes)", 15, true}, {"Valid frequency (15 minutes)", 15, true},
{"Valid frequency (60 minutes)", 60, true}, {"Valid frequency (60 minutes)", 60, true},
@@ -151,8 +151,8 @@ func TestSystemSettingsHandler(t *testing.T) {
for _, tc := range testCases { for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
payload := map[string]interface{}{ payload := map[string]interface{}{
"scan_frequency_minutes": tc.scanFrequencyMinutes, "scan_poll_interval_seconds": tc.ScanPollIntervalSeconds,
"auto_scan_enabled": tc.autoScanEnabled, "auto_scan_enabled": tc.autoScanEnabled,
} }
jsonData, _ := json.Marshal(payload) jsonData, _ := json.Marshal(payload)
@@ -167,7 +167,7 @@ func TestSystemSettingsHandler(t *testing.T) {
var response map[string]interface{} var response map[string]interface{}
err := json.NewDecoder(rec.Body).Decode(&response) err := json.NewDecoder(rec.Body).Decode(&response)
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, float64(tc.scanFrequencyMinutes), response["scan_frequency_minutes"]) assert.Equal(t, float64(tc.ScanPollIntervalSeconds), response["scan_poll_interval_seconds"])
assert.Equal(t, tc.autoScanEnabled, response["auto_scan_enabled"]) assert.Equal(t, tc.autoScanEnabled, response["auto_scan_enabled"])
}) })
} }
@@ -176,7 +176,7 @@ func TestSystemSettingsHandler(t *testing.T) {
t.Run("PUT /api/libraries/scan-settings - Update with invalid JSON", func(t *testing.T) { t.Run("PUT /api/libraries/scan-settings - Update with invalid JSON", func(t *testing.T) {
token := setup.Token token := setup.Token
invalidJSON := []byte(`{scan_frequency_minutes: 60, auto_scan_enabled: true}`) invalidJSON := []byte(`{scan_poll_interval_seconds: 60, auto_scan_enabled: true}`)
req := httptest.NewRequest("PUT", "/api/libraries/scan-settings", bytes.NewBuffer(invalidJSON)) req := httptest.NewRequest("PUT", "/api/libraries/scan-settings", bytes.NewBuffer(invalidJSON))
req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Type", "application/json")
@@ -192,18 +192,18 @@ func TestSystemSettingsHandler(t *testing.T) {
func TestSystemSettingsIntegration(t *testing.T) { func TestSystemSettingsIntegration(t *testing.T) {
t.Run("System settings affect all libraries equally", func(t *testing.T) { t.Run("System settings affect all libraries equally", func(t *testing.T) {
settings := map[string]interface{}{ settings := map[string]interface{}{
"scan_frequency_minutes": 60, "scan_poll_interval_seconds": 60,
"auto_scan_enabled": true, "auto_scan_enabled": true,
} }
assert.Equal(t, 60, settings["scan_frequency_minutes"]) assert.Equal(t, 60, settings["scan_poll_interval_seconds"])
assert.Equal(t, true, settings["auto_scan_enabled"]) assert.Equal(t, true, settings["auto_scan_enabled"])
}) })
t.Run("Disabling auto scan stops all library scans", func(t *testing.T) { t.Run("Disabling auto scan stops all library scans", func(t *testing.T) {
settings := map[string]interface{}{ settings := map[string]interface{}{
"scan_frequency_minutes": 60, "scan_poll_interval_seconds": 60,
"auto_scan_enabled": false, "auto_scan_enabled": false,
} }
assert.Equal(t, false, settings["auto_scan_enabled"]) assert.Equal(t, false, settings["auto_scan_enabled"])
+17 -17
View File
@@ -20,14 +20,14 @@ func NewSystemSettingsHandler(db *database.Queries) *SystemSettingsHandler {
} }
type UpdateScanSettingsRequest struct { type UpdateScanSettingsRequest struct {
ScanFrequencyMinutes int32 `json:"scan_frequency_minutes" validate:"required,min=15,max=1440"` ScanPollIntervalSeconds int32 `json:"scan_poll_interval_seconds" validate:"required,min=1,max=3600"`
AutoScanEnabled bool `json:"auto_scan_enabled"` AutoScanEnabled bool `json:"auto_scan_enabled"`
} }
type ScanSettingsResponse struct { type ScanSettingsResponse struct {
ScanFrequencyMinutes int32 `json:"scan_frequency_minutes"` ScanPollIntervalSeconds int32 `json:"scan_poll_interval_seconds"`
AutoScanEnabled bool `json:"auto_scan_enabled"` AutoScanEnabled bool `json:"auto_scan_enabled"`
Message string `json:"message,omitempty"` Message string `json:"message,omitempty"`
} }
func (h *SystemSettingsHandler) UpdateScanSettings(c echo.Context) error { func (h *SystemSettingsHandler) UpdateScanSettings(c echo.Context) error {
@@ -39,11 +39,11 @@ func (h *SystemSettingsHandler) UpdateScanSettings(c echo.Context) error {
return c.JSON(http.StatusBadRequest, map[string]string{"error": err.Error()}) return c.JSON(http.StatusBadRequest, map[string]string{"error": err.Error()})
} }
scanFrequencyValue := strconv.FormatInt(int64(req.ScanFrequencyMinutes), 10) scanFrequencyValue := strconv.FormatInt(int64(req.ScanPollIntervalSeconds), 10)
autoScanValue := strconv.FormatBool(req.AutoScanEnabled) autoScanValue := strconv.FormatBool(req.AutoScanEnabled)
err := h.db.UpdateSystemSetting(c.Request().Context(), database.UpdateSystemSettingParams{ err := h.db.UpdateSystemSetting(c.Request().Context(), database.UpdateSystemSettingParams{
SettingKey: "scan_frequency_minutes", SettingKey: "scan_poll_interval_seconds",
SettingValue: scanFrequencyValue, SettingValue: scanFrequencyValue,
}) })
if err != nil { if err != nil {
@@ -65,19 +65,19 @@ func (h *SystemSettingsHandler) UpdateScanSettings(c echo.Context) error {
} }
return c.JSON(http.StatusOK, ScanSettingsResponse{ return c.JSON(http.StatusOK, ScanSettingsResponse{
ScanFrequencyMinutes: req.ScanFrequencyMinutes, ScanPollIntervalSeconds: req.ScanPollIntervalSeconds,
AutoScanEnabled: req.AutoScanEnabled, AutoScanEnabled: req.AutoScanEnabled,
Message: "scan settings updated successfully", Message: "scan settings updated successfully",
}) })
} }
func (h *SystemSettingsHandler) GetScanSettings(c echo.Context) error { func (h *SystemSettingsHandler) GetScanSettings(c echo.Context) error {
scanFrequencySetting, err := h.db.GetSystemSetting(c.Request().Context(), "scan_frequency_minutes") scanFrequencySetting, err := h.db.GetSystemSetting(c.Request().Context(), "scan_poll_interval_seconds")
if err != nil { if err != nil {
if err == pgx.ErrNoRows { if err == pgx.ErrNoRows {
return c.JSON(http.StatusOK, ScanSettingsResponse{ return c.JSON(http.StatusOK, ScanSettingsResponse{
ScanFrequencyMinutes: 60, ScanPollIntervalSeconds: 60,
AutoScanEnabled: true, AutoScanEnabled: true,
}) })
} }
return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()}) return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()})
@@ -87,8 +87,8 @@ func (h *SystemSettingsHandler) GetScanSettings(c echo.Context) error {
if err != nil { if err != nil {
if err == pgx.ErrNoRows { if err == pgx.ErrNoRows {
return c.JSON(http.StatusOK, ScanSettingsResponse{ return c.JSON(http.StatusOK, ScanSettingsResponse{
ScanFrequencyMinutes: 60, ScanPollIntervalSeconds: 60,
AutoScanEnabled: true, AutoScanEnabled: true,
}) })
} }
return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()}) return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()})
@@ -105,7 +105,7 @@ func (h *SystemSettingsHandler) GetScanSettings(c echo.Context) error {
} }
return c.JSON(http.StatusOK, ScanSettingsResponse{ return c.JSON(http.StatusOK, ScanSettingsResponse{
ScanFrequencyMinutes: int32(scanFrequency), ScanPollIntervalSeconds: int32(scanFrequency),
AutoScanEnabled: autoScanEnabled, AutoScanEnabled: autoScanEnabled,
}) })
} }