44 lines
1.7 KiB
Python
44 lines
1.7 KiB
Python
from fastapi.testclient import TestClient
|
|
|
|
from services.interaction_service.app import app as interaction_app
|
|
from services.webchat_adapter_service.app import app as webchat_app
|
|
|
|
|
|
def test_webchat_message_creates_interaction_and_can_be_listed():
|
|
webchat_client = TestClient(webchat_app)
|
|
interaction_client = TestClient(interaction_app)
|
|
|
|
created = webchat_client.post(
|
|
"/integrations/webchat/messages",
|
|
json={
|
|
"session_id": "web_session_1",
|
|
"text": "Need help with the checkout page",
|
|
"visitor_name": "Visitor One",
|
|
"customer_external_id": "cust_ext_1",
|
|
"queue_id": "line2",
|
|
"priority": 2,
|
|
"payload": {"source": "test", "subject": "Checkout issue"},
|
|
},
|
|
)
|
|
assert created.status_code == 200
|
|
payload = created.json()
|
|
assert payload["message_id"].startswith("wcm_")
|
|
assert payload["interaction_id"].startswith("int_")
|
|
|
|
interaction = interaction_client.get(f"/interactions/{payload['interaction_id']}")
|
|
assert interaction.status_code == 200
|
|
assert interaction.json()["channel"] == "webchat"
|
|
assert interaction.json()["queue_id"] == "line2"
|
|
assert interaction.json()["customer_id"] == "cust_ext_1"
|
|
|
|
timeline = interaction_client.get(f"/interactions/{payload['interaction_id']}/timeline")
|
|
assert timeline.status_code == 200
|
|
actions = [event["action"] for event in timeline.json()["events"]]
|
|
assert "interaction.created" in actions
|
|
assert "webchat.message_received" in actions
|
|
|
|
listed = webchat_client.get("/integrations/webchat/messages?session_id=web_session_1")
|
|
assert listed.status_code == 200
|
|
assert len(listed.json()) >= 1
|
|
assert listed.json()[-1]["session_id"] == "web_session_1"
|