From 10d4c2b90bfa5549327771da88bff8ea454a6db2 Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Mon, 16 Jul 2018 15:49:27 -0400 Subject: [PATCH] Refactor to allow validating warnings on a form --- atst/forms/forms.py | 4 +-- atst/handlers/request_new.py | 39 ++++++++++++++++++++---------- tests/handlers/test_request_new.py | 2 +- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/atst/forms/forms.py b/atst/forms/forms.py index 064eed58..732bcc52 100644 --- a/atst/forms/forms.py +++ b/atst/forms/forms.py @@ -3,5 +3,5 @@ from wtforms_tornado import Form class ValidatedForm(Form): - def validate(self, requests_client=None): - return super(ValidatedForm, self).validate() + def validate_warnings(self, requests_client=None): + return True diff --git a/atst/handlers/request_new.py b/atst/handlers/request_new.py index 49641fc9..29b99a75 100644 --- a/atst/handlers/request_new.py +++ b/atst/handlers/request_new.py @@ -24,28 +24,38 @@ class RequestNew(BaseHandler): self.requests_client, screen, post_data=post_data, request_id=request_id ) + rerender_args = dict( + f=jedi_flow.form, + data=post_data, + page=self.page, + screens=jedi_flow.screens, + current=screen, + next_screen=jedi_flow.next_screen, + request_id=jedi_flow.request_id, + ) + if jedi_flow.validate(): response = yield jedi_flow.create_or_update_request(self.get_current_user()) if response.ok: - if jedi_flow.next_screen >= len(jedi_flow.screens): - where = "/requests" + if jedi_flow.validate_warnings(): + if jedi_flow.next_screen >= len(jedi_flow.screens): + where = "/requests" + else: + where = self.application.default_router.reverse_url( + "request_form_update", jedi_flow.next_screen, jedi_flow.request_id + ) + self.redirect(where) else: - where = self.application.default_router.reverse_url( - "request_form_update", jedi_flow.next_screen, jedi_flow.request_id + self.render( + "requests/screen-%d.html.to" % int(screen), + **rerender_args ) - self.redirect(where) else: self.set_status(response.code) else: self.render( "requests/screen-%d.html.to" % int(screen), - f=jedi_flow.form, - data=post_data, - page=self.page, - screens=jedi_flow.screens, - current=screen, - next_screen=jedi_flow.next_screen, - request_id=jedi_flow.request_id, + **rerender_args ) @tornado.web.authenticated @@ -108,7 +118,10 @@ class JEDIRequestFlow(object): return self.form_class()() def validate(self): - return self.form.validate(self.requests_client) + return self.form.validate() + + def validate_warnings(self): + return self.form.validate_warnings(self.requests_client) @property def current_screen(self): diff --git a/tests/handlers/test_request_new.py b/tests/handlers/test_request_new.py index d0bd0a23..7cd99495 100644 --- a/tests/handlers/test_request_new.py +++ b/tests/handlers/test_request_new.py @@ -37,7 +37,7 @@ def test_submit_valid_request_form(monkeypatch, http_client, base_url): monkeypatch.setattr( "atst.handlers.request_new.RequestNew.check_xsrf_cookie", lambda s: True ) - monkeypatch.setattr("atst.forms.request.RequestForm.validate", lambda s, c: True) + monkeypatch.setattr("atst.forms.request.RequestForm.validate", lambda s: True) # this just needs to send a known invalid form value response = yield http_client.fetch(