further tweaked sepia palette; shored up TestTray for headless browser pipeline testing
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
This commit is contained in:
@@ -37,13 +37,24 @@ def wait(fn):
|
|||||||
# Functional Tests
|
# Functional Tests
|
||||||
class FunctionalTest(StaticLiveServerTestCase):
|
class FunctionalTest(StaticLiveServerTestCase):
|
||||||
# Helper methods
|
# Helper methods
|
||||||
def setUp(self):
|
def _make_browser(self, width=1366, height=900):
|
||||||
|
"""Create a Firefox instance sized to width×height.
|
||||||
|
In headless CI, pass --width/--height as binary args so the CSS
|
||||||
|
media query (orientation: landscape/portrait) is correct from the
|
||||||
|
first paint — set_window_size() alone is unreliable in headless mode.
|
||||||
|
"""
|
||||||
options = webdriver.FirefoxOptions()
|
options = webdriver.FirefoxOptions()
|
||||||
headless = os.environ.get("HEADLESS")
|
headless = os.environ.get("HEADLESS")
|
||||||
if headless:
|
if headless:
|
||||||
options.add_argument("--headless")
|
options.add_argument("--headless")
|
||||||
self.browser = webdriver.Firefox(options=options)
|
options.add_argument(f"--width={width}")
|
||||||
self.browser.set_window_size(1366, 900)
|
options.add_argument(f"--height={height}")
|
||||||
|
browser = webdriver.Firefox(options=options)
|
||||||
|
browser.set_window_size(width, height)
|
||||||
|
return browser
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.browser = self._make_browser(1366, 900)
|
||||||
self.test_server = os.environ.get("TEST_SERVER")
|
self.test_server = os.environ.get("TEST_SERVER")
|
||||||
if self.test_server:
|
if self.test_server:
|
||||||
self.live_server_url = 'http://' + self.test_server
|
self.live_server_url = 'http://' + self.test_server
|
||||||
|
|||||||
@@ -31,9 +31,20 @@ from apps.lyric.models import User
|
|||||||
class TrayTest(FunctionalTest):
|
class TrayTest(FunctionalTest):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
# Portrait viewport for T1–T5 (768×1024). Use _make_browser so
|
||||||
# Portrait viewport for T1–T5; landscape tests (T6, T7) override this.
|
# headless CI gets --width/--height args and the CSS orientation
|
||||||
self.browser.set_window_size(768, 1024)
|
# media query is correct from first paint.
|
||||||
|
self.browser = self._make_browser(768, 1024)
|
||||||
|
self.test_server = None
|
||||||
|
from apps.applets.models import Applet
|
||||||
|
Applet.objects.get_or_create(slug="new-note", defaults={"name": "New Note"})
|
||||||
|
|
||||||
|
def _switch_to_landscape(self):
|
||||||
|
"""Recreate the browser at landscape dimensions (900×500).
|
||||||
|
Needed in headless CI where set_window_size() alone doesn't
|
||||||
|
update the CSS orientation media query reliably."""
|
||||||
|
self.browser.quit()
|
||||||
|
self.browser = self._make_browser(900, 500)
|
||||||
|
|
||||||
def _simulate_drag(self, btn, offset_x):
|
def _simulate_drag(self, btn, offset_x):
|
||||||
"""Dispatch JS pointer events directly — more reliable than GeckoDriver drag."""
|
"""Dispatch JS pointer events directly — more reliable than GeckoDriver drag."""
|
||||||
@@ -195,8 +206,8 @@ class TrayTest(FunctionalTest):
|
|||||||
|
|
||||||
def test_tray_btn_anchored_near_top_in_landscape(self):
|
def test_tray_btn_anchored_near_top_in_landscape(self):
|
||||||
room = self._make_sig_select_room()
|
room = self._make_sig_select_room()
|
||||||
|
self._switch_to_landscape()
|
||||||
self.create_pre_authenticated_session("founder@test.io")
|
self.create_pre_authenticated_session("founder@test.io")
|
||||||
self.browser.set_window_size(900, 500)
|
|
||||||
self.browser.get(self._room_url(room))
|
self.browser.get(self._room_url(room))
|
||||||
|
|
||||||
btn = self.wait_for(
|
btn = self.wait_for(
|
||||||
@@ -216,8 +227,8 @@ class TrayTest(FunctionalTest):
|
|||||||
|
|
||||||
def test_dragging_tray_btn_down_opens_tray_in_landscape(self):
|
def test_dragging_tray_btn_down_opens_tray_in_landscape(self):
|
||||||
room = self._make_sig_select_room()
|
room = self._make_sig_select_room()
|
||||||
|
self._switch_to_landscape()
|
||||||
self.create_pre_authenticated_session("founder@test.io")
|
self.create_pre_authenticated_session("founder@test.io")
|
||||||
self.browser.set_window_size(900, 500)
|
|
||||||
self.browser.get(self._room_url(room))
|
self.browser.get(self._room_url(room))
|
||||||
|
|
||||||
btn = self.wait_for(lambda: self.browser.find_element(By.ID, "id_tray_btn"))
|
btn = self.wait_for(lambda: self.browser.find_element(By.ID, "id_tray_btn"))
|
||||||
@@ -272,8 +283,8 @@ class TrayTest(FunctionalTest):
|
|||||||
# T9a — column/row count (structure)
|
# T9a — column/row count (structure)
|
||||||
def test_tray_grid_is_8_columns_by_1_row_in_landscape(self):
|
def test_tray_grid_is_8_columns_by_1_row_in_landscape(self):
|
||||||
room = self._make_sig_select_room()
|
room = self._make_sig_select_room()
|
||||||
|
self._switch_to_landscape()
|
||||||
self.create_pre_authenticated_session("founder@test.io")
|
self.create_pre_authenticated_session("founder@test.io")
|
||||||
self.browser.set_window_size(900, 500)
|
|
||||||
self.browser.get(self._room_url(room))
|
self.browser.get(self._room_url(room))
|
||||||
|
|
||||||
btn = self.wait_for(lambda: self.browser.find_element(By.ID, "id_tray_btn"))
|
btn = self.wait_for(lambda: self.browser.find_element(By.ID, "id_tray_btn"))
|
||||||
@@ -306,8 +317,8 @@ class TrayTest(FunctionalTest):
|
|||||||
|
|
||||||
def test_landscape_tray_all_8_cells_visible(self):
|
def test_landscape_tray_all_8_cells_visible(self):
|
||||||
room = self._make_sig_select_room()
|
room = self._make_sig_select_room()
|
||||||
|
self._switch_to_landscape()
|
||||||
self.create_pre_authenticated_session("founder@test.io")
|
self.create_pre_authenticated_session("founder@test.io")
|
||||||
self.browser.set_window_size(900, 500)
|
|
||||||
self.browser.get(self._room_url(room))
|
self.browser.get(self._room_url(room))
|
||||||
|
|
||||||
btn = self.wait_for(lambda: self.browser.find_element(By.ID, "id_tray_btn"))
|
btn = self.wait_for(lambda: self.browser.find_element(By.ID, "id_tray_btn"))
|
||||||
|
|||||||
@@ -237,7 +237,7 @@
|
|||||||
--priSwp: 221, 206, 149;
|
--priSwp: 221, 206, 149;
|
||||||
--secSwp: 148, 150, 103;
|
--secSwp: 148, 150, 103;
|
||||||
--terSwp: 102, 92, 67;
|
--terSwp: 102, 92, 67;
|
||||||
--quaSwp: 43, 76, 37;
|
--quaSwp: 33, 56, 27;
|
||||||
// blood (Tyche's Phlegethon)
|
// blood (Tyche's Phlegethon)
|
||||||
--priBld: 200, 79, 50;
|
--priBld: 200, 79, 50;
|
||||||
--secBld: 177, 63, 52;
|
--secBld: 177, 63, 52;
|
||||||
|
|||||||
Reference in New Issue
Block a user