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()
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 > d-2-103 > d-3-1033">d-1-10</span>,<br>' '<span title="d-1-4">d-1-4</span>,<br>' '<span title="d-1-8 > 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 > d-2-103 ' 'd-1-10 > d-2-103 > d-3-1033">d-1-10</span>')