session_test.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package models
  2. import (
  3. "encoding/json"
  4. "strings"
  5. "testing"
  6. "time"
  7. )
  8. func TestSessionSyncIndexItemOmitsConcreteContent(t *testing.T) {
  9. clientID := "client-1"
  10. updatedAt := time.Date(2026, 7, 26, 12, 30, 0, 123000000, time.UTC)
  11. session := CelestiaSession{
  12. ID: "session-1",
  13. ClientID: &clientID,
  14. Title: "现场记录",
  15. StartTime: updatedAt.Add(-time.Hour),
  16. DurationMs: 3_600_000,
  17. PhotoCount: 2,
  18. NoteCount: 3,
  19. Revision: 7,
  20. UpdatedAt: updatedAt,
  21. Events: []TimelineEvent{{ID: "event-1"}},
  22. Assets: []MediaAsset{{ID: "asset-1"}},
  23. }
  24. data, err := json.Marshal(session.SyncIndexItem())
  25. if err != nil {
  26. t.Fatalf("marshal sync index item: %v", err)
  27. }
  28. payload := string(data)
  29. if strings.Contains(payload, `"events"`) || strings.Contains(payload, `"assets"`) {
  30. t.Fatalf("sync index leaked concrete content: %s", payload)
  31. }
  32. if !strings.Contains(payload, `"updatedAt":"2026-07-26T12:30:00.123Z"`) {
  33. t.Fatalf("sync index missing precise updatedAt: %s", payload)
  34. }
  35. if !strings.Contains(payload, `"revision":7`) {
  36. t.Fatalf("sync index missing revision guard: %s", payload)
  37. }
  38. }