2023-12-19 16:09:01 +00:00
|
|
|
import datetime
|
2023-11-28 20:45:43 +00:00
|
|
|
import pathlib
|
|
|
|
|
2023-12-11 21:53:30 +00:00
|
|
|
from langchain_community.chat_loaders import imessage, utils
|
2023-11-28 20:45:43 +00:00
|
|
|
|
|
|
|
|
Restore self message sent before OSX 12 Monterey (#14818)
<!-- Thank you for contributing to LangChain!
Replace this entire comment with:
- **Description:** a description of the change,
- **Issue:** the issue # it fixes (if applicable),
- **Dependencies:** any dependencies required for this change,
- **Tag maintainer:** for a quicker response, tag the relevant
maintainer (see below),
- **Twitter handle:** we announce bigger features on Twitter. If your PR
gets announced, and you'd like a mention, we'll gladly shout you out!
Please make sure your PR is passing linting and testing before
submitting. Run `make format`, `make lint` and `make test` to check this
locally.
See contribution guidelines for more information on how to write/run
tests, lint, etc:
https://github.com/langchain-ai/langchain/blob/master/.github/CONTRIBUTING.md
If you're adding a new integration, please include:
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in `docs/extras`
directory.
If no one reviews your PR within a few days, please @-mention one of
@baskaryan, @eyurtsev, @hwchase17.
-->
2024-01-02 00:04:14 +00:00
|
|
|
def test_imessage_chat_loader_upgrade_osx11() -> None:
|
|
|
|
chat_path = (
|
|
|
|
pathlib.Path(__file__).parent / "data" / "imessage_chat_upgrade_osx_11.db"
|
|
|
|
)
|
|
|
|
loader = imessage.IMessageChatLoader(str(chat_path))
|
|
|
|
|
|
|
|
chat_sessions = list(
|
|
|
|
utils.map_ai_messages(loader.lazy_load(), sender="testemail@gmail.com")
|
|
|
|
)
|
|
|
|
assert chat_sessions, "Chat sessions should not be empty"
|
|
|
|
|
|
|
|
assert chat_sessions[0]["messages"], "Chat messages should not be empty"
|
|
|
|
|
|
|
|
first_message = chat_sessions[0]["messages"][0]
|
|
|
|
# message content in text field
|
|
|
|
assert "Yeh" in first_message.content, "Chat content mismatch"
|
|
|
|
|
|
|
|
# time parsed correctly
|
|
|
|
expected_message_time = 720845450393148160
|
|
|
|
assert (
|
|
|
|
first_message.additional_kwargs["message_time"] == expected_message_time
|
|
|
|
), "unexpected time"
|
|
|
|
|
|
|
|
expected_parsed_time = datetime.datetime(2023, 11, 5, 2, 50, 50, 393148)
|
|
|
|
assert (
|
|
|
|
first_message.additional_kwargs["message_time_as_datetime"]
|
|
|
|
== expected_parsed_time
|
|
|
|
), "date failed to parse"
|
|
|
|
|
|
|
|
# is_from_me parsed correctly
|
|
|
|
assert (
|
|
|
|
first_message.additional_kwargs["is_from_me"] is False
|
|
|
|
), "is_from_me failed to parse"
|
|
|
|
|
|
|
|
|
2023-11-28 20:45:43 +00:00
|
|
|
def test_imessage_chat_loader() -> None:
|
|
|
|
chat_path = pathlib.Path(__file__).parent / "data" / "imessage_chat.db"
|
|
|
|
loader = imessage.IMessageChatLoader(str(chat_path))
|
|
|
|
|
|
|
|
chat_sessions = list(
|
|
|
|
utils.map_ai_messages(loader.lazy_load(), sender="testemail@gmail.com")
|
|
|
|
)
|
|
|
|
assert chat_sessions, "Chat sessions should not be empty"
|
|
|
|
|
|
|
|
assert chat_sessions[0]["messages"], "Chat messages should not be empty"
|
|
|
|
|
2023-12-19 16:09:01 +00:00
|
|
|
first_message = chat_sessions[0]["messages"][0]
|
|
|
|
|
2023-11-28 20:45:43 +00:00
|
|
|
# message content in text field
|
2023-12-19 16:09:01 +00:00
|
|
|
assert "Yeh" in first_message.content, "Chat content mismatch"
|
|
|
|
|
|
|
|
# time parsed correctly
|
|
|
|
expected_message_time = 720845450393148160
|
|
|
|
assert (
|
|
|
|
first_message.additional_kwargs["message_time"] == expected_message_time
|
|
|
|
), "unexpected time"
|
|
|
|
|
|
|
|
expected_parsed_time = datetime.datetime(2023, 11, 5, 2, 50, 50, 393148)
|
|
|
|
assert (
|
|
|
|
first_message.additional_kwargs["message_time_as_datetime"]
|
|
|
|
== expected_parsed_time
|
|
|
|
), "date failed to parse"
|
|
|
|
|
|
|
|
# is_from_me parsed correctly
|
|
|
|
assert (
|
|
|
|
first_message.additional_kwargs["is_from_me"] is False
|
|
|
|
), "is_from_me failed to parse"
|
2023-11-28 20:45:43 +00:00
|
|
|
|
|
|
|
# short message content in attributedBody field
|
|
|
|
assert (
|
|
|
|
"John is the almighty" in chat_sessions[0]["messages"][16].content
|
|
|
|
), "Chat content mismatch"
|
|
|
|
|
|
|
|
# long message content in attributedBody field
|
|
|
|
long_msg = "aaaaabbbbbaaaaabbbbbaaaaabbbbbaaaaabbbbbaaaaabbbbbaaaaabbbbbaaaaabbbbba"
|
|
|
|
"aaaabbbbbaaaaabbbbbaaaaabbbbbaaaaabbbbbaaaaabbbbbaaaaabbb"
|
|
|
|
assert long_msg in chat_sessions[0]["messages"][18].content, "Chat content mismatch"
|