63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package db_management
|
|
|
|
import (
|
|
"database/sql"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
func setupTestDB(t *testing.T) {
|
|
var err error
|
|
// ":memory:" sorgt dafür, dass die DB nach dem Test gelöscht wird
|
|
DB, err = sql.Open("sqlite", ":memory:")
|
|
assert.NoError(t, err)
|
|
|
|
statement := `
|
|
CREATE TABLE voice_sessions (
|
|
user_id TEXT,
|
|
seconds INTEGER,
|
|
created_at TIMESTAMP
|
|
);`
|
|
_, err = DB.Exec(statement)
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func TestSaveAndGetStats(t *testing.T) {
|
|
setupTestDB(t)
|
|
defer DB.Close()
|
|
|
|
userID := "123456789"
|
|
|
|
// Test 1: Neue Session speichern
|
|
SaveSession(userID, 3600) // 1 Stunde
|
|
stats := GetUserStats(userID)
|
|
assert.Equal(t, 3600, stats, "User sollte 3600 Sekunden haben")
|
|
|
|
// Test 2: Zweite Session addieren
|
|
SaveSession(userID, 600) // +10 Minuten
|
|
stats = GetUserStats(userID)
|
|
assert.Equal(t, 4200, stats, "Summe sollte 4200 sein")
|
|
}
|
|
|
|
func TestTimeFiltering(t *testing.T) {
|
|
setupTestDB(t)
|
|
defer DB.Close()
|
|
|
|
userID := "999"
|
|
|
|
// Eine Session von heute
|
|
SaveSession(userID, 1000)
|
|
|
|
// Eine "alte" Session manuell einfügen (31 Tage alt)
|
|
oldDate := time.Now().AddDate(0, 0, -31)
|
|
_, _ = DB.Exec("INSERT INTO voice_sessions (user_id, seconds, created_at) VALUES (?, ?, ?)",
|
|
userID, 5000, oldDate)
|
|
|
|
// GetUserStats sollte NUR die 1000 Sekunden von heute zählen
|
|
stats := GetUserStats(userID)
|
|
assert.Equal(t, 1000, stats, "Alte Sessions dürfen nicht gezählt werden")
|
|
}
|