diff --git a/routes/email_routes.py b/routes/email_routes.py index f811b881e..56c3d6913 100644 --- a/routes/email_routes.py +++ b/routes/email_routes.py @@ -3860,14 +3860,24 @@ def setup_email_routes(): """List IMAP folders.""" if _fixture_email_enabled(): return {"folders": ["INBOX", "Archive", "Sent"], "sync": {"source": "fixture"}} - cached = None if refresh else _folder_cache_get(account_id, owner) + try: + cached_only_enabled = bool(int(cached_only or 0)) + except (TypeError, ValueError): + cached_only_enabled = False + if isinstance(refresh, str): + refresh_enabled = refresh.strip().lower() in {"1", "true", "yes", "on"} + elif isinstance(refresh, (bool, int)): + refresh_enabled = bool(refresh) + else: + refresh_enabled = False + cached = None if refresh_enabled else _folder_cache_get(account_id, owner) if cached is not None: payload = dict(cached) sync_meta = dict(payload.get("sync") or {}) sync_meta["source"] = "folder_cache" payload["sync"] = sync_meta return payload - if cached_only: + if cached_only_enabled: stale = _folder_cache_get_stale(account_id, owner) if stale: payload = dict(stale) diff --git a/tests/test_email_archive_fallback.py b/tests/test_email_archive_fallback.py index 8e51b8f10..adf7cd08b 100644 --- a/tests/test_email_archive_fallback.py +++ b/tests/test_email_archive_fallback.py @@ -236,7 +236,7 @@ async def test_list_folders_refresh_bypasses_stale_folder_cache(monkeypatch): def test_email_library_handles_archive_folder_setup_flow(): src = Path("static/js/emailLibrary.js").read_text(encoding="utf-8") - assert "import { folderDisplayName, isArchiveFolder, sortedFolders } from './emailInbox.js';" in src + assert "import { folderDisplayName, isArchiveFolder, sortedFolders } from './emailInbox.js" in src assert "_archiveEmailWithFallback" in src assert "needs_archive_folder" in src assert "No Archive folder was found for this account. Create one named" in src @@ -245,7 +245,8 @@ def test_email_library_handles_archive_folder_setup_flow(): assert "const result = await _archiveEmailWithFallback(em.uid)" in src assert "actions.findIndex(a => a.label === 'Move to Archive')" in src assert "const isArchiveCurrentFolder = isArchiveFolder(state._libFolder)" in src - assert "emailApiUrl('/api/email/folders', { refresh: refresh ? 1 : undefined })" in src + assert "cached_only: (live || refresh) ? undefined : 1" in src + assert "refresh: refresh ? 1 : undefined" in src assert "_loadFolders({ refresh: true })" in src assert "_loadFolders({ resetMissing: true, refresh: true })" in src