From 192027093c47b3efe734f515c5c93ea207c0c47a Mon Sep 17 00:00:00 2001 From: Craig Sparks Date: Tue, 23 Oct 2018 10:07:41 +0200 Subject: [PATCH 1/3] fixed typo - had a tab character --- 001-simple-tr/reahl/simple-tr/simple_tr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/001-simple-tr/reahl/simple-tr/simple_tr.py b/001-simple-tr/reahl/simple-tr/simple_tr.py index 324eb2e..b8da4f2 100644 --- a/001-simple-tr/reahl/simple-tr/simple_tr.py +++ b/001-simple-tr/reahl/simple-tr/simple_tr.py @@ -30,7 +30,7 @@ def fields(self, fields): fields.separator = Field(label='Separated by (Regular Expression)', required=True) fields.joiner = Field(label='Join with (Character String)', required=True) -  @property + @property def has_data(self): return self.input_text and self.separator and self.joiner From d745df9d6ed8668c818862e4e94c0077113d61c0 Mon Sep 17 00:00:00 2001 From: Craig Sparks Date: Tue, 23 Oct 2018 10:18:00 +0200 Subject: [PATCH 2/3] added ability to clear inputs by visiting /clear URL. renamed TR input form --- 001-simple-tr/reahl/simple-tr/simple_tr.py | 31 ++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/001-simple-tr/reahl/simple-tr/simple_tr.py b/001-simple-tr/reahl/simple-tr/simple_tr.py index b8da4f2..f30d6d9 100644 --- a/001-simple-tr/reahl/simple-tr/simple_tr.py +++ b/001-simple-tr/reahl/simple-tr/simple_tr.py @@ -34,15 +34,21 @@ def fields(self, fields): def has_data(self): return self.input_text and self.separator and self.joiner - @exposed('save') + @exposed('save', 'clear_inputs') def events(self, events): events.save = Event(label='Perform Tr') + events.clear_inputs = Event(label='Clear Inputs', action=Action(self.clear_inputs)) @property def translated_string(self): import re return re.sub(self.separator, self.joiner, self.input_text) + def clear_inputs(self): + self.input_text = '' + self.separator = '' + self.joiner = '' + class MyPage(HTML5Page): def __init__(self, view): @@ -61,7 +67,7 @@ def __init__(self, view): class InputForm(Form): def __init__(self, view, tr): - super(__class__, self).__init__(view, 'address_form') + super(__class__, self).__init__(view, 'tr_input_form') inputs = self.add_child(FieldSet(view, legend_text='Enter data then click button')) inputs.use_layout(FormLayout()) @@ -86,8 +92,29 @@ def __init__(self, view): self.add_child(P(view, text=tr.translated_string)) +class ClearInputsPage(HTML5Page): + def __init__(self, view): + super(ClearInputsPage, self).__init__(view) + self.body.add_child(ClearInputsForm(view)) + + +class ClearInputsForm(Form): + def __init__(self, view): + super(ClearInputsForm, self).__init__(view, 'clear_inputs_form') + + inputs = self.add_child(FieldSet(view, legend_text='Clear all inputs')) + inputs.use_layout(FormLayout()) + + tr = TR.for_current_session() + button = inputs.add_child(Button(self, tr.events.clear_inputs)) + button.use_layout(ButtonLayout(style='primary')) + + class MyUI(UserInterface): def assemble(self): + clear_inputs_view = self.define_view('/clear', title='Clear Inputs', page=ClearInputsPage.factory()) home = self.define_view('/', title='x marksthe spot', page=MyPage.factory()) self.define_transition(TR.events.save, home, home) + self.define_transition(TR.events.clear_inputs, clear_inputs_view, home) + From d413d53cdd5d73f8e258e4c13a9b42a87698539b Mon Sep 17 00:00:00 2001 From: Craig Sparks Date: Tue, 23 Oct 2018 16:09:01 +0200 Subject: [PATCH 3/3] add some tests --- 001-simple-tr/reahl/simple-tr/.reahlalias | 4 +- 001-simple-tr/reahl/simple-tr/.reahlproject | 13 +++++++ .../addressbook2_dev/test_addressbook2.py | 26 ------------- .../__init__.py | 0 .../simple-tr/simple_tr_dev/test_simple_tr.py | 38 +++++++++++++++++++ 5 files changed, 52 insertions(+), 29 deletions(-) delete mode 100644 001-simple-tr/reahl/simple-tr/addressbook2_dev/test_addressbook2.py rename 001-simple-tr/reahl/simple-tr/{addressbook2_dev => simple_tr_dev}/__init__.py (100%) create mode 100644 001-simple-tr/reahl/simple-tr/simple_tr_dev/test_simple_tr.py diff --git a/001-simple-tr/reahl/simple-tr/.reahlalias b/001-simple-tr/reahl/simple-tr/.reahlalias index 55a7899..4eaf44d 100644 --- a/001-simple-tr/reahl/simple-tr/.reahlalias +++ b/001-simple-tr/reahl/simple-tr/.reahlalias @@ -1,3 +1 @@ - unit setup -- check - unit setup -- -q pytest --addopts '-s --pyargs addressbook2_dev' - demosetup setup -- -q pytest --addopts '-s -o python_functions=demo_setup --pyargs addressbook2_dev' + unit setup -- -q pytest --addopts '-s --pyargs simple_tr_dev' diff --git a/001-simple-tr/reahl/simple-tr/.reahlproject b/001-simple-tr/reahl/simple-tr/.reahlproject index d41d524..fe6c07e 100644 --- a/001-simple-tr/reahl/simple-tr/.reahlproject +++ b/001-simple-tr/reahl/simple-tr/.reahlproject @@ -8,4 +8,17 @@ + + + + + + + + + + + + + diff --git a/001-simple-tr/reahl/simple-tr/addressbook2_dev/test_addressbook2.py b/001-simple-tr/reahl/simple-tr/addressbook2_dev/test_addressbook2.py deleted file mode 100644 index eec780b..0000000 --- a/001-simple-tr/reahl/simple-tr/addressbook2_dev/test_addressbook2.py +++ /dev/null @@ -1,26 +0,0 @@ -# To run this test do: -# pytest --pyargs addressbook2_dev.test_addressbook2 -# or -# reahl unit -# -# To set up a demo database for playing with, do: -# pytest -o python_functions=demo_setup --pyargs addressbook2_dev.test_addressbook2 -# or -# reahl demosetup - -from __future__ import print_function, unicode_literals, absolute_import, division - -from reahl.tofu.pytestsupport import with_fixtures - -from addressbook2 import Address - -from reahl.sqlalchemysupport_dev.fixtures import SqlAlchemyFixture - - -@with_fixtures(SqlAlchemyFixture) -def demo_setup(sql_alchemy_fixture): - sql_alchemy_fixture.commit = True - Address(email_address='friend1@some.org', name='Friend1').save() - Address(email_address='friend2@some.org', name='Friend2').save() - Address(email_address='friend3@some.org', name='Friend3').save() - Address(email_address='friend4@some.org', name='Friend4').save() diff --git a/001-simple-tr/reahl/simple-tr/addressbook2_dev/__init__.py b/001-simple-tr/reahl/simple-tr/simple_tr_dev/__init__.py similarity index 100% rename from 001-simple-tr/reahl/simple-tr/addressbook2_dev/__init__.py rename to 001-simple-tr/reahl/simple-tr/simple_tr_dev/__init__.py diff --git a/001-simple-tr/reahl/simple-tr/simple_tr_dev/test_simple_tr.py b/001-simple-tr/reahl/simple-tr/simple_tr_dev/test_simple_tr.py new file mode 100644 index 0000000..d6c0d73 --- /dev/null +++ b/001-simple-tr/reahl/simple-tr/simple_tr_dev/test_simple_tr.py @@ -0,0 +1,38 @@ +# To run this test do: +# pytest --pyargs addressbook2_dev.test_addressbook2 +# or +# reahl unit +# +# To set up a demo database for playing with, do: +# pytest -o python_functions=demo_setup --pyargs addressbook2_dev.test_addressbook2 +# or +# reahl demosetup + +from __future__ import print_function, unicode_literals, absolute_import, division + +from reahl.tofu.pytestsupport import with_fixtures +from reahl.webdev.tools import XPath +from reahl.web_dev.fixtures import WebFixture + +from simple_tr import MyUI + + +@with_fixtures(WebFixture) +def test_can_translate_delimiter(web_fixture): + """A user can log in by going to the Log in page. + The name of the currently logged in user is displayed on the home page.""" + + wsgi_app = web_fixture.new_wsgi_app(site_root=MyUI, enable_js=True) + web_fixture.reahl_server.set_app(wsgi_app) + browser = web_fixture.driver_browser + + #import pdb;pdb.set_trace() + + browser.open('/') + + assert not web_fixture.driver_browser.is_element_present(XPath.paragraph_containing('my=dash=delimited=sentence')) + browser.type(XPath.input_labelled('Input Text'), 'my-dash-delimited-sentence') + browser.type(XPath.input_labelled('Separated by (Regular Expression)'), '-') + browser.type(XPath.input_labelled('Join with (Character String)'), '=') + browser.click(XPath.button_labelled('Perform Tr')) + assert web_fixture.driver_browser.wait_for_element_present(XPath.paragraph_containing('my=dash=delimited=sentence'))