From 601ebe731a2f56a00d84f65ce8816df3885fb83e Mon Sep 17 00:00:00 2001 From: juk0de Date: Sun, 24 Sep 2023 08:53:37 +0200 Subject: [PATCH] test_question_cmd: added a new testcase and made the old cases more explicit (easier to read) --- tests/test_question_cmd.py | 100 +++++++++++++++++++++++++------------ 1 file changed, 68 insertions(+), 32 deletions(-) diff --git a/tests/test_question_cmd.py b/tests/test_question_cmd.py index f216164..77d679c 100644 --- a/tests/test_question_cmd.py +++ b/tests/test_question_cmd.py @@ -7,6 +7,7 @@ from unittest import mock from unittest.mock import MagicMock, call from chatmastermind.configuration import Config from chatmastermind.commands.question import create_message, question_cmd +from chatmastermind.tags import Tag from chatmastermind.message import Message, Question, Answer from chatmastermind.chat import Chat, ChatDB from chatmastermind.ai import AIError @@ -343,15 +344,14 @@ class TestQuestionCmdRepeat(TestQuestionCmd): self.args.ask = None self.args.repeat = [] self.args.overwrite = False - fake_ai = self.mock_create_ai(self.args, self.config) - # since the message's answer is modified, we use a copy here - # -> the original is used for comparison below - expected_response = fake_ai.request(copy(message), - Chat([]), - self.args.num_answers, - set(self.args.output_tags)).messages + expected_response = Message(Question(message.question), + Answer('Answer 0'), + ai=message.ai, + model=message.model, + tags=message.tags, + file_path=Path('')) # we expect the original message + the one with the new response - expected_responses = [message] + expected_response + expected_responses = [message] + [expected_response] question_cmd(self.args, self.config) chat = ChatDB.from_dir(Path(self.cache_dir.name), Path(self.db_dir.name)) @@ -381,19 +381,20 @@ class TestQuestionCmdRepeat(TestQuestionCmd): cached_msg_file_id = cached_msg[0].file_path.stem # repeat the last question (WITH overwriting) - # -> expect a single message afterwards + # -> expect a single message afterwards (with a new answer) self.args.ask = None self.args.repeat = [] self.args.overwrite = True - fake_ai = self.mock_create_ai(self.args, self.config) - expected_response = fake_ai.request(message, - Chat([]), - self.args.num_answers, - set(self.args.output_tags)).messages + expected_response = Message(Question(message.question), + Answer('Answer 0'), + ai=message.ai, + model=message.model, + tags=message.tags, + file_path=Path('')) question_cmd(self.args, self.config) cached_msg = chat.msg_gather(loc='cache') self.assertEqual(len(self.message_list(self.cache_dir)), 1) - self.assert_msgs_equal_except_file_path(cached_msg, expected_response) + self.assert_msgs_equal_except_file_path(cached_msg, [expected_response]) # also check that the file ID has not been changed assert cached_msg[0].file_path self.assertEqual(cached_msg_file_id, cached_msg[0].file_path.stem) @@ -424,15 +425,16 @@ class TestQuestionCmdRepeat(TestQuestionCmd): self.args.ask = None self.args.repeat = [] self.args.overwrite = False - fake_ai = self.mock_create_ai(self.args, self.config) - expected_response = fake_ai.request(message, - Chat([]), - self.args.num_answers, - self.args.output_tags).messages + expected_response = Message(Question(message.question), + Answer('Answer 0'), + ai=message.ai, + model=message.model, + tags=message.tags, + file_path=Path('')) question_cmd(self.args, self.config) cached_msg = chat.msg_gather(loc='cache') self.assertEqual(len(self.message_list(self.cache_dir)), 1) - self.assert_msgs_equal_except_file_path(cached_msg, expected_response) + self.assert_msgs_equal_except_file_path(cached_msg, [expected_response]) # also check that the file ID has not been changed assert cached_msg[0].file_path self.assertEqual(cached_msg_file_id, cached_msg[0].file_path.stem) @@ -457,26 +459,60 @@ class TestQuestionCmdRepeat(TestQuestionCmd): assert cached_msg[0].file_path # repeat the last question with new arguments (without overwriting) - # -> expect two messages with identical question and answer, but different metadata + # -> expect two messages with identical question but different metadata and new answer self.args.ask = None self.args.repeat = [] self.args.overwrite = False self.args.output_tags = ['newtag'] self.args.AI = 'newai' self.args.model = 'newmodel' - new_expected_question = Message(question=Question(message.question), - tags=set(self.args.output_tags), - ai=self.args.AI, - model=self.args.model) - fake_ai = self.mock_create_ai(self.args, self.config) - new_expected_response = fake_ai.request(new_expected_question, - Chat([]), - self.args.num_answers, - set(self.args.output_tags)).messages + new_expected_response = Message(Question(message.question), + Answer('Answer 0'), + ai='newai', + model='newmodel', + tags={Tag('newtag')}, + file_path=Path('')) question_cmd(self.args, self.config) cached_msg = chat.msg_gather(loc='cache') self.assertEqual(len(self.message_list(self.cache_dir)), 2) - self.assert_msgs_equal_except_file_path(cached_msg, [message] + new_expected_response) + self.assert_msgs_equal_except_file_path(cached_msg, [message] + [new_expected_response]) + + @mock.patch('chatmastermind.commands.question.create_ai') + def test_repeat_single_question_new_args_overwrite(self, mock_create_ai: MagicMock) -> None: + """ + Repeat a single question with new arguments, overwriting the old one. + """ + mock_create_ai.side_effect = self.mock_create_ai + # create a message + message = Message(Question(self.args.ask[0]), + Answer('Old Answer'), + tags=set(self.args.output_tags), + ai=self.args.AI, + model=self.args.model, + file_path=Path(self.cache_dir.name) / '0001.txt') + message.to_file() + chat = ChatDB.from_dir(Path(self.cache_dir.name), + Path(self.db_dir.name)) + cached_msg = chat.msg_gather(loc='cache') + assert cached_msg[0].file_path + + # repeat the last question with new arguments + self.args.ask = None + self.args.repeat = [] + self.args.overwrite = True + self.args.output_tags = ['newtag'] + self.args.AI = 'newai' + self.args.model = 'newmodel' + new_expected_response = Message(Question(message.question), + Answer('Answer 0'), + ai='newai', + model='newmodel', + tags={Tag('newtag')}, + file_path=Path('')) + question_cmd(self.args, self.config) + cached_msg = chat.msg_gather(loc='cache') + self.assertEqual(len(self.message_list(self.cache_dir)), 1) + self.assert_msgs_equal_except_file_path(cached_msg, [new_expected_response]) @mock.patch('chatmastermind.commands.question.create_ai') def test_repeat_multiple_questions(self, mock_create_ai: MagicMock) -> None: