Change type msg_location to an Enum instead of Literal to be able to get all values easy and improve type checks.
This commit is contained in:
+47
-47
@@ -7,7 +7,7 @@ from io import StringIO
|
||||
from unittest.mock import patch
|
||||
from chatmastermind.tags import TagLine
|
||||
from chatmastermind.message import Message, Question, Answer, Tag, MessageFilter
|
||||
from chatmastermind.chat import Chat, ChatDB, ChatError
|
||||
from chatmastermind.chat import Chat, ChatDB, ChatError, msg_location
|
||||
|
||||
|
||||
msg_suffix: str = Message.file_suffix_write
|
||||
@@ -595,92 +595,92 @@ class TestChatDB(TestChatBase):
|
||||
chat_db = ChatDB.from_dir(pathlib.Path(self.cache_path.name),
|
||||
pathlib.Path(self.db_path.name))
|
||||
# search for a DB file in memory
|
||||
self.assertEqual(chat_db.msg_find([str(self.message1.file_path)], loc='mem'), [self.message1])
|
||||
self.assertEqual(chat_db.msg_find([self.message1.msg_id()], loc='mem'), [self.message1])
|
||||
self.assertEqual(chat_db.msg_find(['0001.msg'], loc='mem'), [self.message1])
|
||||
self.assertEqual(chat_db.msg_find(['0001'], loc='mem'), [self.message1])
|
||||
self.assertEqual(chat_db.msg_find([str(self.message1.file_path)], loc=msg_location.MEM), [self.message1])
|
||||
self.assertEqual(chat_db.msg_find([self.message1.msg_id()], loc=msg_location.MEM), [self.message1])
|
||||
self.assertEqual(chat_db.msg_find(['0001.msg'], loc=msg_location.MEM), [self.message1])
|
||||
self.assertEqual(chat_db.msg_find(['0001'], loc=msg_location.MEM), [self.message1])
|
||||
# and on disk
|
||||
self.assertEqual(chat_db.msg_find([str(self.message2.file_path)], loc='db'), [self.message2])
|
||||
self.assertEqual(chat_db.msg_find([self.message2.msg_id()], loc='db'), [self.message2])
|
||||
self.assertEqual(chat_db.msg_find(['0002.msg'], loc='db'), [self.message2])
|
||||
self.assertEqual(chat_db.msg_find(['0002'], loc='db'), [self.message2])
|
||||
self.assertEqual(chat_db.msg_find([str(self.message2.file_path)], loc=msg_location.DB), [self.message2])
|
||||
self.assertEqual(chat_db.msg_find([self.message2.msg_id()], loc=msg_location.DB), [self.message2])
|
||||
self.assertEqual(chat_db.msg_find(['0002.msg'], loc=msg_location.DB), [self.message2])
|
||||
self.assertEqual(chat_db.msg_find(['0002'], loc=msg_location.DB), [self.message2])
|
||||
# now search the cache -> expect empty result
|
||||
self.assertEqual(chat_db.msg_find([str(self.message3.file_path)], loc='cache'), [])
|
||||
self.assertEqual(chat_db.msg_find([self.message3.msg_id()], loc='cache'), [])
|
||||
self.assertEqual(chat_db.msg_find(['0003.msg'], loc='cache'), [])
|
||||
self.assertEqual(chat_db.msg_find(['0003'], loc='cache'), [])
|
||||
self.assertEqual(chat_db.msg_find([str(self.message3.file_path)], loc=msg_location.CACHE), [])
|
||||
self.assertEqual(chat_db.msg_find([self.message3.msg_id()], loc=msg_location.CACHE), [])
|
||||
self.assertEqual(chat_db.msg_find(['0003.msg'], loc=msg_location.CACHE), [])
|
||||
self.assertEqual(chat_db.msg_find(['0003'], loc=msg_location.CACHE), [])
|
||||
# search for multiple messages
|
||||
# -> search one twice, expect result to be unique
|
||||
search_names = ['0001', '0002.msg', self.message3.msg_id(), str(self.message3.file_path)]
|
||||
expected_result = [self.message1, self.message2, self.message3]
|
||||
result = chat_db.msg_find(search_names, loc='all')
|
||||
result = chat_db.msg_find(search_names, loc=msg_location.ALL)
|
||||
self.assert_messages_equal(result, expected_result)
|
||||
|
||||
def test_msg_latest(self) -> None:
|
||||
chat_db = ChatDB.from_dir(pathlib.Path(self.cache_path.name),
|
||||
pathlib.Path(self.db_path.name))
|
||||
self.assertEqual(chat_db.msg_latest(loc='mem'), self.message4)
|
||||
self.assertEqual(chat_db.msg_latest(loc='db'), self.message4)
|
||||
self.assertEqual(chat_db.msg_latest(loc='disk'), self.message4)
|
||||
self.assertEqual(chat_db.msg_latest(loc='all'), self.message4)
|
||||
self.assertEqual(chat_db.msg_latest(loc=msg_location.MEM), self.message4)
|
||||
self.assertEqual(chat_db.msg_latest(loc=msg_location.DB), self.message4)
|
||||
self.assertEqual(chat_db.msg_latest(loc=msg_location.DISK), self.message4)
|
||||
self.assertEqual(chat_db.msg_latest(loc=msg_location.ALL), self.message4)
|
||||
# the cache is currently empty:
|
||||
self.assertIsNone(chat_db.msg_latest(loc='cache'))
|
||||
self.assertIsNone(chat_db.msg_latest(loc=msg_location.CACHE))
|
||||
# add new messages to the cache dir
|
||||
new_message = Message(question=Question("New Question"),
|
||||
answer=Answer("New Answer"))
|
||||
chat_db.cache_add([new_message])
|
||||
self.assertEqual(chat_db.msg_latest(loc='cache'), new_message)
|
||||
self.assertEqual(chat_db.msg_latest(loc='mem'), new_message)
|
||||
self.assertEqual(chat_db.msg_latest(loc='disk'), new_message)
|
||||
self.assertEqual(chat_db.msg_latest(loc='all'), new_message)
|
||||
self.assertEqual(chat_db.msg_latest(loc=msg_location.CACHE), new_message)
|
||||
self.assertEqual(chat_db.msg_latest(loc=msg_location.MEM), new_message)
|
||||
self.assertEqual(chat_db.msg_latest(loc=msg_location.DISK), new_message)
|
||||
self.assertEqual(chat_db.msg_latest(loc=msg_location.ALL), new_message)
|
||||
# the DB does not contain the new message
|
||||
self.assertEqual(chat_db.msg_latest(loc='db'), self.message4)
|
||||
self.assertEqual(chat_db.msg_latest(loc=msg_location.DB), self.message4)
|
||||
|
||||
def test_msg_gather(self) -> None:
|
||||
chat_db = ChatDB.from_dir(pathlib.Path(self.cache_path.name),
|
||||
pathlib.Path(self.db_path.name))
|
||||
all_messages = [self.message1, self.message2, self.message3, self.message4]
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='all'), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='db'), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='mem'), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='disk'), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='cache'), [])
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.ALL), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.DB), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.MEM), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.DISK), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.CACHE), [])
|
||||
# add a new message, but only to the internal list
|
||||
new_message = Message(Question("What?"))
|
||||
all_messages_mem = all_messages + [new_message]
|
||||
chat_db.msg_add([new_message])
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='mem'), all_messages_mem)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='all'), all_messages_mem)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.MEM), all_messages_mem)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.ALL), all_messages_mem)
|
||||
# the nr. of messages on disk did not change -> expect old result
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='db'), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='disk'), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='cache'), [])
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.DB), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.DISK), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.CACHE), [])
|
||||
# test with MessageFilter
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='all', mfilter=MessageFilter(tags_or={Tag('tag1')})),
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.ALL, mfilter=MessageFilter(tags_or={Tag('tag1')})),
|
||||
[self.message1])
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='disk', mfilter=MessageFilter(tags_or={Tag('tag2')})),
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.DISK, mfilter=MessageFilter(tags_or={Tag('tag2')})),
|
||||
[self.message2])
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='cache', mfilter=MessageFilter(tags_or={Tag('tag3')})),
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.CACHE, mfilter=MessageFilter(tags_or={Tag('tag3')})),
|
||||
[])
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='mem', mfilter=MessageFilter(question_contains="What")),
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.MEM, mfilter=MessageFilter(question_contains="What")),
|
||||
[new_message])
|
||||
|
||||
def test_msg_move_and_gather(self) -> None:
|
||||
chat_db = ChatDB.from_dir(pathlib.Path(self.cache_path.name),
|
||||
pathlib.Path(self.db_path.name))
|
||||
all_messages = [self.message1, self.message2, self.message3, self.message4]
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='db'), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='cache'), [])
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.DB), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.CACHE), [])
|
||||
# move first message to the cache
|
||||
chat_db.cache_move(self.message1)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='cache'), [self.message1])
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.CACHE), [self.message1])
|
||||
self.assertEqual(self.message1.file_path.parent, pathlib.Path(self.cache_path.name)) # type: ignore [union-attr]
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='db'), [self.message2, self.message3, self.message4])
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='all'), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='disk'), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='mem'), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.DB), [self.message2, self.message3, self.message4])
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.ALL), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.DISK), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.MEM), all_messages)
|
||||
# now move first message back to the DB
|
||||
chat_db.db_move(self.message1)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='cache'), [])
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.CACHE), [])
|
||||
self.assertEqual(self.message1.file_path.parent, pathlib.Path(self.db_path.name)) # type: ignore [union-attr]
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc='db'), all_messages)
|
||||
self.assert_messages_equal(chat_db.msg_gather(loc=msg_location.DB), all_messages)
|
||||
|
||||
Reference in New Issue
Block a user