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:
@@ -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"])
|
||||||
|
|||||||
@@ -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,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user