# Copyright (C) 2022 Red Hat, Inc. # SPDX-License-Identifier: LGPL-2.1-or-later import os import sys HELPERS_DIR = os.path.dirname(__file__) sys.path.append(HELPERS_DIR) from network import NetworkDBus from step_logger import log_step from steps import REVIEW from storage import StorageDBus class Review(NetworkDBus, StorageDBus): def __init__(self, browser, machine): self.browser = browser self._step = REVIEW NetworkDBus.__init__(self, machine) StorageDBus.__init__(self, machine) @log_step() def check_hostname(self, hostname): self.browser.wait_in_text(f"#{self._step}-target-system-hostname > .pf-v6-c-description-list__text", hostname) @log_step() def check_language(self, lang): self.browser.wait_in_text(f"#{self._step}-target-system-language > .pf-v6-c-description-list__text", lang) def check_language_incomplete(self): self.browser.wait_in_text( f"#{self._step}-target-system-language > .pf-v6-c-description-list__text", "incomplete", ) @log_step() def check_account(self, account): self.browser.wait_in_text(f"#{self._step}-target-system-account > .pf-v6-c-description-list__text", account) @log_step() def check_account_incomplete(self): self.browser.wait_in_text( f"#{self._step}-target-system-account > .pf-v6-c-description-list__text", "incomplete", ) @log_step() def check_timezone(self, timezone): self.browser.wait_in_text(f"#{self._step}-target-system-timezone > .pf-v6-c-description-list__text", timezone) @log_step() def check_timezone_incomplete(self): self.browser.wait_in_text( f"#{self._step}-target-system-timezone > .pf-v6-c-description-list__text", "incomplete", ) @log_step() def check_timezone_not_present(self): self.browser.wait_not_present(f"#{self._step}-target-system-timezone") @log_step() def check_storage_config(self, scenario): self.browser.wait_in_text(f"#{self._step}-target-system-mode > .pf-v6-c-description-list__text", scenario) def check_storage_incomplete(self): self.browser.wait_in_text( f"#{self._step}-target-storage > .pf-v6-c-description-list__text", "incomplete", ) self.browser.wait_not_present(f"#{self._step}-target-system-mode") def check_disk(self, disk, text, prefix=""): self.browser.wait_text(f"{prefix} #disk-{disk}", text) def check_disk_row( self, disk, mount_point="", parent="", size="", reformat="", fs_type=None, is_encrypted=False, action="", prefix="" ): table = f"{prefix} #storage-review-table-{disk}".strip() action_text = f"format as {fs_type}" if reformat else action or "mount" encrypt_text = "encrypted" if is_encrypted and not reformat else "encrypt" if is_encrypted and reformat else "" row = f'{table} tr[data-device="{parent}"]' row = f'{row}[data-action="{action_text}"]' if mount_point: row = f'{row}[data-mount="{mount_point}"]' if is_encrypted: row = f'{row}[data-encrypted="{encrypt_text}"]' if size: row = f'{row}[data-size="{size}"]' self.browser.wait_visible(row) def check_disk_row_not_present(self, disk, mount): self.browser.wait_not_present(f'#storage-review-table-{disk} tr[data-mount="{mount}"]') def check_deleted_system(self, os_name): self.browser.wait_in_text(f"#{self._step}-target-storage-note li", os_name) def check_affected_system(self, os_name, partitions): self.browser.wait_in_text(f"#{self._step}-target-storage-note li", f"Deletion of certain partitions may prevent {os_name}") deleted_partitions = ', '.join([f'{device} ({", ".join(parts)})' for device, parts in partitions]) self.browser.wait_in_text(f"#{self._step}-target-storage-note li", deleted_partitions) def check_resized_system(self, os_name, partitions): self.browser.wait_in_text(f"#{self._step}-target-storage-note li", f"Resizing the following partitions from {os_name}") resized_partitions = ', '.join(partitions) self.browser.wait_in_text(f"#{self._step}-target-storage-note li", resized_partitions) def check_all_erased_checkbox_label(self): usable_disks = self.dbus_get_usable_disks() expected_text = "I understand that all existing data will be erased" if len(usable_disks) > 1: expected_text = "I understand that all existing data will be erased from the selected disks" self.browser.wait_text(f"label[for={self._step}-next-confirmation-checkbox]", expected_text) def check_some_erased_checkbox_label(self): self.browser.wait_text(f"label[for={self._step}-next-confirmation-checkbox]", "I understand that some existing data will be erased") def check_some_resized_checkbox_label(self): self.browser.wait_text(f"label[for={self._step}-next-confirmation-checkbox]", "I understand that some partitions will be modified") def check_checkbox_not_present(self): self.browser.wait_not_present(f"#{self._step}-next-confirmation-checkbox") def check_disk_mount_point_helper_text(self, disk, mount_point, text=None, present=True): if present: self.browser.wait_in_text(f"#helper-disk-{disk}[data-path='{mount_point}'] .pf-v6-c-helper-text__item.pf-m-error", text) else: self.browser.wait_not_present(f"#helper-disk-{disk}[data-path='{mount_point}'] .pf-v6-c-helper-text__item.pf-m-error") def check_available_size_error_value(self, size): self.browser.wait_in_text(f"#{self._step}-step-notification", f"but only {size}") def check_size_error(self, present=True): if present: self.browser.wait_in_text(f"#{self._step}-step-notification", "Not enough available free space") else: self.browser.wait_not_present(f"#{self._step}-step-notification")