Select outbound date first for returns

This commit is contained in:
Edward Betts 2026-05-26 12:55:39 +01:00
parent 2b475aa726
commit 21f84e2fb6
2 changed files with 33 additions and 5 deletions

View file

@ -163,7 +163,7 @@
/* ── state ───────────────────────────────────────────────────────── */ /* ── state ───────────────────────────────────────────────────────── */
let viewYear = TODAY.getFullYear(); let viewYear = TODAY.getFullYear();
let viewMonth = TODAY.getMonth(); // 0-based let viewMonth = TODAY.getMonth(); // 0-based
let outDate = new Date(TODAY); // default: today selected let outDate = new Date(TODAY); // default for single journeys
let retDate = null; let retDate = null;
let hoverDate = null; let hoverDate = null;
let isReturn = false; let isReturn = false;
@ -409,12 +409,12 @@
? 'Date: <strong>' + dispDate(outDate) + '</strong>' ? 'Date: <strong>' + dispDate(outDate) + '</strong>'
: '<span class="cal-cta">Select a travel date</span>'; : '<span class="cal-cta">Select a travel date</span>';
} else if (!outDate) { } else if (!outDate) {
el.innerHTML = '<span class="cal-cta">Select departure date</span>'; el.innerHTML = '<span class="cal-cta">Select outbound date</span>';
} else if (retPhase) { } else if (retPhase) {
el.innerHTML = 'Depart: <strong>' + dispDate(outDate) + el.innerHTML = 'Outbound: <strong>' + dispDate(outDate) +
'</strong> &nbsp;&middot;&nbsp; <span class="cal-cta">Now select return date</span>'; '</strong> &nbsp;&middot;&nbsp; <span class="cal-cta">Now select return date</span>';
} else { } else {
el.innerHTML = 'Depart: <strong>' + dispDate(outDate) + el.innerHTML = 'Outbound: <strong>' + dispDate(outDate) +
'</strong> &nbsp;&middot;&nbsp; Return: <strong>' + dispDate(retDate) + '</strong>'; '</strong> &nbsp;&middot;&nbsp; Return: <strong>' + dispDate(retDate) + '</strong>';
} }
} }
@ -439,9 +439,11 @@
var wasReturn = isReturn; var wasReturn = isReturn;
isReturn = this.value === 'return'; isReturn = this.value === 'return';
if (isReturn && !wasReturn) { if (isReturn && !wasReturn) {
outDate = null;
retDate = null; retDate = null;
retPhase = outDate !== null; retPhase = false;
} else if (!isReturn) { } else if (!isReturn) {
if (!outDate) outDate = new Date(TODAY);
retDate = null; retDate = null;
retPhase = false; retPhase = false;
} }

View file

@ -506,6 +506,32 @@ def test_return_advance_first_standard_premier_totals(local_server: str) -> None
browser.close() browser.close()
def test_return_calendar_selects_outbound_before_return(local_server: str) -> None:
with sync_playwright() as p:
browser = _launch_browser(p)
page = browser.new_page()
page.goto(f"{local_server}/", wait_until="domcontentloaded")
page.locator("#journey-return").check(force=True)
assert page.locator("#cal-hint").inner_text() == "Select outbound date"
assert page.locator("#travel_date").input_value() == ""
assert page.locator("#return_date").input_value() == ""
page.get_by_role("button", name="10 June 2026").click()
assert page.locator("#travel_date").input_value() == "2026-06-10"
assert page.locator("#return_date").input_value() == ""
assert "Now select return date" in page.locator("#cal-hint").inner_text()
page.get_by_role("button", name="17 June 2026").click()
assert page.locator("#travel_date").input_value() == "2026-06-10"
assert page.locator("#return_date").input_value() == "2026-06-17"
assert "Return: Wed 17 Jun" in page.locator("#cal-hint").inner_text()
page.locator('button[type="submit"]').click()
page.wait_for_url("**/results/BRI/paris/2026-06-10/return/2026-06-17", timeout=10000)
browser.close()
def test_return_advance_first_standard_premier_totals_on_initial_url( def test_return_advance_first_standard_premier_totals_on_initial_url(
local_server: str, local_server: str,
) -> None: ) -> None: