sync: migrate ai-operator to Gitea (2026-08-10)
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package gateway
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"ai-operator/internal/asterisk/ari"
|
||||
"ai-operator/internal/call"
|
||||
"ai-operator/internal/config"
|
||||
)
|
||||
|
||||
type fakeARI struct{ bridgeCreated, added, removed, bridgeDeleted, mediaCreated, hungup int }
|
||||
|
||||
func (f *fakeARI) AnswerChannel(ctx context.Context, channelID string) error { return nil }
|
||||
func (f *fakeARI) HangupChannel(ctx context.Context, channelID string) error { f.hungup++; return nil }
|
||||
func (f *fakeARI) GetChannel(ctx context.Context, channelID string) (*ari.ARIChannel, error) {
|
||||
return &ari.ARIChannel{ID: channelID}, nil
|
||||
}
|
||||
func (f *fakeARI) CreateBridge(ctx context.Context, bridgeID string, bridgeType string) error {
|
||||
f.bridgeCreated++
|
||||
return nil
|
||||
}
|
||||
func (f *fakeARI) AddChannelToBridge(ctx context.Context, bridgeID string, channelID string) error {
|
||||
f.added++
|
||||
return nil
|
||||
}
|
||||
func (f *fakeARI) RemoveChannelFromBridge(ctx context.Context, bridgeID string, channelID string) error {
|
||||
f.removed++
|
||||
return nil
|
||||
}
|
||||
func (f *fakeARI) DeleteBridge(ctx context.Context, bridgeID string) error {
|
||||
f.bridgeDeleted++
|
||||
return nil
|
||||
}
|
||||
func (f *fakeARI) CreateExternalMediaChannel(ctx context.Context, req ari.ExternalMediaRequest) (*ari.ARIChannel, error) {
|
||||
f.mediaCreated++
|
||||
return &ari.ARIChannel{ID: req.ChannelID}, nil
|
||||
}
|
||||
func (f *fakeARI) GetChannelVariable(ctx context.Context, channelID string, variable string) (string, error) {
|
||||
return "conn-1", nil
|
||||
}
|
||||
|
||||
func TestGatewayStartCallMediaAttemptsSetup(t *testing.T) {
|
||||
// Uses an unreachable media URL, so setup should fail after bridge/media ARI setup without panic.
|
||||
fake := &fakeARI{}
|
||||
gw := New(config.Config{Asterisk: config.AsteriskConfig{ARIApp: "ai-operator", MediaWSBaseURL: "ws://127.0.0.1:1/media"}}, fake, nil)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
|
||||
defer cancel()
|
||||
s := &call.CallSession{CallID: "call/1", AsteriskChannelID: "caller-1"}
|
||||
_, _ = gw.StartCallMedia(ctx, s)
|
||||
if fake.bridgeCreated != 1 || fake.added != 1 || fake.mediaCreated != 1 {
|
||||
t.Fatalf("fake=%+v", fake)
|
||||
}
|
||||
if s.BridgeID == "" || s.MediaChannelID == "" || s.MediaConnectionID != "conn-1" {
|
||||
t.Fatalf("session=%+v", s)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user