ci / verify (push) Canceled after 0s
Add customer and operator login, BLE provisioning, device fleet controls, call memory, memoir generation, and refreshed family and maintenance portals. Include API contracts, migrations, firmware sources, tests, assets, and deployment documentation.
58 lines
2.4 KiB
Go
58 lines
2.4 KiB
Go
package callmemory
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
)
|
|
|
|
func TestDirectStorySchedulingAfterDrainWithManagedMemory(t *testing.T) {
|
|
f := setup(t)
|
|
f.s.ConfigureManagedSync(func(context.Context) error { return nil })
|
|
m, _, _ := f.call(t)
|
|
f.exec(t, `UPDATE call_session SET memory_mode='OFF',budget_snapshot='{"protocol":"DIRECT-CHAT-1","story_extraction_allowed":true}',
|
|
ended_at=now(),call_state='ENDED',manifest_status='DISCARDED',local_audio_off=true,sdk_stopped=true,
|
|
transcript_state='DRAINING',transcript_revision=1,drain_started_at=now(),last_text_at=now() WHERE id=$1::uuid`, m.SessionID)
|
|
f.exec(t, `INSERT INTO call_utterance(session_id,utterance_id,source_revision,speaker,text_content,interrupted,source_at)
|
|
VALUES($1::uuid,'elder-story',0,'USER','年轻时我们在河边小学教书,后来学校搬走了。',false,now())`, m.SessionID)
|
|
count := func(want int) {
|
|
t.Helper()
|
|
var got int
|
|
if err := f.p.QueryRow(context.Background(), `SELECT count(*) FROM outbox_event WHERE aggregate_id=$1::uuid AND event_type='call.story_extraction_requested'`, m.SessionID).Scan(&got); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got != want {
|
|
t.Fatalf("story jobs=%d want=%d", got, want)
|
|
}
|
|
}
|
|
if err := f.s.Maintain(context.Background()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
count(0)
|
|
f.exec(t, `UPDATE call_session SET drain_started_at=now()-interval '1 minute',last_text_at=now()-interval '1 minute' WHERE id=$1::uuid`, m.SessionID)
|
|
if err := f.s.Maintain(context.Background()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
count(1)
|
|
if err := f.s.Maintain(context.Background()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
count(1)
|
|
f.exec(t, `UPDATE call_session SET transcript_revision=2,transcript_state='DRAINING',drain_started_at=now(),last_text_at=now() WHERE id=$1::uuid`, m.SessionID)
|
|
if err := f.s.Maintain(context.Background()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
count(1)
|
|
f.exec(t, `UPDATE call_session SET drain_started_at=now()-interval '1 minute',last_text_at=now()-interval '1 minute' WHERE id=$1::uuid`, m.SessionID)
|
|
if err := f.s.Maintain(context.Background()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
count(2)
|
|
// Frozen consent prevents historical calls from being backfilled merely
|
|
// because a family grants story extraction after the call.
|
|
f.exec(t, `UPDATE call_session SET transcript_revision=3,budget_snapshot=budget_snapshot-'story_extraction_allowed' WHERE id=$1::uuid`, m.SessionID)
|
|
if err := f.s.Maintain(context.Background()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
count(2)
|
|
}
|