package memorytool import ( "errors" "testing" "time" ) func TestTokenSignerBindsConversationTaskAndExpiry(t *testing.T) { signer, err := NewTokenSigner([]byte("01234567890123456789012345678901")) if err != nil { t.Fatal(err) } now := time.Date(2026, 8, 28, 12, 0, 0, 0, time.UTC) signer.now = func() time.Time { return now } token, err := signer.Issue("conversation-one", "task-one", now.Add(time.Minute)) if err != nil { t.Fatal(err) } claims, err := signer.Verify(token) if err != nil || claims.ConversationID != "conversation-one" || claims.TaskRef != "task-one" { t.Fatalf("claims=%+v err=%v", claims, err) } if _, err := signer.Verify(token + "changed"); !errors.Is(err, ErrInvalidToken) { t.Fatalf("tampered token error=%v", err) } signer.now = func() time.Time { return now.Add(2 * time.Minute) } if _, err := signer.Verify(token); !errors.Is(err, ErrInvalidToken) { t.Fatalf("expired token error=%v", err) } }