73 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| '''
 | |
| Tests for caps network coding
 | |
| '''
 | |
| import unittest
 | |
| 
 | |
| import lib
 | |
| lib.setup_env()
 | |
| 
 | |
| from common import caps_cache
 | |
| from common.protocol import caps
 | |
| from common.contacts import Contact
 | |
| 
 | |
| from mock import Mock
 | |
| 
 | |
| from common.xmpp import simplexml
 | |
| from common.xmpp import protocol
 | |
| 
 | |
| class TestableConnectionCaps(caps.ConnectionCaps):
 | |
| 
 | |
|     def __init__(self, *args, **kwargs):
 | |
|         self._mocked_contacts = {}
 | |
|         caps.ConnectionCaps.__init__(self, *args, **kwargs)
 | |
| 
 | |
|     def _get_contact_or_gc_contact_for_jid(self, jid):
 | |
|         """
 | |
|         Overwrite to decouple form contact handling
 | |
|         """
 | |
|         if jid not in self._mocked_contacts:
 | |
|             self._mocked_contacts[jid] = Mock(realClass=Contact)
 | |
|             self._mocked_contacts[jid].jid = jid
 | |
|         return self._mocked_contacts[jid]
 | |
| 
 | |
|     def discoverInfo(self, *args, **kwargs):
 | |
|         pass
 | |
| 
 | |
|     def get_mocked_contact_for_jid(self, jid):
 | |
|         return self._mocked_contacts[jid]
 | |
| 
 | |
| 
 | |
| class TestConnectionCaps(unittest.TestCase):
 | |
| 
 | |
|     def test_capsPresenceCB(self):
 | |
|         jid = "user@server.com/a"
 | |
|         connection_caps = TestableConnectionCaps("account",
 | |
|                 self._build_assertering_dispatcher_function("CAPS_RECEIVED", jid),
 | |
|                 Mock(), caps_cache.create_suitable_client_caps)
 | |
| 
 | |
|         xml = """<presence from='user@server.com/a' to='%s' id='123'>
 | |
|                                         <c node='http://gajim.org' ver='pRCD6cgQ4SDqNMCjdhRV6TECx5o='
 | |
|                                                 hash='sha-1' xmlns='http://jabber.org/protocol/caps'/>
 | |
|                                 </presence>
 | |
|                         """ % (jid)
 | |
|         iq = protocol.Iq(node=simplexml.XML2Node(xml))
 | |
|         connection_caps._capsPresenceCB(None, iq)
 | |
| 
 | |
|         self.assertTrue(self._dispatcher_called, msg="Must have received caps")
 | |
| 
 | |
|         client_caps = connection_caps.get_mocked_contact_for_jid(jid).client_caps
 | |
|         self.assertTrue(client_caps, msg="Client caps must be set")
 | |
|         self.assertFalse(isinstance(client_caps, caps_cache.NullClientCaps),
 | |
|                 msg="On receive of proper caps, we must not use the fallback")
 | |
| 
 | |
|     def _build_assertering_dispatcher_function(self, expected_event, jid):
 | |
|         self._dispatcher_called = False
 | |
|         def dispatch(event, data):
 | |
|             self.assertFalse(self._dispatcher_called, msg="Must only be called once")
 | |
|             self._dispatcher_called = True
 | |
|             self.assertEqual(expected_event, event)
 | |
|             self.assertEqual(jid, data[0])
 | |
|         return dispatch
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     unittest.main()
 |