further tweaked sepia palette; shored up TestTray for headless browser pipeline testing
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed

This commit is contained in:
Disco DeDisco
2026-03-29 19:10:42 -04:00
parent 11283118d6
commit 6817323f8e
3 changed files with 33 additions and 11 deletions

View File

@@ -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

View File

@@ -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 T1T5 (768×1024). Use _make_browser so
# Portrait viewport for T1T5; 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"))

View File

@@ -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;