def test_specific_characters_are_replaced(self):
        char_mapping = {'ç': 'c', 'à': 'a', "ê": "e"}

        self.assertEqual('ca', replace_characters('çà', char_mapping))
        self.assertEqual('caaa45', replace_characters('çaaà45', char_mapping))
        self.assertEqual('haha', replace_characters('haha', char_mapping))
        self.assertEqual('caca', replace_characters('çàçà', char_mapping))
        self.assertEqual('ca có', replace_characters('çà çó', char_mapping))
        self.assertEqual('ca có e', replace_characters("çà çó ê", char_mapping))
        self.assertEqual('ca \n có', replace_characters('çà \n çó', char_mapping))
    def build_send_url(self, router_url, backend, recipients_list, text, priority=1, **kwargs):
        """
        Constructs an appropriate send url for the given message.
        """
        # first build up our list of parameters
        recipients = ' '.join(recipients_list)
        special_chars_mapping = getattr(settings, "SPECIAL_CHARS_MAPPING", {})
        text = replace_characters(text, special_chars_mapping)

        installed_backends = getattr(settings, "BACKENDS_CONFIGURATION", {})

        if backend in installed_backends:
            return self.build_send_url_from_backend(backend, installed_backends[backend], text, recipients_list)
        else:
            params = {
                'backend': backend,
                'recipient': recipients,
                'text': text,
                'priority': priority,
                }

            # make sure our parameters are URL encoded
            params.update(kwargs)
            for k, v in params.items():
                params[k] = quote_plus(stringify(v))

            # is this actually a dict?  if so, we want to look up the appropriate backend
            if type(router_url) is dict:
                router_dict = router_url
                backend_name = backend

                # is there an entry for this backend?
                if backend_name in router_dict:
                    router_url = router_dict[backend_name]

                # if not, look for a default backend
                elif 'default' in router_dict:
                    router_url = router_dict['default']

                # none?  blow the hell up
                else:
                    self.error(
                        "No router url mapping found for backend '%s', check your settings.ROUTER_URL setting" % backend_name)
                    raise Exception(
                        "No router url mapping found for backend '%s', check your settings.ROUTER_URL setting" % backend_name)

        # return our built up url with all our variables substituted in
        full_url = router_url % params
        self.info("Full URL - %s" % full_url)

        return full_url
    def test_comparing_unicode(self):
        char_mapping = {'ç': 'c', 'à': 'a'}
        text = u'hahaha'

        self.assertEqual(text, replace_characters(text, char_mapping))
    def test_nothing_happens_when_char_mapping_empty(self):
        char_mapping = {}

        text = 'çà çó'
        self.assertEqual(text, replace_characters(text, char_mapping))