class TestCase(unittest.TestCase): def setUp(self): XMLConfig("meta.zcml", zope.component)() XMLConfig("meta.zcml", zope.browserpage)() XMLConfig("configure.zcml", zope.annotation)() XMLConfig("configure.zcml", rapido.core)() XMLConfig("configure.zcml", rapido.souper)() XMLConfig("configure.zcml", rapido.core.tests)() root = SiteNode() root['myapp'] = SimpleRapidoApplication("testapp", root) self.app_obj = root['myapp'] self.app_obj.settings = """debug: true acl: rights: author: [isaac.newton] editor: [marie.curie] reader: [] roles: {"boss": ["marie.curie"], "biology": ["FamousDiscoverers"]}""" self.app = IRapidoApplication(self.app_obj) self.app.initialize() def test_no_code(self): block = self.app.get_block('frmBook3') self.assertEquals(block.code, '# no code') def test_display(self): block = self.app.get_block('frmBook') self.assertEquals( block.display(None, edit=True), u'<form\n name="frmBook"\n class="rapido-block ' 'rapido-target-ajax"\n action="http://here/blocks/frmBook"\n' ' rapido-settings=\'{"app": {"url": "http://here", ' '"debug": true}, "target": "ajax", "id": "frmBook"}\'\n' ' method="POST">Author: <input type="text"\n' ' name="author" value="Victor Hugo" />\n<footer>' 'Powered by Rapido</footer></form>\n' ) def test_display_element_items(self): block = self.app.get_block('frmBook6') self.assertEquals( block.display(None, edit=True), u'<form\n' ' name="frmBook6"\n' ' class="rapido-block"\n' ' action="http://here/blocks/frmBook6"\n' ' rapido-settings=\'' '{"app": {"url": "http://here", "debug": true}}\'\n' ' method="POST"><h1>The Force awakens</h1>\n' '<p>No spoil</p></form>\n' ) def test_display_record(self): block = self.app.get_block('frmBook') record = self.app.create_record(id='record_1') record['author'] = "Joseph Conrad" self.assertEquals( block.display(record), u'<form\n name="frmBook"\n class="rapido-block ' 'rapido-target-ajax"\n action="http://here/record/record_1"\n' ' rapido-settings=\'{"app": {"url": "http://here", ' '"debug": true}, "target": "ajax", "id": "frmBook"}\'\n' ' method="POST">Author: Joseph Conrad\n<footer>' 'Powered by Rapido</footer></form>\n' ) self.assertTrue( u"""<input type="text" name="author" value="Joseph Conrad" />""" in block.display( record, edit=True)) def test_on_save(self): block = self.app.get_block('frmBook') record = self.app.create_record(id='record_1') record['author'] = "Joseph Conrad" record.save(block=block) self.assertEquals( record['author'], 'JOSEPH CONRAD' ) def test_on_delete(self): record_1 = self.app.create_record(id='record_1') record_2 = self.app.create_record(id='record_2') record_2.set_block('frmBook2') self.app.delete_record(record=record_2) self.assertEquals( record_1['message'], 'Good bye' ) def test_compute_id(self): block = self.app.get_block('frmBook2') record2 = self.app.create_record() record2.save({'author': "John DosPassos"}, block=block, creation=True) self.assertEquals(record2.id, 'my-id') record3 = self.app.create_record() record3.save( {'author': "John DosPassos"}, block_id="frmBook2", creation=True) self.assertTrue(record3.id.startswith('my-id-')) def test_python_compilation_errors(self): block = self.app.get_block('frmBook4') block.display(None, edit=True) self.assertEquals( self.app.messages[0], "Rapido compilation error - testapp\nin frmBook4.py, at line 3:" "\n returm 'hello'\n-----------------^\ninvalid syntax" ) self.app_obj.set_fake_block_data('frmBook4', 'py', """ def author(context): return context.not_a_method()""") del self.app._blocks['frmBook4'] block = self.app.get_block('frmBook4') block.display(None, edit=True) self.assertEquals( self.app.messages[1], 'Rapido execution error - testapp\n File "frmBook4.py", line 3, ' 'in author\nAttributeError: \'Context\' object has no attribute \'' 'not_a_method\'' ) def test_undefined_element(self): self.app_obj.set_fake_block_data('frmBook2', 'html', """Author: {author} {summary}<footer>Powered by Rapido</footer>""") if 'frmBook2' in self.app._blocks: del self.app._blocks['frmBook2'] block = self.app.get_block('frmBook2') self.assertTrue(u'UNDEFINED ELEMENT' in block.display(None, edit=True)) def test_undefined_element_type(self): block = self.app.get_block('frmBook5') self.assertTrue(u'UNKNOWN ELEMENT TYPE' in block.display( None, edit=True)) def test_render_action(self): self.app_obj.set_fake_block_data('frmBook2', 'html', """Author: {author} {do_something} {_save}<footer>Powered by Rapido</footer>""") if 'frmBook2' in self.app._blocks: del self.app._blocks['frmBook2'] block = self.app.get_block('frmBook2') html = block.display(None, edit=True) self.assertTrue('<input type="submit"\n' ' name="action.do_something" value="Do" />' in html) def test_render_special_action(self): block = self.app.get_block('frmBook5') html = block.display(None, edit=True) self.assertTrue('<input type="submit"\n' ' name="_save" value="Save" />' in html) def test_python_not_mandatory(self): block = self.app.get_block('frmBook3') self.assertTrue( u'Author: <input type="text"\n' ' name="author" value="" />' in block.display( None, edit=True) ) def test_callable_layout(self): block = self.app.get_block('frmBook8') self.assertTrue( u'France is bacon' in block.display(None, edit=True) ) def test_safe_modules(self): import datetime # add a new safe module import re from rapido.core import app app.safe_modules.re = re block = self.app.get_block('frmBook9') today = datetime.date.today().strftime("%Y-%m-%d") self.assertTrue( u'Random: 0.' in block.display(None, edit=True) ) self.assertTrue( u'Date: %s' % today in block.display(None, edit=True) ) def test_on_display(self): block = self.app.get_block('block10') self.assertIn( "You know nothing, John Snow", block.display(None) )
class TestCase(unittest.TestCase): def setUp(self): XMLConfig("meta.zcml", zope.component)() XMLConfig("meta.zcml", zope.browserpage)() XMLConfig("configure.zcml", zope.annotation)() XMLConfig("configure.zcml", rapido.core)() XMLConfig("configure.zcml", rapido.souper)() XMLConfig("configure.zcml", rapido.core.tests)() root = SiteNode() root['myapp'] = SimpleRapidoApplication("testapp", root) self.app_obj = root['myapp'] self.app_obj.settings = """debug: true acl: rights: author: [isaac.newton] editor: [marie.curie] reader: [] roles: {"boss": ["marie.curie"], "biology": ["FamousDiscoverers"]}""" self.app = IRapidoApplication(self.app_obj) self.app.initialize() def test_create_record(self): record = self.app.create_record(id='record_1') self.assertEquals(record.id, 'record_1') def test_record_items(self): record = self.app.create_record(id='record_1') record['author'] = "Joseph Conrad" record['book_tile'] = "Lord Jim" self.assertEquals(record['author'], 'Joseph Conrad') record['not_important'] = 2 self.assertTrue('not_important' in record) del record['not_important'] self.assertEquals( [key for key in record], ['book_tile', 'id', 'author'] ) def test_find_by_uid(self): record = self.app.create_record(id='record_1') uid = record.uid self.assertEquals( self.app.get_record(uid).uid, self.app.get_record('record_1').uid ) def test_unique_id(self): self.app.create_record(id='record_1') record_bis = self.app.create_record(id='record_1') self.assertTrue(record_bis.id != 'record_1') self.assertTrue(record_bis.id.startswith('record_1-')) def test_search(self): record = self.app.create_record(id='record_1') # by calling the block we make sure indexes are built self.app.get_block('frmBook') record['author'] = "Joseph Conrad" record.reindex() self.assertEquals( [rec['author'] for rec in self.app.search('id=="record_1"')], ['Joseph Conrad'] ) self.assertEquals( [rec['author'] for rec in self.app.search('author=="Joseph Conrad"')], ['Joseph Conrad'] ) self.assertEquals( [rec['author'] for rec in self.app.search('"joseph" in author')], ['Joseph Conrad'] ) def test_delete(self): record = self.app.create_record() the_id = record.id self.app.delete_record(record=record) self.assertTrue(self.app.get_record(the_id) is None) record2 = self.app.create_record() the_id = record2.id self.app.delete_record(id=the_id) self.assertTrue(self.app.get_record(the_id) is None) def test_save_from_dict(self): record = self.app.create_record() record.save({'author': "John DosPassos"}) self.assertEquals(record['author'], "John DosPassos") def test_save_from_request(self): record = self.app.create_record() request = TestRequest() self.assertRaises( Exception, record.save, request ) request = TestRequest(form=dict( block='frmBook', author='J. DosPassos', year='2015', publication='2015-11-15', weight='1.3', )) record.save(request) self.assertEquals(record['author'], "J. DOSPASSOS") self.assertEquals(record['year'], 2015) self.assertEquals(record['weight'], 1.3) self.assertEquals( record['publication'], datetime.strptime('2015-11-15', "%Y-%m-%d") ) def test_compute_element_on_save(self): record = self.app.create_record() record.save(block_id="frmBook") self.assertEquals( record['famous_quote'], 'A good plan violently executed now is better than a perfect plan ' 'executed next week.' ) def test_render_number_elements(self): self.app_obj.set_fake_block_data('frmBook', 'html', """Author: {author} {year} {weight}<footer>Powered by Rapido</footer>""") if 'frmBook' in self.app._blocks: del self.app._blocks['frmBook'] block = self.app.get_block('frmBook') record = self.app.create_record() record.save({ 'year': 1845, 'weight': 3.2, }) html = block.display(record, edit=True) self.assertTrue('<input type="number"\n' ' name="year" value="1845" />' in html) self.assertTrue('<input type="number"\n' ' name="weight" value="3.2" />' in html) def test_render_datetime_elements(self): self.app_obj.set_fake_block_data('frmBook', 'html', """Author: {author} {publication}<footer>Powered by Rapido</footer>""") if 'frmBook' in self.app._blocks: del self.app._blocks['frmBook'] block = self.app.get_block('frmBook') html = block.display(None, edit=True) self.assertTrue('<input type="date"\n' ' name="publication" value="" />' in html) record = self.app.create_record() record.save({ 'publication': datetime.strptime('2015-11-15', "%Y-%m-%d"), }) html = block.display(record, edit=True) self.assertTrue('<input type="date"\n' ' name="publication" value="2015-11-15" />' in html) def test_compute_element_using_record_data(self): block = self.app.get_block('frmBook7') record = self.app.create_record() record.save({ 'author': 'John DosPassos', }) html = block.display(record, edit=True) self.assertTrue('Bonjour John DosPassos' in html)