feat: Enhance hook management and session handling
- Update hook model to include last_triggered_at field. - Modify API endpoints to support updating hooks with new fields. - Implement session management UI improvements with toggle functionality. - Add new JavaScript functions for better session detail visibility. - Refactor hook storage logic to handle last triggered timestamps. - Introduce new favicon and logo for branding. - Update styles for improved layout and user experience. - Enhance tests to cover new functionality and ensure reliability.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import importlib
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from types import SimpleNamespace
|
||||
from typing import List, Tuple
|
||||
@@ -103,11 +104,13 @@ def test_create_list_and_trigger_hook(client: TestClient) -> None:
|
||||
assert data["chat_id"] == payload["chat_id"]
|
||||
assert payload["message"] in data["message"]
|
||||
assert data["action_url"].endswith(f"/action/{data['hook_id']}")
|
||||
assert data["last_triggered_at"] is None
|
||||
|
||||
list_resp = client.get("/api/hooks")
|
||||
assert list_resp.status_code == 200
|
||||
hooks = list_resp.json()
|
||||
assert len(hooks) == 1
|
||||
assert hooks[0]["last_triggered_at"] is None
|
||||
|
||||
trigger_resp = client.get(f"/action/{data['hook_id']}")
|
||||
assert trigger_resp.status_code == 200
|
||||
@@ -116,12 +119,18 @@ def test_create_list_and_trigger_hook(client: TestClient) -> None:
|
||||
call_log = getattr(client, "call_log")
|
||||
assert call_log == [(payload["chat_id"], payload["message"])]
|
||||
|
||||
refreshed_hooks = client.get("/api/hooks").json()
|
||||
last_triggered_value = refreshed_hooks[0]["last_triggered_at"]
|
||||
assert last_triggered_value is not None
|
||||
first_triggered_at = datetime.fromisoformat(last_triggered_value)
|
||||
|
||||
new_id = "customid123"
|
||||
patch_resp = client.patch(f"/api/hooks/{data['hook_id']}", json={"hook_id": new_id})
|
||||
assert patch_resp.status_code == 200
|
||||
patched = patch_resp.json()
|
||||
assert patched["hook_id"] == new_id
|
||||
assert patched["action_url"].endswith(f"/action/{new_id}")
|
||||
assert patched["last_triggered_at"] == last_triggered_value
|
||||
|
||||
# Old ID should now be gone
|
||||
old_trigger = client.get(f"/action/{data['hook_id']}")
|
||||
@@ -132,6 +141,29 @@ def test_create_list_and_trigger_hook(client: TestClient) -> None:
|
||||
assert new_trigger.status_code == 200
|
||||
assert getattr(client, "call_log") == [(payload["chat_id"], payload["message"])]
|
||||
|
||||
update_payload = {
|
||||
"chat_id": "@updated",
|
||||
"message": "Updated message!",
|
||||
}
|
||||
update_resp = client.patch(f"/api/hooks/{new_id}", json=update_payload)
|
||||
assert update_resp.status_code == 200
|
||||
updated_hook = update_resp.json()
|
||||
assert updated_hook["hook_id"] == new_id
|
||||
assert updated_hook["chat_id"] == update_payload["chat_id"]
|
||||
assert updated_hook["message"] == update_payload["message"]
|
||||
assert updated_hook["last_triggered_at"] == last_triggered_value
|
||||
|
||||
call_log.clear()
|
||||
retrigger_resp = client.get(f"/action/{new_id}")
|
||||
assert retrigger_resp.status_code == 200
|
||||
assert getattr(client, "call_log") == [(update_payload["chat_id"], update_payload["message"])]
|
||||
|
||||
final_hooks = client.get("/api/hooks").json()
|
||||
second_triggered_value = final_hooks[0]["last_triggered_at"]
|
||||
assert second_triggered_value is not None
|
||||
second_triggered_at = datetime.fromisoformat(second_triggered_value)
|
||||
assert second_triggered_at >= first_triggered_at
|
||||
|
||||
|
||||
def test_login_verify_without_phone_number(client: TestClient) -> None:
|
||||
response = client.post("/api/login/verify", json={"code": "123456"})
|
||||
|
||||
Reference in New Issue
Block a user