mirror of
https://github.com/pocketbase/pocketbase.git
synced 2025-03-19 14:17:48 +02:00
115 lines
2.6 KiB
Go
115 lines
2.6 KiB
Go
|
package core_test
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/pocketbase/dbx"
|
||
|
"github.com/pocketbase/pocketbase/core"
|
||
|
"github.com/pocketbase/pocketbase/tests"
|
||
|
"github.com/pocketbase/pocketbase/tools/types"
|
||
|
)
|
||
|
|
||
|
func TestFindLogById(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
|
||
|
app, _ := tests.NewTestApp()
|
||
|
defer app.Cleanup()
|
||
|
|
||
|
tests.StubLogsData(app)
|
||
|
|
||
|
scenarios := []struct {
|
||
|
id string
|
||
|
expectError bool
|
||
|
}{
|
||
|
{"", true},
|
||
|
{"invalid", true},
|
||
|
{"00000000-9f38-44fb-bf82-c8f53b310d91", true},
|
||
|
{"873f2133-9f38-44fb-bf82-c8f53b310d91", false},
|
||
|
}
|
||
|
|
||
|
for i, s := range scenarios {
|
||
|
t.Run(fmt.Sprintf("%d_%s", i, s.id), func(t *testing.T) {
|
||
|
log, err := app.FindLogById(s.id)
|
||
|
|
||
|
hasErr := err != nil
|
||
|
if hasErr != s.expectError {
|
||
|
t.Fatalf("Expected hasErr to be %v, got %v (%v)", s.expectError, hasErr, err)
|
||
|
}
|
||
|
|
||
|
if log != nil && log.Id != s.id {
|
||
|
t.Fatalf("Expected log with id %q, got %q", s.id, log.Id)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestLogsStats(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
|
||
|
app, _ := tests.NewTestApp()
|
||
|
defer app.Cleanup()
|
||
|
|
||
|
tests.StubLogsData(app)
|
||
|
|
||
|
expected := `[{"date":"2022-05-01 10:00:00.000Z","total":1},{"date":"2022-05-02 10:00:00.000Z","total":1}]`
|
||
|
|
||
|
now := time.Now().UTC().Format(types.DefaultDateLayout)
|
||
|
exp := dbx.NewExp("[[created]] <= {:date}", dbx.Params{"date": now})
|
||
|
result, err := app.LogsStats(exp)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
encoded, _ := json.Marshal(result)
|
||
|
if string(encoded) != expected {
|
||
|
t.Fatalf("Expected\n%q\ngot\n%q", expected, string(encoded))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestDeleteOldLogs(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
|
||
|
app, _ := tests.NewTestApp()
|
||
|
defer app.Cleanup()
|
||
|
|
||
|
tests.StubLogsData(app)
|
||
|
|
||
|
scenarios := []struct {
|
||
|
date string
|
||
|
expectedTotal int
|
||
|
}{
|
||
|
{"2022-01-01 10:00:00.000Z", 2}, // no logs to delete before that time
|
||
|
{"2022-05-01 11:00:00.000Z", 1}, // only 1 log should have left
|
||
|
{"2022-05-03 11:00:00.000Z", 0}, // no more logs should have left
|
||
|
{"2022-05-04 11:00:00.000Z", 0}, // no more logs should have left
|
||
|
}
|
||
|
|
||
|
for _, s := range scenarios {
|
||
|
t.Run(s.date, func(t *testing.T) {
|
||
|
date, dateErr := time.Parse(types.DefaultDateLayout, s.date)
|
||
|
if dateErr != nil {
|
||
|
t.Fatalf("Date error %v", dateErr)
|
||
|
}
|
||
|
|
||
|
deleteErr := app.DeleteOldLogs(date)
|
||
|
if deleteErr != nil {
|
||
|
t.Fatalf("Delete error %v", deleteErr)
|
||
|
}
|
||
|
|
||
|
// check total remaining logs
|
||
|
var total int
|
||
|
countErr := app.AuxModelQuery(&core.Log{}).Select("count(*)").Row(&total)
|
||
|
if countErr != nil {
|
||
|
t.Errorf("Count error %v", countErr)
|
||
|
}
|
||
|
|
||
|
if total != s.expectedTotal {
|
||
|
t.Errorf("Expected %d remaining logs, got %d", s.expectedTotal, total)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|