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_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' } ] } } } )
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)
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' }] } } })
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')
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' )
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' )
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 } ] } } } )
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' } ] } } } )