playwright_tests/flows/user_profile_flows/edit_profile_data_flow.py (82 lines of code) (raw):

from playwright.sync_api import Page from playwright_tests.core.utilities import Utilities from playwright_tests.pages.top_navbar import TopNavbar from playwright_tests.pages.user_pages.my_profile_edit import MyProfileEdit from playwright_tests.pages.user_pages.my_profile_edit_contribution_areas_page import \ MyProfileEditContributionAreasPage from playwright_tests.pages.user_pages.my_profile_edit_settings_page import \ MyProfileEditSettingsPage from playwright_tests.pages.user_pages.my_profile_user_navbar import UserNavbar class EditProfileDataFlow: def __init__(self, page: Page): self.utilities = Utilities(page) self.edit_profile_page = MyProfileEdit(page) self.top_navbar = TopNavbar(page) self.edit_settings_page = MyProfileEditSettingsPage(page) self.profile_navbar = UserNavbar(page) self.profile_contribution_areas = MyProfileEditContributionAreasPage(page) # Editing a profile with data flow. def edit_profile_with_test_data(self, info_only=False, submit_change=False, expected_url=None) -> dict[str, str]: edit_test_data = self.utilities.profile_edit_test_data valid_user_edit = edit_test_data["valid_user_edit"] self.clear_input_fields(info_only) if not info_only: self._update_fields([ ("send_text_to_username_field", valid_user_edit["username"]), ("send_text_to_display_name_field", valid_user_edit["display_name"]), ("select_timezone_dropdown_option_by_value", valid_user_edit["timezone"]), ("select_preferred_language_dropdown_option_by_value", valid_user_edit["preferred_language"]) ]) self._update_fields([ ("send_text_to_biography_field", valid_user_edit["biography"]), ("send_text_to_website_field", valid_user_edit["website"]), ("send_text_to_twitter_username_field", valid_user_edit["twitter_username"]), ("send_text_to_community_portal_field", valid_user_edit["community_portal_username"]), ("send_text_to_people_directory_username", valid_user_edit["people_directory_username"]), ("send_text_to_matrix_nickname", valid_user_edit["matrix_nickname"]), ("select_country_dropdown_option_by_value", valid_user_edit["country_code"]), ("sent_text_to_city_field", valid_user_edit["city"]), ("select_involved_from_month_option_by_value", valid_user_edit["involved_from_month_number"]), ("select_involved_from_year_option_by_value", valid_user_edit["involved_from_year"]) ]) if submit_change: self.edit_profile_page.click_update_my_profile_button(expected_url=expected_url) return { "username": valid_user_edit["username"], "display_name": valid_user_edit["display_name"], "biography": valid_user_edit["biography"], "website": valid_user_edit["website"], "twitter": valid_user_edit["twitter_username"], "community_portal": valid_user_edit["community_portal_username"], "people_directory": valid_user_edit["people_directory_username"], "matrix_nickname": valid_user_edit["matrix_nickname"], "country": valid_user_edit["country_value"], "city": valid_user_edit["city"], "timezone": valid_user_edit["timezone"], "preferred_language": valid_user_edit["preferred_language"], "involved_from_month": valid_user_edit["involved_from_month_value"], "involved_from_year": valid_user_edit["involved_from_year"] } def _update_fields(self, fields: list[tuple[str, str]]): """ Updates the fields on the edit profile page. Args: fields (list[tuple[str, str]]): A list of tuples where each tuple contains the method name and the value to be set. """ for method_name, value in fields: getattr(self.edit_profile_page, method_name)(value) # Clear all profile edit input fields flow. def clear_input_fields(self, only_profile_info=False, submit_change=False): """ Clears all profile edit input fields. Args: only_profile_info (bool): If True, all profile info fields are cleared except username and display name. submit_change (bool): If True, submits the changes after clearing the fields. """ self.edit_profile_page.clear_all_input_fields(only_profile_info) self.edit_profile_page.clear_biography_textarea_field() if submit_change: self.edit_profile_page.click_update_my_profile_button() def check_all_user_settings(self): """ Navigates to the settings profile option, checks all settings checkboxes, and updates the settings. """ self.top_navbar.click_on_settings_profile_option() self.edit_settings_page.click_on_all_settings_checkboxes() self.edit_settings_page.click_on_update_button() def check_all_profile_contribution_areas(self, checked: bool): """ Navigates to the contribution areas section and checks or unchecks all contribution areas. Args: checked (bool): If True, checks all contribution areas. If False, unchecks all contribution areas. """ self.top_navbar.click_on_settings_profile_option() self.profile_navbar.click_on_edit_contribution_areas_option() if not checked: self.profile_contribution_areas.click_on_unchecked_cont_areas_checkboxes() else: self.profile_contribution_areas.click_on_all_checked_cont_areas_checkboxes() self.profile_contribution_areas.click_on_update_contribution_areas_button()