#37 shipped the telemetry retention task + model.DeleteTelemetryEventsBefore but lacked a test for the deletion itself. Add TestDeleteTelemetryEventsBefore (strict-< cutoff, retains at/after, idempotent) and migrate TelemetryEvent in the model TestMain so it has a table. Closes the "测试覆盖过期清理" DoD item of #43. Test-only; no behavior change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
39 lines
1.3 KiB
Go
39 lines
1.3 KiB
Go
package model
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// #43: the retention purge must delete telemetry rows received before the
|
|
// cutoff and leave newer rows intact. TelemetryEvent is migrated by the package
|
|
// TestMain; LOG_DB == DB in tests.
|
|
func TestDeleteTelemetryEventsBefore(t *testing.T) {
|
|
// Isolate from any other test's rows.
|
|
require.NoError(t, LOG_DB.Where("1 = 1").Delete(&TelemetryEvent{}).Error)
|
|
|
|
mk := func(receivedAt int64, client string) {
|
|
require.NoError(t, LOG_DB.Create(&TelemetryEvent{
|
|
ReceivedAt: receivedAt, UserId: 1, ClientId: client, SchemaVersion: 1,
|
|
}).Error)
|
|
}
|
|
mk(1000, "old-1") // before cutoff -> deleted
|
|
mk(2999, "old-2") // before cutoff -> deleted
|
|
mk(3000, "keep-1") // == cutoff -> kept (strict <)
|
|
mk(5000, "keep-2") // after cutoff -> kept
|
|
|
|
deleted, err := DeleteTelemetryEventsBefore(3000)
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, 2, deleted, "rows with received_at < cutoff are purged")
|
|
|
|
var remaining int64
|
|
require.NoError(t, LOG_DB.Model(&TelemetryEvent{}).Count(&remaining).Error)
|
|
require.EqualValues(t, 2, remaining, "rows at/after cutoff are retained")
|
|
|
|
// Idempotent: a second pass with the same cutoff deletes nothing.
|
|
again, err := DeleteTelemetryEventsBefore(3000)
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, 0, again)
|
|
}
|