class RouterAppTest(TestCase): """BlockingRouter app tests.""" def setUp(self): self.router = BlockingRouter(apps=[], backends={}) def test_valid_app_path(self): """Valid RapidSMS app modules should load properly.""" app = self.router.add_app("rapidsms.contrib.default") self.assertTrue(app is not None) self.assertEquals(1, len(self.router.apps)) def test_invalid_app_path(self): """Invalid RapidSMS app modules shouldn't raise any errors.""" app = self.router.add_app('django.conrib.admin') self.assertTrue(app is None) def test_get_app_by_path(self): """get_app() returns loaded app matching the passed module.""" app1 = self.router.add_app("rapidsms.contrib.default") app2 = self.router.get_app("rapidsms.contrib.default") self.assertEqual(app1, app2) def test_get_invalid_app_by_path(self): """get_app() returns None when loaded app is not found.""" app = self.router.get_app("not.a.valid.app") self.assertTrue(app is None) def test_add_app_with_class(self): """add_app() should also accept a class.""" self.router.add_app(AppBase) self.assertEquals(1, len(self.router.apps))
# the rest of settings.py? import stock.apps as _stock_apps import equipment.apps as _equipment_apps import info.apps as _info_apps import contextual.app as _contextual_apps RAPIDSMS_APP_BASES = ( _stock_apps.StockLevel, _stock_apps.StockOut, _equipment_apps.EquipmentFailure, _equipment_apps.EquipmentRepaired, _info_apps.Help, _equipment_apps.FridgeTemperature, ) # Configure the RapidSMS router based on RAPIDSMS_APP_BASES from rapidsms.router.blocking import BlockingRouter RAPIDSMS_ROUTER = BlockingRouter() for app in RAPIDSMS_APP_BASES: RAPIDSMS_ROUTER.add_app(app) # Assign operation codes to AppBase handlers. SIM_OPERATION_CODES = { "SL": _stock_apps.StockLevel, "SE": _stock_apps.StockOut, "NF": _equipment_apps.EquipmentFailure, "RE": _equipment_apps.EquipmentRepaired, "HE": _info_apps.Help, "FT": _equipment_apps.FridgeTemperature, "FC": _contextual_apps.FacilityCode, }
class BlockingRouterTest(harness.CreateDataMixin, TestCase): """Test router phases and message classes.""" def setUp(self): self.router = BlockingRouter(apps=[], backends={}) def test_router_incoming_phases(self): """Incoming messages should trigger proper router phases.""" self.router.add_app(harness.MockApp) self.router.receive_incoming(self.create_incoming_message()) self.assertEqual(set(self.router.apps[0].calls), set(self.router.incoming_phases)) def test_router_outgoing_phases(self): """Outgoing messages should trigger proper router phases.""" self.router.add_app(harness.MockApp) self.router.add_backend("mockbackend", harness.MockBackend) backend = self.create_backend(data={'name': 'mockbackend'}) connection = self.create_connection(data={'backend': backend}) msg = self.create_outgoing_message(data={'connections': [connection]}) self.router.send_outgoing(msg) self.assertEqual(set(self.router.apps[0].calls), set(self.router.outgoing_phases)) def test_new_incoming_message(self): """BaseRouter should return a standard IncomingMessage by default.""" fields = {'foo': 'bar'} connection = self.create_connection() msg = self.router.new_incoming_message(text="foo", connections=[connection], fields=fields) self.assertTrue(isinstance(msg, IncomingMessage)) self.assertEqual("foo", msg.text) self.assertEqual(connection, msg.connections[0]) self.assertEqual(fields['foo'], msg.fields['foo']) def test_new_incoming_message_class(self): """Make sure you can customize the incoming message class.""" class TestIncomingMessage(IncomingMessage): pass connection = self.create_connection() msg = self.router.new_incoming_message(text="foo", connections=[connection], class_=TestIncomingMessage) self.assertTrue(isinstance(msg, TestIncomingMessage)) def test_new_outgoing_message(self): """BaseRouter should return a standard OutgoingMessage by default.""" fields = {'foo': 'bar'} connection = self.create_connection() incoming_message = self.create_incoming_message() msg = self.router.new_outgoing_message(text="foo", connections=[connection], fields=fields, in_response_to=incoming_message) self.assertTrue(isinstance(msg, OutgoingMessage)) self.assertEqual("foo", msg.text) self.assertEqual(connection, msg.connections[0]) self.assertEqual(fields['foo'], msg.fields['foo']) self.assertEqual(incoming_message, msg.in_response_to) def test_new_outgoing_message_class(self): """Make sure you can customize the outgoing message class.""" class TestOutgoingMessage(OutgoingMessage): pass connection = self.create_connection() msg = self.router.new_outgoing_message(text="foo", connections=[connection], class_=TestOutgoingMessage) self.assertTrue(isinstance(msg, TestOutgoingMessage))