Source code for univention.testing.browser.univentionconfigurationregistry

#!/usr/bin/python3
# SPDX-FileCopyrightText: 2023-2025 Univention GmbH
# SPDX-License-Identifier: AGPL-3.0-only

import logging
import re
import time

from univention.lib.i18n import Translation
from univention.testing.browser.lib import UMCBrowserTest


logger = logging.getLogger(__name__)

_ = Translation('ucs-test-framework').translate


[docs] class UniventionConfigurationRegistry: def __init__(self, tester: UMCBrowserTest): self.tester = tester self.page = tester.page self.grid_load_url = re.compile('.*univention/command/ucr/query.*')
[docs] def navigate(self, username='Administrator', password='univention'): self.tester.login(username, password) self.tester.open_module('Univention Configuration Registry', self.grid_load_url)
[docs] def search(self, text: str): search_box = self.page.locator('[name=pattern]') search_box.fill(text) with self.page.expect_response(self.grid_load_url): search_box.press('Enter')
[docs] def get_ucr_module_search_results(self, query: str) -> dict[str, str]: """ Perform a search in the UCR Module and return the key + value for each row :param query: The query to search for :returns: A dict with the key and value of the variable """ self.search(query) # the number of rows - 1 since the header row also gets counted here rows = self.page.locator('.dgrid-row').get_by_role('row') logger.info("query '%s' returned %d results", query, rows.count()) keys = rows.locator('.field-key').all() values = rows.locator('.field-value').all() result = {key.inner_text(): value.inner_text() for (key, value) in zip(keys, values)} # ucr_module.page.pause() return result
[docs] def set_variable(self, key: str, value: str): self.page.get_by_text(key).click() time.sleep(1) # wait for the loading animation to disappear before filling the textbox # TODO: is there a better way? for standby in self.page.locator('.umcStandbySvg').all(): standby.wait_for(state='hidden') value_textbox = self.page.get_by_role('textbox', name=_('Value'), exact=True) value_textbox.clear() value_textbox.fill(value) # self.page.get_by_role("textbox", name=_("Value"), exact=True).fill(value) with self.page.expect_response(self.grid_load_url): self.page.get_by_role('button', name=_('Save'), exact=True).click()