diff --git a/tests/test_message.py b/tests/test_message.py index 220fef2..2cf3df3 100644 --- a/tests/test_message.py +++ b/tests/test_message.py @@ -1,5 +1,9 @@ +from unittest import mock +import pathlib +from typing import cast from .test_main import CmmTestCase -from chatmastermind.message import source_code, MessageError, Question, Answer +from chatmastermind.message import source_code, Message, MessageError, Question, Answer +from chatmastermind.tags import Tag class SourceCodeTestCase(CmmTestCase): @@ -76,3 +80,41 @@ class AnswerTestCase(CmmTestCase): answer = Answer("No") self.assertIsInstance(answer, Answer) self.assertEqual(answer, "No") + + +class TestMessage(CmmTestCase): + + def test_from_file_txt(self) -> None: + file_path = pathlib.Path('message.txt') + with mock.patch('chatmastermind.message.pathlib.Path.exists', return_value=True), \ + mock.patch('builtins.open', + mock.mock_open( + read_data="TAGS: tag1 tag2\n=== QUESTION ===\nThis is a question\n=== ANSWER ===\nThis is an answer")): + message = Message.from_file(file_path) + + self.assertIsInstance(message, Message) + self.assertEqual(message.question, 'This is a question') + self.assertEqual(message.answer, 'This is an answer') + self.assertSetEqual(cast(set[Tag], message.tags), {Tag('tag1'), Tag('tag2')}) + self.assertEqual(message.file_path, file_path) + + def test_from_file_yaml(self) -> None: + # TODO: Create a test yaml file + pass + + def test_to_file_txt(self) -> None: + file_path = pathlib.Path('message.txt') + message = Message(Question('This is a question'), + Answer('This is an answer'), + {Tag('tag1'), Tag('tag2')}, + file_path) + expected_content = "TAGS: tag1 tag2\n=== QUESTION ===\nThis is a question\n=== ANSWER ===\nThis is an answer\n" + # fake write + with mock.patch("builtins.open", mock.mock_open) as mock_fd: + message.to_file(None) + mock_fd().assert_called_once_with(file_path, 'w') + mock_fd().write.assert_called_once_with(expected_content) + + def test_to_file_yaml(self) -> None: + # TODO: Create a test yaml file + pass