"""Firul de discutie: continuare vs subiect nou, ancora, tacerea la preluare.""" from __future__ import annotations import time import fir JID = "40712345678@s.whatsapp.net" EROARE = ("[Oracle][ODBC][Ora]ORA-06550: line 1, column 7\n" "PLS-00906: object VADECO PACK PARTENERI is invalid") def test_firul_retine_codurile_ancorei(): f = fir.deschide(JID, EROARE) assert "ora-06550" in f["coduri"] and "pls-00906" in f["coduri"] def test_un_raspuns_scurt_e_continuare_nu_eroare_noua(): """Cazul masurat: „da, ma blocheaza" cautat singur nimerea ordinul de plata.""" f = fir.deschide(JID, EROARE) assert fir.este_continuare(f, "da, ma blocheaza complet", False) assert fir.este_continuare(f, "eram la salvarea unei facturi", False) # ancora intra in cautare, ca sa nu se caute patru cuvinte fara context q = fir.interogare(f, "da, ma blocheaza complet") assert "ORA-06550" in q and "ma blocheaza" in q def test_captura_noua_sau_alt_cod_rup_firul(): f = fir.deschide(JID, EROARE) assert not fir.este_continuare(f, "imi da acum ORA-12154", False) assert not fir.este_continuare(f, "si asta ce e?", True) # captura noua # acelasi cod nu rupe firul assert fir.este_continuare(f, "tot ORA-06550 imi da", False) def test_fara_fir_nu_exista_continuare(): assert not fir.este_continuare(None, "da", False) def test_firul_expira(monkeypatch): f = fir.deschide(JID, EROARE) fir.salveaza(f) assert fir.incarca(JID) is not None tarziu = time.time() + fir.ttl_s() + 1 monkeypatch.setattr(fir.time, "time", lambda: tarziu) assert fir.incarca(JID) is None def test_istoricul_se_opreste_la_max_schimburi(): f = fir.deschide(JID, EROARE) for i in range(fir.MAX_SCHIMBURI + 4): fir.adauga(f, "client", f"mesaj {i}") assert len(f["schimburi"]) == fir.MAX_SCHIMBURI assert f["schimburi"][-1]["text"] == f"mesaj {fir.MAX_SCHIMBURI + 3}" assert fir.istoric(f)[-1]["role"] == "user" def test_comenzile_de_oprire_si_revenire(): assert fir.comanda("Maria, stop") == "stop" assert fir.comanda("preiau eu") == "stop" assert fir.comanda("Maria, continua") == "start" assert fir.comanda("cum trimit D406") is None def test_tacerea_expira(monkeypatch): f = fir.deschide(JID, EROARE) fir.taci(f) assert fir.tace(f) tarziu = time.time() + fir.tacere_s() + 1 monkeypatch.setattr(fir.time, "time", lambda: tarziu) assert not fir.tace(f) def test_preluarea_doar_in_grupuri_cu_mai_multi_oameni(monkeypatch): """In self-chat si in grupul de test tot ce se scrie e fromMe.""" import consumer monkeypatch.setattr(consumer, "grup_info", lambda jid: {"participants": 1 if "test" in jid else 5}) assert not consumer.preluare_de_om({"fromMe": True, "isGroup": False, "from": JID}) assert not consumer.preluare_de_om( {"fromMe": True, "isGroup": True, "from": "test@g.us", "text": "salut"}) assert consumer.preluare_de_om( {"fromMe": True, "isGroup": True, "from": "client@g.us", "text": "preiau eu cazul"}) # propriul raspuns al Mariei nu e „un om care a preluat" assert not consumer.preluare_de_om( {"fromMe": True, "isGroup": True, "from": "client@g.us", "text": consumer.REPLY_PREFIX + "buna"})