Files

295 lines
9.8 KiB
Python
Raw Permalink Normal View History

"""
Graphical test for hotspot settings password defaults.
This test verifies that the hotspot settings screen shows the
"(defaults to none)" value under the "Auth Mode" setting.
Usage:
Desktop: ./tests/unittest.sh tests/test_graphical_hotspot_password.py
Device: ./tests/unittest.sh tests/test_graphical_hotspot_password.py --ondevice
"""
import unittest
import lvgl as lv
import mpos.ui
from mpos import (
AppManager,
wait_for_render,
print_screen_labels,
click_button,
verify_text_present,
find_setting_value_label,
get_setting_value_text,
click_label,
simulate_click,
get_widget_coords,
select_dropdown_option_by_text,
find_dropdown_widget,
SharedPreferences,
)
class TestGraphicalHotspotPassword(unittest.TestCase):
"""Test suite for hotspot password defaults in settings UI."""
def _reset_hotspot_preferences(self):
"""Clear hotspot preferences to ensure default values are shown."""
prefs = SharedPreferences("com.micropythonos.settings.hotspot")
editor = prefs.edit()
editor.remove_all()
editor.commit()
def _open_hotspot_settings_screen(self):
"""Start hotspot app and open the Settings screen."""
result = AppManager.start_app("com.micropythonos.settings.hotspot")
self.assertTrue(result, "Failed to start hotspot settings app")
wait_for_render(iterations=20)
screen = lv.screen_active()
print("\nInitial screen labels:")
print_screen_labels(screen)
self.assertTrue(
click_button("Settings"),
"Could not find Settings button in hotspot app",
)
wait_for_render(iterations=40)
screen = lv.screen_active()
print("\nSettings screen labels:")
print_screen_labels(screen)
return screen
def tearDown(self):
"""Clean up after each test method."""
# Navigate back to launcher to close any opened apps
try:
mpos.ui.back_screen()
wait_for_render(5)
except:
pass
def test_auth_mode_defaults_label(self):
"""Verify Auth Mode shows defaults to none in hotspot settings."""
print("\n=== Starting Hotspot Settings Auth Mode default test ===")
self._reset_hotspot_preferences()
screen = self._open_hotspot_settings_screen()
self.assertTrue(
verify_text_present(screen, "Auth Mode"),
"Auth Mode setting title not found on settings screen",
)
value_label = find_setting_value_label(screen, "Auth Mode")
self.assertIsNotNone(
value_label,
"Could not find value label for Auth Mode setting",
)
value_text = get_setting_value_text(screen, "Auth Mode")
print(f"Auth Mode value text: {value_text}")
self.assertEqual(
value_text,
"(defaults to none)",
"Auth Mode value text did not match expected default",
)
print("\n=== Hotspot settings Auth Mode default test completed ===")
2026-03-25 14:30:16 +01:00
def test_auth_mode_change_hides_password_setting(self):
"""Verify Password setting disappears after switching Auth Mode to None."""
print("\n=== Starting Hotspot Settings Password hide test ===")
self._reset_hotspot_preferences()
screen = self._open_hotspot_settings_screen()
self.assertFalse(
verify_text_present(screen, "Password"),
"Password setting should not be visible with Auth Mode None",
)
self.assertTrue(
click_label("Auth Mode"),
"Could not click Auth Mode setting",
)
wait_for_render(iterations=40)
screen = lv.screen_active()
dropdown = find_dropdown_widget(screen)
self.assertIsNotNone(dropdown, "Auth Mode dropdown not found")
coords = get_widget_coords(dropdown)
self.assertIsNotNone(coords, "Could not get dropdown coordinates")
print(f"Clicking dropdown at ({coords['center_x']}, {coords['center_y']})")
simulate_click(coords["center_x"], coords["center_y"], press_duration_ms=100)
wait_for_render(iterations=20)
self.assertTrue(
select_dropdown_option_by_text(dropdown, "WPA2", allow_partial=True),
"Could not select WPA2 option in dropdown",
)
wait_for_render(iterations=20)
self.assertTrue(
click_button("Save"),
"Could not click Save button in Auth Mode settings",
)
wait_for_render(iterations=40)
screen = lv.screen_active()
self.assertTrue(
verify_text_present(screen, "Password"),
"Password setting did not appear after selecting WPA2",
)
self.assertTrue(
click_label("Auth Mode"),
"Could not click Auth Mode setting to revert",
)
wait_for_render(iterations=40)
screen = lv.screen_active()
dropdown = find_dropdown_widget(screen)
self.assertIsNotNone(dropdown, "Auth Mode dropdown not found on revert")
coords = get_widget_coords(dropdown)
self.assertIsNotNone(coords, "Could not get dropdown coordinates on revert")
print(f"Clicking dropdown at ({coords['center_x']}, {coords['center_y']})")
simulate_click(coords["center_x"], coords["center_y"], press_duration_ms=100)
wait_for_render(iterations=20)
self.assertTrue(
select_dropdown_option_by_text(dropdown, "None", allow_partial=True),
"Could not select None option in dropdown",
)
wait_for_render(iterations=20)
self.assertTrue(
click_button("Save"),
"Could not click Save button in Auth Mode settings (revert)",
)
wait_for_render(iterations=40)
screen = lv.screen_active()
print("\nSettings screen labels after Auth Mode revert:")
print_screen_labels(screen)
self.assertFalse(
verify_text_present(screen, "Password"),
"Password setting did not disappear after selecting None",
)
print("\n=== Hotspot settings Password hide test completed ===")
def test_auth_mode_change_shows_password_setting(self):
"""Verify Password setting appears after switching Auth Mode to WPA2."""
print("\n=== Starting Hotspot Settings Password visibility test ===")
self._reset_hotspot_preferences()
screen = self._open_hotspot_settings_screen()
self.assertFalse(
verify_text_present(screen, "Password"),
"Password setting should not be visible with Auth Mode None",
)
self.assertTrue(
click_label("Auth Mode"),
"Could not click Auth Mode setting",
)
wait_for_render(iterations=40)
screen = lv.screen_active()
dropdown = find_dropdown_widget(screen)
self.assertIsNotNone(dropdown, "Auth Mode dropdown not found")
coords = get_widget_coords(dropdown)
self.assertIsNotNone(coords, "Could not get dropdown coordinates")
print(f"Clicking dropdown at ({coords['center_x']}, {coords['center_y']})")
simulate_click(coords["center_x"], coords["center_y"], press_duration_ms=100)
wait_for_render(iterations=20)
self.assertTrue(
select_dropdown_option_by_text(dropdown, "WPA2", allow_partial=True),
"Could not select WPA2 option in dropdown",
)
wait_for_render(iterations=20)
self.assertTrue(
click_button("Save"),
"Could not click Save button in Auth Mode settings",
)
wait_for_render(iterations=40)
screen = lv.screen_active()
print("\nSettings screen labels after Auth Mode change:")
print_screen_labels(screen)
self.assertTrue(
verify_text_present(screen, "Password"),
"Password setting did not appear after selecting WPA2",
)
print("\n=== Hotspot settings Password visibility test completed ===")
def test_auth_mode_dropdown_select_wpa2(self):
"""Change Auth Mode via dropdown and verify stored value label."""
print("\n=== Starting Hotspot Settings Auth Mode dropdown test ===")
self._reset_hotspot_preferences()
screen = self._open_hotspot_settings_screen()
self.assertTrue(
click_label("Auth Mode"),
"Could not click Auth Mode setting",
)
wait_for_render(iterations=40)
screen = lv.screen_active()
print("\nAuth Mode edit screen labels:")
print_screen_labels(screen)
dropdown = find_dropdown_widget(screen)
self.assertIsNotNone(dropdown, "Auth Mode dropdown not found")
coords = get_widget_coords(dropdown)
self.assertIsNotNone(coords, "Could not get dropdown coordinates")
print(f"Clicking dropdown at ({coords['center_x']}, {coords['center_y']})")
simulate_click(coords["center_x"], coords["center_y"], press_duration_ms=100)
wait_for_render(iterations=20)
self.assertTrue(
select_dropdown_option_by_text(dropdown, "WPA2", allow_partial=True),
"Could not select WPA2 option in dropdown",
)
wait_for_render(iterations=20)
self.assertTrue(
click_button("Save"),
"Could not click Save button in Auth Mode settings",
)
wait_for_render(iterations=40)
screen = lv.screen_active()
print("\nSettings screen labels after save:")
print_screen_labels(screen)
value_text = get_setting_value_text(screen, "Auth Mode")
print(f"Auth Mode value text after save: {value_text}")
self.assertEqual(
value_text,
"wpa2",
"Auth Mode value did not update to wpa2",
)
print("\n=== Hotspot settings Auth Mode dropdown test completed ===")
if __name__ == "__main__":
pass