diff --git a/tests/test_stream_xep_0313.py b/tests/test_stream_xep_0313.py new file mode 100644 index 00000000..25a3a926 --- /dev/null +++ b/tests/test_stream_xep_0313.py @@ -0,0 +1,340 @@ +import unittest +from datetime import datetime +from slixmpp.test import SlixTest +from slixmpp import JID + + +class TestMAM(SlixTest): + + def setUp(self): + self.stream_start(plugins=['xep_0313']) + + def tearDown(self): + self.stream_close() + + def testRetrieveSimple(self): + """Test requesting MAM messages without RSM""" + + msgs = [] + + async def test(): + iq = await self.xmpp['xep_0313'].retrieve() + for message in iq['mam']['results']: + msgs.append(message) + + fut = self.xmpp.wrap(test()) + self.wait_() + self.send(""" + + + + """) + + self.recv(""" + + + + + + Hail to thee + + + + + """) + + self.recv(""" + + + 28482-98726-73623 + 28482-98726-73623 + + + """) + + self.run_coro(fut) + self.assertEqual( + msgs[0]['mam_result']['forwarded']['message']['body'], + "Hail to thee", + ) + self.assertEqual(len(msgs),1) + + def testRetrieveRSM(self): + """Test requesting MAM messages with RSM""" + + msgs = [] + + async def test(): + iterator = self.xmpp['xep_0313'].retrieve( + with_jid=JID('toto@titi'), + start='2010-06-07T00:00:00Z', + iterator=True, + ) + async for page in iterator: + for message in page['mam']['results']: + msgs.append(message) + + fut = self.xmpp.wrap(test()) + self.wait_() + self.send(""" + + + + + urn:xmpp:mam:2 + + + toto@titi + + + 2010-06-07T00:00:00Z + + + + 10 + + + + """) + + self.recv(""" + + + + + + Hail to thee + + + + + """) + + self.recv(""" + + + + 28482-98726-73623 + 28482-98726-73623 + 2 + + + + """) + + self.send(""" + + + + + urn:xmpp:mam:2 + + + toto@titi + + + 2010-06-07T00:00:00Z + + + + 10 + 28482-98726-73623 + + + + """) + + self.recv(""" + + + + + + Hi Y'all + + + + + """) + + self.recv(""" + + + + 28482-98726-73624 + 28482-98726-73624 + 2 + + + + """) + + self.run_coro(fut) + self.assertEqual( + msgs[0]['mam_result']['forwarded']['message']['body'], + "Hail to thee", + ) + self.assertEqual( + msgs[1]['mam_result']['forwarded']['message']['body'], + "Hi Y'all", + ) + self.assertEqual(len(msgs), 2) + + def testIterate(self): + """Test iterating over MAM messages with RSM""" + + msgs = [] + + async def test(): + iterator = self.xmpp['xep_0313'].iterate( + with_jid=JID('toto@titi'), + start='2010-06-07T00:00:00Z', + ) + async for message in iterator: + msgs.append(message) + + fut = self.xmpp.wrap(test()) + self.wait_() + self.send(""" + + + + + urn:xmpp:mam:2 + + + toto@titi + + + 2010-06-07T00:00:00Z + + + + 10 + + + + """) + + self.recv(""" + + + + + + Hail to thee + + + + + """) + + self.recv(""" + + + + 28482-98726-73623 + 28482-98726-73623 + 2 + + + + """) + + self.send(""" + + + + + urn:xmpp:mam:2 + + + toto@titi + + + 2010-06-07T00:00:00Z + + + + 10 + 28482-98726-73623 + + + + """) + + self.recv(""" + + + + + + Hi Y'all + + + + + """) + + self.recv(""" + + + + 28482-98726-73624 + 28482-98726-73624 + 2 + + + + """) + + self.run_coro(fut) + self.assertEqual( + msgs[0]['mam_result']['forwarded']['message']['body'], + "Hail to thee", + ) + self.assertEqual( + msgs[1]['mam_result']['forwarded']['message']['body'], + "Hi Y'all", + ) + self.assertEqual(len(msgs), 2) + + def test_get_metadata(self): + """Test a MAM metadata retrieval""" + fut = self.xmpp.wrap( + self.xmpp.plugin['xep_0313'].get_archive_metadata() + ) + self.wait_() + self.send(""" + + + + """) + self.recv(""" + + + + + + + """) + self.run_coro(fut) + result = fut.result() + self.assertEqual(result['mam_metadata']['start']['id'], "YWxwaGEg") + self.assertEqual( + result['mam_metadata']['start']['timestamp'], + datetime.fromisoformat('2008-08-22T21:09:04+00:00') + ) + + +suite = unittest.TestLoader().loadTestsFromTestCase(TestMAM)