예제 #1
0
    def test_validate_rut(self):

        dsl = BotlangSystem.bot_instance()

        self.assertTrue(
            dsl.eval('(require "bot-helpers") (validate-rut "16926695-6")')
        )
        self.assertTrue(
            dsl.eval('(require "bot-helpers") (validate-rut "16.926.695-6 ")')
        )
        self.assertTrue(
            dsl.eval('(require "bot-helpers") (validate-rut " 30.686.957-4")')
        )
        self.assertTrue(
            dsl.eval('(require "bot-helpers") (validate-rut "7015383-1")')
        )
        self.assertFalse(
            dsl.eval('(require "bot-helpers") (validate-rut "16926695-5")')
        )
        self.assertFalse(
            dsl.eval('(require "bot-helpers") (validate-rut "16.926.696-6")')
        )
        self.assertFalse(
            dsl.eval('(require "bot-helpers") (validate-rut "30.685.957-4")')
        )
        self.assertFalse(
            dsl.eval('(require "bot-helpers") (validate-rut "7015383-0")')
        )
        self.assertFalse(
            dsl.eval('(require "bot-helpers") (validate-rut "70153830")')
        )
예제 #2
0
    def test_format_link(self):
        code = """
        (require "bot-helpers")

        (bot-node (data)
            (node-result
                data
                (format-link-with-image
                    data
                    "Título"
                    "http://test.botlang.cl"
                    "http://test.botlang.cl/image.png"
                )
                end-node
            )
        )
        """
        plain = BotlangSystem.bot_instance().eval_bot(code, input_msg='hi')
        self.assertTrue('Título:' in plain.message)
        self.assertTrue('http://test.botlang.cl' in plain.message)
        self.assertFalse('http://test.botlang.cl/image.png' in plain.message)

        fb = BotlangSystem.bot_instance().eval_bot(
            code,
            input_msg='hi',
            data={'social_network': 'facebook'}
        )
        self.assertDictEqual(
            fb.message,
            {
                'attachment': {
                    'type': 'template',
                    'payload': {
                        'template_type': 'generic',
                        'elements': [
                            {
                                'title': 'Título',
                                'item_url': 'http://test.botlang.cl',
                                'image_url': 'http://test.botlang.cl/image.png'
                            }
                        ]
                    }
                }
            }
        )
예제 #3
0
    def test_separate_list(self):

        code = """
        (require "facebook-formatter")

        (separate-list
            (list 1 2 3 4 5 6 7 8)
            3
        )
        """
        result = BotlangSystem.bot_instance().eval(code)
        self.assertEqual([[1, 2, 3], [4, 5, 6], [7, 8]], result)
예제 #4
0
    def test_format_link(self):
        code = """
        (require "bot-helpers")

        (bot-node (data)
            (node-result
                data
                (format-link-with-image
                    data
                    "Título"
                    "http://test.botlang.cl"
                    "http://test.botlang.cl/image.png"
                )
                end-node
            )
        )
        """
        plain = BotlangSystem.bot_instance().eval_bot(code, input_msg='hi')
        self.assertTrue('Título:' in plain.message)
        self.assertTrue('http://test.botlang.cl' in plain.message)
        self.assertFalse('http://test.botlang.cl/image.png' in plain.message)

        fb = BotlangSystem.bot_instance().eval_bot(
            code, input_msg='hi', data={'social_network': 'facebook'})
        self.assertDictEqual(
            fb.message, {
                'attachment': {
                    'type': 'template',
                    'payload': {
                        'template_type':
                        'generic',
                        'elements':
                        [{
                            'title': 'Título',
                            'item_url': 'http://test.botlang.cl',
                            'image_url': 'http://test.botlang.cl/image.png'
                        }]
                    }
                }
            })
예제 #5
0
    def test_format_simple_list(self):

        code = """
        (require "bot-helpers")
        (format-simple-list
            (make-dict (list))
            "Hola"
            (list
                (cons "Juanito" "Lechuga")
                (cons "Edulio" "Caluga")
            )
        )
        """
        result = BotlangSystem.bot_instance().eval_bot(code, input_msg='')
        self.assertEqual(result, 'Hola\n\nJuanito. Lechuga\n\nEdulio. Caluga')
예제 #6
0
    def test_format_simple_list(self):

        code = """
        (require "bot-helpers")
        (format-simple-list
            (make-dict (list))
            "Hola"
            (list
                (cons "Juanito" "Lechuga")
                (cons "Edulio" "Caluga")
            )
        )
        """
        result = BotlangSystem.bot_instance().eval_bot(code, input_msg='')
        self.assertEqual(
            result,
            'Hola\n\nJuanito. Lechuga\n\nEdulio. Caluga'
        )
예제 #7
0
    def test_validate_rut(self):

        dsl = BotlangSystem.bot_instance()

        self.assertTrue(
            dsl.eval('(require "bot-helpers") (validate-rut "16926695-6")'))
        self.assertTrue(
            dsl.eval('(require "bot-helpers") (validate-rut "16.926.695-6 ")'))
        self.assertTrue(
            dsl.eval('(require "bot-helpers") (validate-rut " 30.686.957-4")'))
        self.assertTrue(
            dsl.eval('(require "bot-helpers") (validate-rut "7015383-1")'))
        self.assertFalse(
            dsl.eval('(require "bot-helpers") (validate-rut "16926695-5")'))
        self.assertFalse(
            dsl.eval('(require "bot-helpers") (validate-rut "16.926.696-6")'))
        self.assertFalse(
            dsl.eval('(require "bot-helpers") (validate-rut "30.685.957-4")'))
        self.assertFalse(
            dsl.eval('(require "bot-helpers") (validate-rut "7015383-0")'))
        self.assertFalse(
            dsl.eval('(require "bot-helpers") (validate-rut "70153830")'))
    def test_cache(self):

        cache = DummyStore()
        runtime = BotlangSystem.bot_instance().setup_cache_extension(cache)
        results = runtime.eval("""
        (cache-put "test1" 444)
        (cache-put "test2" "miau")
        [define got1 (cache-get-or-else "test3" (function () ":3"))]
        [define got2 (cache-get-or-else "test3" (function () "3:"))]
        (cache-remove "test2")
        (make-dict
            (list
                (list "test1" (cache-get "test1"))
                (list "test2" (cache-get "test2"))
                (list "got1" got1)
                (list "got2" got2)
            )
        )
        """)
        self.assertEqual(results['test1'], 444)
        self.assertEqual(results['test2'], None)
        self.assertEqual(results['got1'], ':3')
        self.assertEqual(results['got2'], ':3')
    def test_global_storage(self):

        db = DummyStore()
        runtime = BotlangSystem.bot_instance().setup_global_storage(db)
        results = runtime.eval("""
        (globaldb-put "test1" 444)
        (globaldb-put "test2" "miau")
        [define got1 (globaldb-get-or-else "test3" (function () ":3"))]
        [define got2 (globaldb-get-or-else "test3" (function () "3:"))]
        (globaldb-remove "test2")
        (make-dict
            (list
                (list "test1" (globaldb-get "test1"))
                (list "test2" (globaldb-get "test2"))
                (list "got1" got1)
                (list "got2" got2)
            )
        )
        """)
        self.assertEqual(results['test1'], 444)
        self.assertEqual(results['test2'], None)
        self.assertEqual(results['got1'], ':3')
        self.assertEqual(results['got2'], ':3')
    def test_format_list(self):

        code = """
        (require "plain-formatter")
        (format-plain-simple-list
            "VITAL APOQUINDO ESQ. / VIA LACTEA"
            (list
                (cons "501: Menos de 5 min" "A 197 metros. Patente BJFD-87")
                (cons "C03: Menos de 5 min" "A 401 metros. Patente CJRT-77")
                (cons "518: Menos de 5 min" "A 406 metros. Patente BJFR-37")
                (cons "427: Menos de 5 min" "A 982 metros. Patente CJRS-49")
            )
        )
        """
        result = BotlangSystem.bot_instance().eval_bot(code, '')
        self.assertEqual(
            result,
            'VITAL APOQUINDO ESQ. / VIA LACTEA'
            '\n\n501: Menos de 5 min. A 197 metros. Patente BJFD-87\n\nC03: '
            'Menos de 5 min. A 401 metros. Patente CJRT-77\n\n518: Menos de 5 '
            'min. A 406 metros. Patente BJFR-37\n\n427: Menos de 5 min. A 982 '
            'metros. Patente CJRS-49'
        )
예제 #11
0
    def test_cache(self):

        cache = DummyStore()
        runtime = BotlangSystem.bot_instance().setup_cache_extension(cache)
        results = runtime.eval("""
        (cache-put "test1" 444)
        (cache-put "test2" "miau")
        [define got1 (cache-get-or-else "test3" (function () ":3"))]
        [define got2 (cache-get-or-else "test3" (function () "3:"))]
        (cache-remove "test2")
        (make-dict
            (list
                (list "test1" (cache-get "test1"))
                (list "test2" (cache-get "test2"))
                (list "got1" got1)
                (list "got2" got2)
            )
        )
        """)
        self.assertEqual(results['test1'], 444)
        self.assertEqual(results['test2'], None)
        self.assertEqual(results['got1'], ':3')
        self.assertEqual(results['got2'], ':3')
예제 #12
0
    def test_global_storage(self):

        db = DummyStore()
        runtime = BotlangSystem.bot_instance().setup_global_storage(db)
        results = runtime.eval("""
        (globaldb-put "test1" 444)
        (globaldb-put "test2" "miau")
        [define got1 (globaldb-get-or-else "test3" (function () ":3"))]
        [define got2 (globaldb-get-or-else "test3" (function () "3:"))]
        (globaldb-remove "test2")
        (make-dict
            (list
                (list "test1" (globaldb-get "test1"))
                (list "test2" (globaldb-get "test2"))
                (list "got1" got1)
                (list "got2" got2)
            )
        )
        """)
        self.assertEqual(results['test1'], 444)
        self.assertEqual(results['test2'], None)
        self.assertEqual(results['got1'], ':3')
        self.assertEqual(results['got2'], ':3')
예제 #13
0
    def test_format_options(self):

        code = """
        (require "facebook-formatter")

        (bot-node (data)
            (node-result
                data
                (format-facebook-options
                    "Opciones"
                    (list
                        (cons 1 "option 1")
                        (cons 2 "option 2")
                        (cons 3 "option 3")
                        (cons 4 "option 4")
                        (cons 5 "option 5")
                    )
                )
                end-node
            )
        )
        """
        fb = BotlangSystem.bot_instance().eval_bot(
            code,
            input_msg='hi',
            data={'social_network': 'facebook'}
        )
        self.assertEqual(len(fb.message), 2)
        self.assertDictEqual(
            fb.message[0],
            {
                'attachment': {
                    'type': 'template',
                    'payload': {
                        'template_type': 'button',
                        'text': 'Opciones',
                        'buttons': [
                            {
                                'type': 'postback',
                                'title': 'option 1',
                                'payload': 1
                            },
                            {
                                'type': 'postback',
                                'title': 'option 2',
                                'payload': 2
                            },
                            {
                                'type': 'postback',
                                'title': 'option 3',
                                'payload': 3
                            }
                        ]
                    }
                }
            }
        )
        self.assertDictEqual(
            fb.message[1],
            {
                'attachment': {
                    'type': 'template',
                    'payload': {
                        'template_type': 'button',
                        'text': u'\u2063',
                        'buttons': [
                            {
                                'type': 'postback',
                                'title': 'option 4',
                                'payload': 4
                            },
                            {
                                'type': 'postback',
                                'title': 'option 5',
                                'payload': 5
                            }
                        ]
                    }
                }
            }
        )
예제 #14
0
    def test_format_list(self):

        code = """
        (require "facebook-formatter")
        (format-facebook-simple-list
            "VITAL APOQUINDO ESQ. / VIA LACTEA"
            (list
                (cons "501: Menos de 5 min" "A 197 metros. Patente BJFD-87")
                (cons "C03: Menos de 5 min" "A 401 metros. Patente CJRT-77")
                (cons "518: Menos de 5 min" "A 406 metros. Patente BJFR-37")
                (cons "427: Menos de 5 min" "A 982 metros. Patente CJRS-49")
                (cons "427: Menos de 5 min" "A 982 metros. Patente CJRS-49")
            )
        )
        """
        result = BotlangSystem.bot_instance().eval_bot(code, '')
        self.assertEqual(len(result), 3)
        self.assertEqual(result[0], 'VITAL APOQUINDO ESQ. / VIA LACTEA')
        self.assertDictEqual(
            result[1],
            {
                'attachment': {
                    'type': 'template',
                    'payload': {
                        'template_type': 'list',
                        'top_element_style': 'compact',
                        'elements': [
                            {
                                'title': '501: Menos de 5 min',
                                'subtitle': 'A 197 metros. Patente BJFD-87'
                            },
                            {
                                'title': 'C03: Menos de 5 min',
                                'subtitle': 'A 401 metros. Patente CJRT-77'
                            },
                            {
                                'title': '518: Menos de 5 min',
                                'subtitle': 'A 406 metros. Patente BJFR-37'
                            }
                        ]
                    }
                }
            }
        )
        self.assertDictEqual(
            result[2],
            {
                'attachment': {
                    'type': 'template',
                    'payload': {
                        'template_type': 'list',
                        'top_element_style': 'compact',
                        'elements': [
                            {
                                'title': '427: Menos de 5 min',
                                'subtitle': 'A 982 metros. Patente CJRS-49'
                            },
                            {
                                'title': '427: Menos de 5 min',
                                'subtitle': 'A 982 metros. Patente CJRS-49'
                            }
                        ]
                    }
                }
            }
        )