def test_response_received(self): publish_urn = 'rho:instances.owner' payload = StoragePayload() payload.add_type(FOAF.Person, RHO.Owner) promise = self.rdf_publisher.send_out_request(payload) args, kwargs = self.roster_plugin.send_message.call_args payload = kwargs['payload'] thread_id = kwargs['thread_id'] response_payload = ResultCollectionPayload() response_payload.append(ResultPayload(about=publish_urn, types=[FOAF.Person, RHO.Owner])) self.rdf_publisher._send_message(RDFStanzaType.RESPONSE, response_payload, thread_id) response_args, response_kwargs = self.roster_plugin.send_message.call_args payload = response_kwargs['payload'] response_message = Message() response_message.append(payload) response_message['thread'] = response_kwargs['thread_id'] with mock.patch.object(promise, attribute='resolved') as mock_promise_resolve: self.rdf_publisher._receive_message(response_message) self.assertEqual(1, mock_promise_resolve.call_count) args, kwargs = mock_promise_resolve.call_args result = [rdf.about for rdf in args[0].results] self.assertEqual(result, [publish_urn])
def test_sources_retrieved(self): publish_urn = 'rho:instances.owner' payload = StoragePayload() payload.add_type(FOAF.Person, RHO.Owner) promise = self.rdf_publisher.send_out_request(payload, allow_multiple=True) args, kwargs = self.roster_plugin.send_message.call_args payload = kwargs['payload'] thread_id = kwargs['thread_id'] args, kwargs = self.scheduler_plugin.schedule_task.call_args callback = kwargs['callback'] response_payload = ResultCollectionPayload() response_payload.append(ResultPayload(about=publish_urn, types=[FOAF.Person, RHO.Owner])) search_command_node = 'xmpp:[email protected]/bot?command;node=search_command' rdf_payload = self.rdf_publisher.create_rdf(mtype=RDFStanzaType.SEARCH_RESPONSE, payload=response_payload, source_name='Search Command', source_command=search_command_node) response_message = Message() response_message.append(rdf_payload) response_message['thread'] = thread_id with mock.patch.object(promise, attribute='resolved') as mock_promise_resolve: self.rdf_publisher._receive_message(response_message) mock_promise_resolve.assert_not_called() with mock.patch.object(promise, attribute='resolved') as mock_promise_resolve: callback() self.assertEqual(1, mock_promise_resolve.call_count) args, kwargs = mock_promise_resolve.call_args result_payload = args[0] result = [rdf.about for rdf in result_payload.results] self.assertEqual(result, [publish_urn, ]) self.assertTrue(hasattr(result_payload, 'sources')) sources = list(result_payload.sources) self.assertEqual(1, len(sources)) self.assertEqual('Search Command', sources[0][0]) self.assertEqual('xmpp:[email protected]/bot?command;node=search_command', sources[0][1])
def test_retrieve_all(self): publish_urn = 'rho:instances.owner' payload = StoragePayload() payload.add_type(FOAF.Person, RHO.Owner) promise = self.rdf_publisher.send_out_request(payload, allow_multiple=True) args, kwargs = self.roster_plugin.send_message.call_args payload = kwargs['payload'] thread_id = kwargs['thread_id'] args, kwargs = self.scheduler_plugin.schedule_task.call_args callback = kwargs['callback'] response_payload = ResultCollectionPayload() response_payload.append(ResultPayload(about=publish_urn, types=[FOAF.Person, RHO.Owner])) self.rdf_publisher._send_message(RDFStanzaType.RESPONSE, response_payload, thread_id) response_args, response_kwargs = self.roster_plugin.send_message.call_args payload = response_kwargs['payload'] response_message = Message() response_message.append(payload) response_message['thread'] = response_kwargs['thread_id'] with mock.patch.object(promise, attribute='resolved') as mock_promise_resolve: self.rdf_publisher._receive_message(response_message) mock_promise_resolve.assert_not_called() with mock.patch.object(promise, attribute='resolved') as mock_promise_resolve: self.rdf_publisher._receive_message(response_message) mock_promise_resolve.assert_not_called() with mock.patch.object(promise, attribute='resolved') as mock_promise_resolve: callback() self.assertEqual(1, mock_promise_resolve.call_count) args, kwargs = mock_promise_resolve.call_args result = [rdf.about for rdf in args[0].results] self.assertEqual(result, [publish_urn, publish_urn]) # Should not have any sources defined. callback_results = args[0] self.assertFalse(hasattr(callback_results, 'sources'))
def test_multiple_responses(self): publish_urn = "rho:instances.owner" payload = StoragePayload() payload.add_type(FOAF.Person, RHO.Owner) promise = self.rdf_publisher.send_out_request(payload, allow_multiple=True) args, kwargs = self.roster_plugin.send_message.call_args payload = kwargs["payload"] thread_id = kwargs["thread_id"] args, kwargs = self.scheduler_plugin.schedule_task.call_args callback = kwargs["callback"] response_payload = ResultCollectionPayload() response_payload.append(ResultPayload(about=publish_urn, types=[FOAF.Person, RHO.Owner])) self.rdf_publisher._send_message(RDFStanzaType.RESPONSE, response_payload, thread_id) response_args, response_kwargs = self.roster_plugin.send_message.call_args payload = response_kwargs["payload"] response_message = Message() response_message.append(payload) response_message["thread"] = response_kwargs["thread_id"] with mock.patch.object(promise, attribute="resolved") as mock_promise_resolve: self.rdf_publisher._receive_message(response_message) mock_promise_resolve.assert_not_called() with mock.patch.object(promise, attribute="resolved") as mock_promise_resolve: self.rdf_publisher._receive_message(response_message) mock_promise_resolve.assert_not_called() with mock.patch.object(promise, attribute="resolved") as mock_promise_resolve: callback() self.assertEqual(1, mock_promise_resolve.call_count) args, kwargs = mock_promise_resolve.call_args result = [rdf.about for rdf in args[0].results] self.assertEqual(result, [publish_urn, publish_urn])
def test_empty_handle_request(self): payload = StoragePayload() payload.add_type(FOAF.Person, RHO.Owner) self.rdf_publisher.send_out_request(payload) # Verify the payload request. self.assertEqual(1, self.roster_plugin.send_message.call_count) args, kwargs = self.roster_plugin.send_message.call_args payload = kwargs['payload'] message = Message() message.append(payload) message['thread'] = kwargs['thread_id'] # Test empty request. self.rdf_publisher._receive_message(message)
def test_no_result(self): payload = StoragePayload() payload.add_type(FOAF.Person, RHO.Owner) self.rdf_publisher.send_out_request(payload) # Verify the payload request. self.assertEqual(1, self.roster_plugin.send_message.call_count) args, kwargs = self.roster_plugin.send_message.call_args payload = kwargs['payload'] message = Message() message.append(payload) message['thread'] = kwargs['thread_id'] handler_mock = mock.Mock(return_value=None) self.rdf_publisher.add_request_handler(handler_mock) self.rdf_publisher._receive_message(message)
def test_create_handler(self): publish_urn = 'rho:instances.owner' payload = StoragePayload() payload.add_type(FOAF.Person, RHO.Owner) payload.about = publish_urn self.rdf_publisher.publish_create(payload) args, kwargs = self.roster_plugin.send_message.call_args payload = kwargs['payload'] message = Message() message.append(payload) self.rdf_publisher._receive_message(message) create_handler = mock.MagicMock() self.rdf_publisher.add_create_handler(create_handler) self.rdf_publisher._receive_message(message) self.assertEqual(self.scheduler_plugin.defer.call_args[0][0], create_handler) self.assertEqual(str(self.scheduler_plugin.defer.call_args[0][1]), str(message['rdf']))