Add comprehensive unit tests for SnapshotStore
All checks were successful
CI / build (pull_request) Successful in 17s
All checks were successful
CI / build (pull_request) Successful in 17s
Implement SaveSnapshot and GetLatestSnapshot methods on InMemoryEventStore to satisfy the SnapshotStore interface, and add comprehensive tests covering: - SaveSnapshot persists snapshots correctly - GetLatestSnapshot returns most recent snapshot by version - Behavior when no snapshot exists (returns nil, nil) - Snapshot versioning is respected across actors - Version ordering (higher version wins, not insertion order) - Data integrity for complex, nested, and special character states - Edge cases: zero version, large version, empty/nil state Closes #4 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,13 +6,15 @@ import (
|
||||
|
||||
// InMemoryEventStore provides a simple in-memory event store for testing
|
||||
type InMemoryEventStore struct {
|
||||
events map[string][]*aether.Event // actorID -> events
|
||||
events map[string][]*aether.Event // actorID -> events
|
||||
snapshots map[string][]*aether.ActorSnapshot // actorID -> snapshots (sorted by version)
|
||||
}
|
||||
|
||||
// NewInMemoryEventStore creates a new in-memory event store
|
||||
func NewInMemoryEventStore() *InMemoryEventStore {
|
||||
return &InMemoryEventStore{
|
||||
events: make(map[string][]*aether.Event),
|
||||
events: make(map[string][]*aether.Event),
|
||||
snapshots: make(map[string][]*aether.ActorSnapshot),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,3 +60,29 @@ func (es *InMemoryEventStore) GetLatestVersion(actorID string) (int64, error) {
|
||||
|
||||
return latestVersion, nil
|
||||
}
|
||||
|
||||
// SaveSnapshot saves a snapshot to the in-memory store
|
||||
func (es *InMemoryEventStore) SaveSnapshot(snapshot *aether.ActorSnapshot) error {
|
||||
if _, exists := es.snapshots[snapshot.ActorID]; !exists {
|
||||
es.snapshots[snapshot.ActorID] = make([]*aether.ActorSnapshot, 0)
|
||||
}
|
||||
es.snapshots[snapshot.ActorID] = append(es.snapshots[snapshot.ActorID], snapshot)
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetLatestSnapshot returns the most recent snapshot for an actor
|
||||
func (es *InMemoryEventStore) GetLatestSnapshot(actorID string) (*aether.ActorSnapshot, error) {
|
||||
snapshots, exists := es.snapshots[actorID]
|
||||
if !exists || len(snapshots) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
var latest *aether.ActorSnapshot
|
||||
for _, snapshot := range snapshots {
|
||||
if latest == nil || snapshot.Version > latest.Version {
|
||||
latest = snapshot
|
||||
}
|
||||
}
|
||||
|
||||
return latest, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user