diff --git a/tests/test_message.py b/tests/test_message.py index 220fef2..2e462d9 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,42 @@ class AnswerTestCase(CmmTestCase): answer = Answer("No") self.assertIsInstance(answer, Answer) self.assertEqual(answer, "No") + + +class TestMessage(CmmTestCase): + + @mock.patch('builtins.open', + mock.mock_open(read_data="TAGS: tag1 tag2\n=== QUESTION ===\nThis is a question\n=== ANSWER ===\nThis is an answer")) + def test_from_file_txt(self) -> None: + file_path = pathlib.Path('message.txt') + with mock.patch('chatmastermind.message.pathlib.Path.exists', return_value=True): + 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 + + @mock.patch('builtins.open', mock.mock_open()) + 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) + message.to_file(None) + + with open(file_path, "r") as fd: + file_contents = fd.read() + + expected_contents = "TAGS: tag1 tag2\n=== QUESTION ===\nThis is a question\n=== ANSWER ===\nThis is an answer\n" + self.assertEqual(file_contents, expected_contents) + + def test_to_file_yaml(self) -> None: + # TODO: Create a test yaml file + pass