Files
go-sip/internal/store/source_revision_call_test.go
T

83 lines
2.6 KiB
Go

package store
import (
"encoding/json"
"testing"
"time"
)
func TestSourceMetadataRefreshPreservesAcceptedCallAndUnknownOccupancy(t *testing.T) {
s := preparedCurrentCallStore(t)
first := recordTrunkCall(t, s, "task-asr", "call-before-refresh")
at := time.Date(2026, 9, 21, 1, 30, 0, 0, time.UTC)
selection := currentTaskReservation(t, s, "task-asr")
if err := s.ReserveExecute(first.DispatcherID, first.EventID, selection, at); err != nil {
t.Fatal(err)
}
if err := s.MarkExecuteUnknown(first.DispatcherID, first.EventID); err != nil {
t.Fatal(err)
}
var frozen string
if err := s.db.QueryRow(`SELECT snapshot_json FROM dispatcher_inbox WHERE event_id=?`, first.EventID).Scan(&frozen); err != nil {
t.Fatal(err)
}
snapshot, err := s.ReadSnapshot(currentDispatcherID, 1001, "task-asr")
if err != nil {
t.Fatal(err)
}
var task map[string]any
if err := json.Unmarshal(snapshot.Task.Raw, &task); err != nil {
t.Fatal(err)
}
task["name"] = "current configuration"
body, err := json.Marshal(task)
if err != nil {
t.Fatal(err)
}
if err := snapshot.Task.UnmarshalJSON(body); err != nil {
t.Fatal(err)
}
snapshot.Quota.MaxConcurrentCalls = 1
if _, err := s.CompleteEdit(snapshot, "edit-same-source-revision"); err != nil {
t.Fatal(err)
}
var after, status string
if err := s.db.QueryRow(`SELECT snapshot_json,status FROM dispatcher_inbox WHERE event_id=?`, first.EventID).Scan(&after, &status); err != nil {
t.Fatal(err)
}
if frozen != after || status != "unknown" {
t.Fatal("current configuration refresh rewrote an accepted execution")
}
if occupied, err := s.OccupiedCalls(currentDispatcherID); err != nil || occupied != 1 {
t.Fatalf("refresh released unknown occupancy: %d %v", occupied, err)
}
}
func TestSelectionIgnoresSourceRevisionButStillFreezesCurrentMetadata(t *testing.T) {
s := preparedCurrentCallStore(t)
selection := currentTaskReservation(t, s, "task-asr")
snapshot, err := s.ReadSnapshot(currentDispatcherID, 1001, "task-asr")
if err != nil {
t.Fatal(err)
}
var task map[string]any
if err := json.Unmarshal(snapshot.Task.Raw, &task); err != nil {
t.Fatal(err)
}
task["task_revision"] = 8
body, err := json.Marshal(task)
if err != nil {
t.Fatal(err)
}
if err := snapshot.Task.UnmarshalJSON(body); err != nil {
t.Fatal(err)
}
if _, err := s.CompleteEdit(snapshot, "edit-metadata-only"); err != nil {
t.Fatal(err)
}
cmd := recordTrunkCall(t, s, "task-asr", "call-after-metadata")
if err := s.ReserveExecute(cmd.DispatcherID, cmd.EventID, selection, time.Date(2026, 9, 21, 1, 30, 0, 0, time.UTC)); err != nil {
t.Fatalf("source revision alone fenced the selection: %v", err)
}
}