diff --git a/templates/index.html b/templates/index.html
index 20882e8..8d29dfe 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -163,7 +163,7 @@
/* ── state ───────────────────────────────────────────────────────── */
let viewYear = TODAY.getFullYear();
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 hoverDate = null;
let isReturn = false;
@@ -409,12 +409,12 @@
? 'Date: ' + dispDate(outDate) + ''
: 'Select a travel date';
} else if (!outDate) {
- el.innerHTML = 'Select departure date';
+ el.innerHTML = 'Select outbound date';
} else if (retPhase) {
- el.innerHTML = 'Depart: ' + dispDate(outDate) +
+ el.innerHTML = 'Outbound: ' + dispDate(outDate) +
' · Now select return date';
} else {
- el.innerHTML = 'Depart: ' + dispDate(outDate) +
+ el.innerHTML = 'Outbound: ' + dispDate(outDate) +
' · Return: ' + dispDate(retDate) + '';
}
}
@@ -439,9 +439,11 @@
var wasReturn = isReturn;
isReturn = this.value === 'return';
if (isReturn && !wasReturn) {
+ outDate = null;
retDate = null;
- retPhase = outDate !== null;
+ retPhase = false;
} else if (!isReturn) {
+ if (!outDate) outDate = new Date(TODAY);
retDate = null;
retPhase = false;
}
diff --git a/tests/test_playwright_return_fares.py b/tests/test_playwright_return_fares.py
index ee4eeae..01205ff 100644
--- a/tests/test_playwright_return_fares.py
+++ b/tests/test_playwright_return_fares.py
@@ -506,6 +506,32 @@ def test_return_advance_first_standard_premier_totals(local_server: str) -> None
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(
local_server: str,
) -> None: