Source code for univention.testing.browser.selfservice
#!/usr/bin/python3
# SPDX-FileCopyrightText: 2023-2025 Univention GmbH
# SPDX-License-Identifier: AGPL-3.0-only
from dataclasses import dataclass
from playwright.sync_api import Page, expect
from univention.lib.i18n import Translation
from univention.testing.browser.lib import UMCBrowserTest
_ = Translation('ucs-test-browser').translate
[docs]
@dataclass
class UserCreationAttribute:
label: str
value: str
[docs]
class SelfService:
def __init__(self, tester: UMCBrowserTest):
self.tester: UMCBrowserTest = tester
self.page: Page = tester.page
[docs]
def navigate(self, hash: str = '', username: str | None = None, password: str | None = None):
if username and password:
self.tester.login(username, password, f'/univention/portal/#/selfservice/{hash}')
return
self.page.goto(f'{self.tester.base_url}/univention/portal/#/selfservice/{hash}')
[docs]
def navigate_create_account(self):
self.navigate('createaccount')
expect(self.page.get_by_role('heading', name=_('Create an account'))).to_be_visible()
[docs]
def fill_create_account(self, attributes: dict[str, UserCreationAttribute], button: str | None = 'Create an account'):
for k, v in attributes.items():
if k == 'password':
self.page.get_by_role('textbox', name=_('Password'), exact=True).fill(v.value)
self.page.get_by_role('textbox', name=_('Password (retype)'), exact=True).fill(v.value)
else:
self.page.get_by_role('textbox', name=v.label).fill(v.value)
if button is not None:
self.page.get_by_role('button', name=button).click()