diff options
Diffstat (limited to 'test/database/test_foreign_keys.py')
-rw-r--r-- | test/database/test_foreign_keys.py | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/test/database/test_foreign_keys.py b/test/database/test_foreign_keys.py new file mode 100644 index 000000000..2faaa946d --- /dev/null +++ b/test/database/test_foreign_keys.py @@ -0,0 +1,111 @@ + +import time +import unittest + +from nbxmpp.protocol import JID + +from gajim.common import app +from gajim.common.settings import Settings +from gajim.common.storage.archive.const import ChatDirection +from gajim.common.storage.archive.const import MessageState +from gajim.common.storage.archive.const import MessageType +from gajim.common.storage.archive.storage import MessageArchiveStorage +from gajim.common.storage.archive.structs import DbInsertCallRowData +from gajim.common.storage.archive.structs import DbInsertFiletransferRowData +from gajim.common.storage.archive.structs import DbInsertMessageRowData +from gajim.common.storage.archive.structs import DbInsertOOBRowData +from gajim.common.storage.archive.structs import DbInsertReplyRowData + + +class ForeignKeyTest(unittest.TestCase): + + def setUp(self) -> None: + self._archive = MessageArchiveStorage(in_memory=True) + self._archive.init() + + self._account = 'testacc1' + self._remote_jid = JID.from_string('remote@jid.org') + self._occupant_id = 'occupantid1' + self._init_settings() + + def _init_settings(self) -> None: + app.settings = Settings(in_memory=True) + app.settings.init() + app.settings.add_account('testacc1') + app.settings.set_account_setting('testacc1', 'name', 'user') + app.settings.set_account_setting('testacc1', 'hostname', 'domain.org') + + def test_message_delete_cascade(self) -> None: + oob_data = DbInsertOOBRowData( + url='https://www.test.com', + description='somedesc' + ) + + call_data = DbInsertCallRowData( + sid='123', + state=0, + duration=123 + ) + + reply_data = DbInsertReplyRowData( + quoted_id='123', + quoted_jid='somejid@jid.com', + fallback_end=5 + ) + + message_data = DbInsertMessageRowData( + account=self._account, + remote_jid=self._remote_jid, + m_type=MessageType.CHAT, + direction=ChatDirection.INCOMING, + timestamp=time.time(), + state=MessageState.ACKNOWLEDGED, + resource='someres1', + message_id='1', + message='message', + ) + + entity_key = self._archive.insert_row( + message_data, + [call_data, reply_data, oob_data], + ) + + filetransfer_data = DbInsertFiletransferRowData( + fk_message_ek=entity_key, + source_type=1, + source='123', + state=1 + ) + + self._archive.insert_row(filetransfer_data) + self._archive.insert_row(filetransfer_data) + + joined_data = self._archive.get_message_with_entitykey(entity_key) + + assert joined_data.reply is not None + assert joined_data.oob is not None + assert joined_data.call is not None + + self.assertEqual(joined_data.reply.quoted_id, '123') + self.assertEqual(joined_data.oob.description, 'somedesc') + self.assertEqual(joined_data.call.sid, '123') + self.assertTrue(joined_data.has_filetransfers) + + self._archive.delete_message(entity_key) + + connection = self._archive.get_connection() + + row = connection.execute('SELECT * FROM call').fetchone() + self.assertIsNone(row) + row = connection.execute('SELECT * FROM filetransfer').fetchone() + self.assertIsNone(row) + row = connection.execute('SELECT * FROM oob').fetchone() + self.assertIsNone(row) + row = connection.execute('SELECT * FROM reply').fetchone() + self.assertIsNone(row) + row = connection.execute('SELECT * FROM message').fetchone() + self.assertIsNone(row) + + +if __name__ == '__main__': + unittest.main() |