예제 #1
0
def test_page_form(session):
    # Test apply / update
    pages = TranslatablePageCollection(session)
    page = pages.add(
        id='page',
        title_translations={
            'de_CH': 'Titel',
            'en_US': 'Title'
        },
        content_translations={
            'de_CH': 'Inhalt',
            'en_US': 'Content'
        },
    )

    form = PageForm()

    # .. de_CH
    form.apply_model(page)
    assert form.title.data == 'Titel'
    assert form.content.data == 'Inhalt'

    form.title.data = 'A'
    form.content.data = 'B'

    form.update_model(page)

    assert page.title_translations == {'de_CH': 'A', 'en_US': 'Title'}
    assert page.content_translations == {'de_CH': 'B', 'en_US': 'Content'}
    assert page.id == 'page'

    # ... en_US
    page.session_manager.current_locale = 'en_US'

    form.apply_model(page)
    assert form.title.data == 'Title'
    assert form.content.data == 'Content'

    form.title.data = 'C'
    form.content.data = 'D'

    form.update_model(page)

    assert page.title_translations == {'de_CH': 'A', 'en_US': 'C'}
    assert page.content_translations == {'de_CH': 'B', 'en_US': 'D'}
    assert page.id == 'page'

    # ... fr_CH
    page.session_manager.current_locale = 'fr_CH'

    form.apply_model(page)
    assert form.title.data == 'A'
    assert form.content.data == 'B'

    form.title.data = 'E'
    form.content.data = 'F'

    form.update_model(page)

    assert page.title_translations == {
        'de_CH': 'A',
        'en_US': 'C',
        'fr_CH': 'E'
    }
    assert page.content_translations == {
        'de_CH': 'B',
        'en_US': 'D',
        'fr_CH': 'F'
    }
    assert page.id == 'page'

    # Test ID generation
    form = PageForm()
    form.request = DummyRequest(session, DummyPrincipal())

    assert form.id == 'page-1'

    form.title.data = ' Über uns '
    assert form.id == 'uber-uns'

    form.update_model(page)
    assert page.id == 'page'

    page = TranslatablePage()
    form.update_model(page)
    assert page.id == 'uber-uns'

    # Test validation
    form = PageForm()
    assert not form.validate()

    form = PageForm(DummyPostData({'title': 'X', 'content': 'Y'}))
    assert form.validate()
예제 #2
0
def test_layout_default(swissvotes_app):
    session = swissvotes_app.session()

    request = DummyRequest()
    request.app = swissvotes_app
    request.session = session
    model = None

    layout = DefaultLayout(model, request)
    assert layout.title == ""
    assert layout.editbar_links == []
    assert path(layout.breadcrumbs) == 'Principal'
    assert layout.static_path == 'Principal/static'
    assert layout.app_version
    assert layout.locales == [('de_CH', 'de', 'Deutsch', 'SiteLocale/'),
                              ('fr_CH', 'fr', 'Français', 'SiteLocale/'),
                              ('en_US', 'en', 'English', 'SiteLocale/')]
    assert layout.request.includes == ['frameworks', 'chosen', 'common']
    assert list(hrefs(layout.top_navigation)) == ['SwissVoteCollection/']
    assert layout.homepage_url == 'Principal/'
    assert layout.votes_url == 'SwissVoteCollection/'
    assert layout.login_url == 'Auth/login'
    assert layout.logout_url is None
    assert layout.move_page_url_template == (
        'TranslatablePageMove/?csrf-token=x')
    assert path([layout.disclaimer_link]) == 'TranslatablePage'
    layout.disclaimer_link.text == 'disclaimer'
    assert path([layout.imprint_link]) == 'TranslatablePage'
    layout.imprint_link.text == 'imprint'
    assert path([layout.data_protection_link]) == 'TranslatablePage'
    layout.data_protection_link.text == 'data-protection'

    # Login
    request.is_logged_in = True
    layout = DefaultLayout(model, request)
    assert layout.login_url is None
    assert layout.logout_url == 'Auth/logout'

    # Add some pages
    pages = TranslatablePageCollection(session)
    pages.add(id='dataset',
              title_translations={
                  'de_CH': 'Datensatz',
                  'en_US': 'Dataset'
              },
              content_translations={
                  'de_CH': 'Datensatz',
                  'en_US': 'Dataset'
              })
    pages.add(id='about',
              title_translations={
                  'de_CH': 'Über uns',
                  'en_US': 'About'
              },
              content_translations={
                  'de_CH': 'Über uns',
                  'en_US': 'About'
              })
    pages.add(id='contact',
              title_translations={
                  'de_CH': 'Kontakt',
                  'en_US': 'Contact'
              },
              content_translations={
                  'de_CH': 'Kontakt',
                  'en_US': 'Contact'
              })
    assert [item.text for item in layout.top_navigation
            ] == ['Votes', 'Datensatz', 'Über uns', 'Kontakt']

    assert layout.format_bfs_number(Decimal('100')) == '100'
    assert layout.format_bfs_number(Decimal('100.1')) == '100.1'
    assert layout.format_bfs_number(Decimal('100.12')) == '100.1'

    assert layout.format_procedure_number(None) == ''
    assert layout.format_procedure_number(Decimal('0')) == '0'
    assert layout.format_procedure_number(Decimal('00.087')) == '00.087'
    assert layout.format_procedure_number(Decimal('0.087')) == '00.087'
    assert layout.format_procedure_number(Decimal('02.060')) == '02.060'
    assert layout.format_procedure_number(Decimal('2.06')) == '02.060'
    assert layout.format_procedure_number(Decimal('16.479')) == '16.479'
    assert layout.format_procedure_number(Decimal('1859')) == '1859'
    assert layout.format_procedure_number(Decimal('1859.000')) == '1859'
    assert layout.format_procedure_number(Decimal('9309')) == '9309'
    assert layout.format_procedure_number(Decimal('9309.0')) == '9309'
    assert layout.format_procedure_number(Decimal('12239')) == '12239'
    assert layout.format_procedure_number(Decimal('12239.0')) == '12239'
    assert layout.format_policy_areas(SwissVote()) == ''

    vote = SwissVote(
        descriptor_1_level_1=Decimal('4'),
        descriptor_2_level_1=Decimal('8'),
        descriptor_2_level_2=Decimal('8.3'),
        descriptor_3_level_1=Decimal('10'),
        descriptor_3_level_2=Decimal('10.3'),
        descriptor_3_level_3=Decimal('10.33'),
    )
    assert layout.format_policy_areas(vote) == (
        '<span title="d-1-10 &gt; d-2-103 &gt; d-3-1033">d-1-10</span>,<br>'
        '<span title="d-1-4">d-1-4</span>,<br>'
        '<span title="d-1-8 &gt; d-2-83">d-1-8</span>')

    vote = SwissVote(
        descriptor_2_level_1=Decimal('10'),
        descriptor_2_level_2=Decimal('10.3'),
        descriptor_3_level_1=Decimal('10'),
        descriptor_3_level_2=Decimal('10.3'),
        descriptor_3_level_3=Decimal('10.33'),
    )
    assert layout.format_policy_areas(vote) == (
        '<span title="d-1-10 &gt; d-2-103 &#10;&#10;'
        'd-1-10 &gt; d-2-103 &gt; d-3-1033">d-1-10</span>')