test: add comprehensive test coverage for API endpoints and services
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestScheduler_NewScheduler(t *testing.T) {
|
||||
worker := NewWorker(1)
|
||||
|
||||
// Use nil database interface for basic testing
|
||||
scheduler := NewScheduler(worker, nil)
|
||||
|
||||
assert.NotNil(t, scheduler)
|
||||
assert.NotNil(t, scheduler.worker)
|
||||
assert.NotNil(t, scheduler.timers)
|
||||
assert.NotNil(t, scheduler.scanSettings)
|
||||
assert.NotNil(t, scheduler.ctx)
|
||||
assert.NotNil(t, scheduler.cancel)
|
||||
}
|
||||
|
||||
func TestScheduler_StartStop(t *testing.T) {
|
||||
worker := NewWorker(1)
|
||||
scheduler := NewScheduler(worker, nil)
|
||||
|
||||
// Start should not panic
|
||||
scheduler.Start()
|
||||
assert.NotNil(t, scheduler.ctx)
|
||||
|
||||
// Stop should not panic
|
||||
scheduler.Stop()
|
||||
}
|
||||
|
||||
func TestScheduler_UpdateScanSettings(t *testing.T) {
|
||||
worker := NewWorker(1)
|
||||
scheduler := NewScheduler(worker, nil)
|
||||
|
||||
userID := "test-user-123"
|
||||
|
||||
// Update scan settings
|
||||
scheduler.UpdateScanSettings(userID, true, 30)
|
||||
|
||||
scheduler.mu.Lock()
|
||||
settings, exists := scheduler.scanSettings[userID]
|
||||
scheduler.mu.Unlock()
|
||||
|
||||
assert.True(t, exists)
|
||||
assert.Equal(t, userID, settings.UserID)
|
||||
assert.True(t, settings.Enabled)
|
||||
assert.Equal(t, 30, settings.Frequency)
|
||||
}
|
||||
|
||||
func TestScheduler_UpdateScanSettings_Disabled(t *testing.T) {
|
||||
worker := NewWorker(1)
|
||||
scheduler := NewScheduler(worker, nil)
|
||||
|
||||
userID := "test-user-456"
|
||||
|
||||
// Update scan settings to disabled
|
||||
scheduler.UpdateScanSettings(userID, false, 60)
|
||||
|
||||
scheduler.mu.Lock()
|
||||
settings, exists := scheduler.scanSettings[userID]
|
||||
scheduler.mu.Unlock()
|
||||
|
||||
assert.True(t, exists)
|
||||
assert.False(t, settings.Enabled)
|
||||
assert.Equal(t, 60, settings.Frequency)
|
||||
}
|
||||
|
||||
func TestScheduler_UpdateScanSettings_Overwrite(t *testing.T) {
|
||||
worker := NewWorker(1)
|
||||
scheduler := NewScheduler(worker, nil)
|
||||
|
||||
userID := "test-user-789"
|
||||
|
||||
// First update
|
||||
scheduler.UpdateScanSettings(userID, true, 30)
|
||||
|
||||
// Overwrite with different settings
|
||||
scheduler.UpdateScanSettings(userID, false, 45)
|
||||
|
||||
scheduler.mu.Lock()
|
||||
settings, exists := scheduler.scanSettings[userID]
|
||||
scheduler.mu.Unlock()
|
||||
|
||||
assert.True(t, exists)
|
||||
assert.False(t, settings.Enabled)
|
||||
assert.Equal(t, 45, settings.Frequency)
|
||||
}
|
||||
|
||||
func TestScheduler_StopWithActiveTimers(t *testing.T) {
|
||||
worker := NewWorker(1)
|
||||
scheduler := NewScheduler(worker, nil)
|
||||
|
||||
// Add some fake timers
|
||||
scheduler.mu.Lock()
|
||||
scheduler.timers["timer1"] = nil
|
||||
scheduler.timers["timer2"] = nil
|
||||
scheduler.timers["timer3"] = nil
|
||||
scheduler.mu.Unlock()
|
||||
|
||||
// Stop should clear timers
|
||||
scheduler.Stop()
|
||||
|
||||
scheduler.mu.Lock()
|
||||
timerCount := len(scheduler.timers)
|
||||
scheduler.mu.Unlock()
|
||||
|
||||
assert.Equal(t, 0, timerCount)
|
||||
}
|
||||
|
||||
func TestScheduler_ConcurrentAccess(t *testing.T) {
|
||||
worker := NewWorker(1)
|
||||
scheduler := NewScheduler(worker, nil)
|
||||
scheduler.Start()
|
||||
defer scheduler.Stop()
|
||||
|
||||
// Concurrent updates should not cause race conditions
|
||||
done := make(chan bool, 10)
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
go func(index int) {
|
||||
userID := uuid.New().String()
|
||||
scheduler.UpdateScanSettings(userID, true, 30)
|
||||
done <- true
|
||||
}(i)
|
||||
}
|
||||
|
||||
// Wait for all goroutines
|
||||
for i := 0; i < 10; i++ {
|
||||
<-done
|
||||
}
|
||||
|
||||
// Verify all settings were stored
|
||||
scheduler.mu.Lock()
|
||||
settingCount := len(scheduler.scanSettings)
|
||||
scheduler.mu.Unlock()
|
||||
|
||||
assert.Equal(t, 10, settingCount)
|
||||
}
|
||||
Reference in New Issue
Block a user