mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-28 14:07:55 +00:00
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
109 lines
3.3 KiB
Python
109 lines
3.3 KiB
Python
"""Tests for iMessage AppleScript daemon."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sqlite3
|
|
from pathlib import Path
|
|
|
|
|
|
def _create_fake_chat_db(db_path: Path) -> None:
|
|
conn = sqlite3.connect(str(db_path))
|
|
conn.executescript("""
|
|
CREATE TABLE handle (ROWID INTEGER PRIMARY KEY, id TEXT);
|
|
CREATE TABLE chat (
|
|
ROWID INTEGER PRIMARY KEY,
|
|
chat_identifier TEXT, display_name TEXT
|
|
);
|
|
CREATE TABLE chat_message_join (
|
|
chat_id INTEGER, message_id INTEGER
|
|
);
|
|
CREATE TABLE message (
|
|
ROWID INTEGER PRIMARY KEY, text TEXT,
|
|
handle_id INTEGER, date INTEGER, is_from_me INTEGER
|
|
);
|
|
""")
|
|
conn.execute("INSERT INTO handle VALUES (1, '+15551234567')")
|
|
conn.execute("INSERT INTO chat VALUES (1, '+15551234567', 'Test Chat')")
|
|
conn.execute("INSERT INTO chat_message_join VALUES (1, 1)")
|
|
conn.execute(
|
|
"INSERT INTO message VALUES (1, 'Hello agent', 1, 700000000000000000, 0)"
|
|
)
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
|
|
def test_poll_new_messages(tmp_path: Path) -> None:
|
|
from openjarvis.channels.imessage_daemon import poll_new_messages
|
|
|
|
db_path = tmp_path / "chat.db"
|
|
_create_fake_chat_db(db_path)
|
|
messages = poll_new_messages(
|
|
db_path=str(db_path),
|
|
last_rowid=0,
|
|
chat_identifier="+15551234567",
|
|
)
|
|
assert len(messages) == 1
|
|
assert messages[0]["text"] == "Hello agent"
|
|
assert messages[0]["rowid"] == 1
|
|
|
|
|
|
def test_poll_skips_old_messages(tmp_path: Path) -> None:
|
|
from openjarvis.channels.imessage_daemon import poll_new_messages
|
|
|
|
db_path = tmp_path / "chat.db"
|
|
_create_fake_chat_db(db_path)
|
|
messages = poll_new_messages(
|
|
db_path=str(db_path),
|
|
last_rowid=1,
|
|
chat_identifier="+15551234567",
|
|
)
|
|
assert len(messages) == 0
|
|
|
|
|
|
def test_poll_filters_by_chat(tmp_path: Path) -> None:
|
|
from openjarvis.channels.imessage_daemon import poll_new_messages
|
|
|
|
db_path = tmp_path / "chat.db"
|
|
_create_fake_chat_db(db_path)
|
|
messages = poll_new_messages(
|
|
db_path=str(db_path),
|
|
last_rowid=0,
|
|
chat_identifier="+15559999999",
|
|
)
|
|
assert len(messages) == 0
|
|
|
|
|
|
def test_poll_skips_own_messages(tmp_path: Path) -> None:
|
|
from openjarvis.channels.imessage_daemon import poll_new_messages
|
|
|
|
db_path = tmp_path / "chat.db"
|
|
conn = sqlite3.connect(str(db_path))
|
|
conn.executescript("""
|
|
CREATE TABLE handle (ROWID INTEGER PRIMARY KEY, id TEXT);
|
|
CREATE TABLE chat (
|
|
ROWID INTEGER PRIMARY KEY,
|
|
chat_identifier TEXT, display_name TEXT
|
|
);
|
|
CREATE TABLE chat_message_join (
|
|
chat_id INTEGER, message_id INTEGER
|
|
);
|
|
CREATE TABLE message (
|
|
ROWID INTEGER PRIMARY KEY, text TEXT,
|
|
handle_id INTEGER, date INTEGER, is_from_me INTEGER
|
|
);
|
|
""")
|
|
conn.execute("INSERT INTO handle VALUES (1, '+15551234567')")
|
|
conn.execute("INSERT INTO chat VALUES (1, '+15551234567', 'Test')")
|
|
conn.execute("INSERT INTO chat_message_join VALUES (1, 1)")
|
|
conn.execute(
|
|
"INSERT INTO message VALUES (1, 'My own msg', 1, 700000000000000000, 1)"
|
|
)
|
|
conn.commit()
|
|
conn.close()
|
|
messages = poll_new_messages(
|
|
db_path=str(db_path),
|
|
last_rowid=0,
|
|
chat_identifier="+15551234567",
|
|
)
|
|
assert len(messages) == 0
|