Projet

Général

Profil

0001-forms-add-a-preview-mode-for-disabled-forms-22.patch

Frédéric Péters, 20 mai 2015 09:56

Télécharger (5,64 ko)

Voir les différences:

Subject: [PATCH 1/3] forms: add a "preview" mode for disabled forms (#22)

 tests/test_admin_pages.py |  2 +-
 tests/test_form_pages.py  | 25 +++++++++++++++++++++++++
 wcs/admin/forms.py        |  5 ++++-
 wcs/formdef.py            |  4 +++-
 wcs/forms/root.py         | 12 ++++++++----
 wcs/root.py               |  4 +++-
 6 files changed, 44 insertions(+), 8 deletions(-)
tests/test_admin_pages.py
186 186

  
187 187
    # try changing title
188 188
    resp = app.get('/backoffice/forms/1/')
189
    resp = resp.click(href='title')
189
    resp = resp.click('change title')
190 190
    assert resp.forms[0]['name'].value == 'form title'
191 191
    resp.forms[0]['name'] = 'new title'
192 192
    resp = resp.forms[0].submit()
tests/test_form_pages.py
625 625

  
626 626
    assert len(formdef.data_class().select(clause=lambda x: x.status == 'wf-st2')) == 1
627 627
    assert len(formdef.data_class().select(clause=lambda x: x.status == 'wf-st1')) == 1
628

  
629
def test_preview_form(pub):
630
    user = create_user(pub)
631

  
632
    formdef = create_formdef()
633
    formdef.data_class().wipe()
634
    formdef.fields = []
635
    formdef.disabled = True
636
    formdef.store()
637

  
638
    # check the preview page is not accessible to regular users
639
    get_app(pub).get('/preview/test/', status=403)
640

  
641
    # check it's accessible to admins
642
    user.is_admin = True
643
    user.store()
644
    page = login(get_app(pub), username='foo', password='foo').get('/preview/test/')
645

  
646
    # check no formdata gets stored
647
    next_page = page.forms[0].submit('submit')
648
    assert 'Check values then click submit.' in next_page.body
649
    next_page = next_page.forms[0].submit('submit')
650
    assert next_page.status_int == 302
651
    assert next_page.location == 'http://example.net/preview/test/'
652
    assert formdef.data_class().count() == 0
wcs/admin/forms.py
381 381
        r += htmltext('</ul>')
382 382

  
383 383
        r += htmltext('<ul>')
384
        if not self.formdef.is_disabled():
384
        if self.formdef.is_disabled():
385
            r += htmltext('<li><a href="%s">%s</a></li>') % (
386
                    self.formdef.get_url(preview=True), _('Preview Online'))
387
        else:
385 388
            r += htmltext('<li><a href="%s">%s</a></li>') % (
386 389
                    self.formdef.get_url(), _('Display Online'))
387 390
        if qrcode is not None:
wcs/formdef.py
329 329
        return cls.get_on_index(url_name, 'url_name', ignore_migration=ignore_migration)
330 330
    get_by_urlname = classmethod(get_by_urlname)
331 331

  
332
    def get_url(self, backoffice = False):
332
    def get_url(self, backoffice=False, preview=False):
333 333
        if backoffice:
334 334
            base_url = get_publisher().get_backoffice_url() + '/management'
335
        elif preview:
336
            base_url = get_publisher().get_frontoffice_url() + '/preview'
335 337
        else:
336 338
            base_url = get_publisher().get_frontoffice_url()
337 339
        return '%s/%s/' % (base_url, self.url_name)
wcs/forms/root.py
437 437
        formdata.status = str('')
438 438
        get_publisher().substitutions.feed(formdata)
439 439

  
440
    def _q_index(self, log_detail = None, editing = None):
441
        self.check_role()
440
    def check_disabled(self):
442 441
        if self.formdef.is_disabled():
443 442
            if self.formdef.disabled_redirection:
444
                url = misc.get_variadic_url(self.formdef.disabled_redirection,
443
                return misc.get_variadic_url(self.formdef.disabled_redirection,
445 444
                        get_publisher().substitutions.get_context_variables())
446
                return redirect(url)
447 445
            else:
448 446
                raise errors.AccessForbiddenError()
447
        return False
448

  
449
    def _q_index(self, log_detail = None, editing = None):
450
        self.check_role()
451
        if self.check_disabled():
452
            return redirect(self.check_disabled())
449 453

  
450 454
        session = get_session()
451 455

  
wcs/root.py
51 51
from roles import Role
52 52
from wcs.api import get_user_from_api_query_string, ApiDirectory
53 53
from myspace import MyspaceDirectory
54
from forms.preview import PreviewDirectory
54 55

  
55 56

  
56 57
class CompatibilityDirectory(Directory):
......
194 195
    _q_exports = ['admin', 'backoffice', 'forms', 'login', 'logout', 'token', 'saml',
195 196
            'ident', 'register', 'afterjobs', 'themes', 'myspace', 'user', 'roles',
196 197
            'pages', ('tmp-upload', 'tmp_upload'), 'api', '__version__',
197
            'tryauth', 'auth']
198
            'tryauth', 'auth', 'preview']
198 199

  
199 200
    api = ApiDirectory()
200 201
    themes = template.ThemesDirectory()
......
380 381
    register = RegisterDirectory()
381 382
    ident = IdentDirectory()
382 383
    afterjobs = AfterJobStatusDirectory()
384
    preview = PreviewDirectory()
383
-