new core.middleware sets cookie for scroll timestamp view to local browser time, w. new corresponding tests in core.tests.UTs.test_middleware; apps.lyric.templatetags.lyric_extras determines timestamp format based on duration elapsed since timestamp; apps.bill.tests.ITs.test_views renamed, now also asserts scroll renders event body and time in columns
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
import datetime
|
||||
import re
|
||||
import time
|
||||
|
||||
from django.utils import timezone
|
||||
from selenium.webdriver.common.by import By
|
||||
|
||||
from .base import FunctionalTest
|
||||
@@ -284,3 +287,68 @@ class BillscrollAppletsTest(FunctionalTest):
|
||||
lambda: self.browser.find_element(By.ID, "id_drama_scroll")
|
||||
)
|
||||
self.assertIn("Coin-on-a-String", scroll.text)
|
||||
|
||||
|
||||
class BillscrollEntryLayoutTest(FunctionalTest):
|
||||
"""
|
||||
FT: each drama entry renders as a 90/10 row — event body at 90%,
|
||||
relative timestamp at 10%; timestamp text format varies with age.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.founder = User.objects.create(email="founder@layout.io")
|
||||
self.room = Room.objects.create(name="Layout Chamber", owner=self.founder)
|
||||
# A fresh (< 24 h) event — timestamp is auto_now_add so always recent
|
||||
record(
|
||||
self.room, GameEvent.SLOT_FILLED, actor=self.founder,
|
||||
slot_number=1, token_type="coin",
|
||||
token_display="Fresh Coin", renewal_days=7,
|
||||
)
|
||||
# An old (> 1 year) event — backdate via queryset update to bypass auto_now_add
|
||||
old = record(
|
||||
self.room, GameEvent.SLOT_FILLED, actor=self.founder,
|
||||
slot_number=2, token_type="coin",
|
||||
token_display="Ancient Coin", renewal_days=7,
|
||||
)
|
||||
GameEvent.objects.filter(pk=old.pk).update(
|
||||
timestamp=timezone.now() - datetime.timedelta(days=400)
|
||||
)
|
||||
|
||||
def _go_to_scroll(self):
|
||||
self.create_pre_authenticated_session("founder@layout.io")
|
||||
self.browser.get(
|
||||
self.live_server_url + f"/billboard/room/{self.room.id}/scroll/"
|
||||
)
|
||||
return self.wait_for(
|
||||
lambda: self.browser.find_elements(By.CSS_SELECTOR, ".drama-event")
|
||||
)
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Test 1 — each entry has a body column and a time column #
|
||||
# ------------------------------------------------------------------ #
|
||||
|
||||
def test_each_drama_entry_has_body_and_time_columns(self):
|
||||
events = self._go_to_scroll()
|
||||
self.assertEqual(len(events), 2)
|
||||
for event_el in events:
|
||||
event_el.find_element(By.CSS_SELECTOR, ".drama-event-body")
|
||||
event_el.find_element(By.CSS_SELECTOR, ".drama-event-time")
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Test 2 — recent entry timestamp shows HH:MM a.m./p.m. #
|
||||
# ------------------------------------------------------------------ #
|
||||
|
||||
def test_recent_event_shows_time_format(self):
|
||||
events = self._go_to_scroll()
|
||||
recent_ts = events[0].find_element(By.CSS_SELECTOR, ".drama-event-time")
|
||||
self.assertRegex(recent_ts.text, r"\d+:\d+\s+[ap]\.m\.")
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Test 3 — entry > 1 year old shows DD Mon YYYY #
|
||||
# ------------------------------------------------------------------ #
|
||||
|
||||
def test_old_event_shows_date_with_year(self):
|
||||
events = self._go_to_scroll()
|
||||
old_ts = events[1].find_element(By.CSS_SELECTOR, ".drama-event-time")
|
||||
self.assertRegex(old_ts.text, r"\d{2}\s+[A-Z][a-z]{2}\s+\d{4}")
|
||||
|
||||
Reference in New Issue
Block a user