package megafon import ( "context" "errors" "net/http" "net/http/httptest" "testing" "time" ) func TestNewBase(t *testing.T) { for in, want := range map[string]string{ "vats970345.megapbx.ru": "https://vats970345.megapbx.ru/crmapi/v1", "https://vats970345.megapbx.ru/": "https://vats970345.megapbx.ru/crmapi/v1", "https://vats970345.megapbx.ru/crmapi/v1": "https://vats970345.megapbx.ru/crmapi/v1", "https://vats970345.megapbx.ru/crmapi/v1/": "https://vats970345.megapbx.ru/crmapi/v1", } { if got := New(in, "k").Base; got != want { t.Errorf("New(%q).Base = %q, want %q", in, got, want) } } if New("", "k").Configured() || New("x.ru", "").Configured() { t.Error("без адреса или ключа клиент не настроен") } } func TestHistory(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Header.Get("X-API-KEY") != "secret" { w.WriteHeader(http.StatusUnauthorized) return } if r.URL.Path != "/crmapi/v1/history/json" || r.URL.Query().Get("start") != "20260920T210000Z" || r.URL.Query().Get("type") != "all" { t.Errorf("запрос: %s", r.URL.String()) } _, _ = w.Write([]byte(`[ {"uid":"1755936870","type":"in","status":"success","client":"79894787136","diversion":"79280470055", "user":"kc","user_name":"КЦ DANA общий","start":"2026-09-23T08:22:00Z","wait":14,"duration":"9","record":"https://x/rec.mp3"}, {"uid":1755936871,"type":"missed","status":"missed","client":"79894787136","via":"+7 (928) 047-00-55","start":"2026-09-23T08:21:00Z","wait":1,"duration":0}, {"type":"in","client":"79000000000"} ]`)) })) defer srv.Close() c := New(srv.URL, "secret") calls, err := c.History(context.Background(), time.Date(2026, 9, 20, 21, 0, 0, 0, time.UTC), time.Date(2026, 9, 23, 21, 0, 0, 0, time.UTC), "all") if err != nil { t.Fatal(err) } if len(calls) != 2 { t.Fatalf("звонков %d, ждали 2 (без uid — пропуск)", len(calls)) } a, b := calls[0], calls[1] if a.UID != "1755936870" || a.Via != "79280470055" || a.UserName != "КЦ DANA общий" || a.Duration != 9 || a.Wait != 14 || a.RecordURL == "" { t.Errorf("первый звонок: %+v", a) } if b.UID != "1755936871" || b.Type != "missed" || b.Via != "+7 (928) 047-00-55" { t.Errorf("второй звонок: %+v", b) } if _, err := New(srv.URL, "wrong").History(context.Background(), time.Now(), time.Now(), ""); !errors.Is(err, ErrUnauthorized) { t.Errorf("неверный ключ: %v", err) } }