Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'test/database/test_foreign_keys.py')
-rw-r--r--test/database/test_foreign_keys.py111
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()