예제 #1
0
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))
예제 #2
0
# 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,
}
예제 #3
0
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))
예제 #4
0
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))
# 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,
}