Trek_CN/server/tests/unit/services
jubnl 9c2decb095
fix(maps): reduce Google Places API quota usage with persistent caching
P0 — stop the bleeding:
- Honor place.image_url in MapView and TripPlannerPage to skip redundant fetchPhoto calls
- Trim Place Details field mask (drop reviews/editorialSummary from default; new getPlaceDetailsExpanded for inspector)
- Admin toggle places_photos_enabled (default ON) to kill Google photo fetches under quota pressure; Wikimedia unaffected
- Return { photoUrl: null } instead of 204 so client handles disabled state cleanly

P1 — structural fix:
- New placePhotoCache service: persistent disk cache at uploads/photos/google/<sha1>.jpg, atomic writes, stampede dedup via in-flight Map
- Migrations 105-107: google_place_photo_meta table, place_details_cache table, backfill signed Google URLs to stable proxy URLs
- getPlacePhoto rewrites to fetch image bytes directly, store on disk, return /api/maps/place-photo/:id/bytes proxy URL
- Stable proxy URLs written to places.image_url — survive container restarts, no expiry
- New GET /api/maps/place-photo/:placeId/bytes route serving cached files with long-lived Cache-Control
- Place Details DB row cache with 7-day TTL; ?refresh=1 escape hatch
- photoService fast-path: proxy URLs bypass the mapsApi round-trip and go straight to urlToBase64

Bug fixes:
- MapView now requests base64 thumbs for places with proxy image_url (markers were showing color fallback)
- createPlaceIcon accepts /api/maps/place-photo/ URLs as interim fallback while thumb generates
- setSelectedAssignmentId ReferenceError in mobile day-detail handler (use selectAssignment)
- Remove redundant decodeURIComponent on already-decoded Express route param
- Use SHA1 hash for disk filenames to prevent coords:lat:lng pseudo-ID collisions
- Add checkSsrf guard to Wikimedia byte fetch
- Tighten migration 107 LIKE filter to avoid rewriting manually-pasted Google image URLs
- Validate enabled is boolean on PUT /admin/places-photos
- Drop aggressive iconCache.clear() on every thumb arrival

Observability:
- googleFetch() wrapper counts and debug-logs every outbound Google API call with running total
2026-04-17 19:07:39 +02:00
..
adminService.test.ts fix(tests): update tests for granular auth toggles 2026-04-11 20:33:51 +02:00
apiKeyCrypto.test.ts Add comprehensive backend test suite (#339) 2026-04-03 13:17:53 +02:00
atlasService.test.ts fix(tests): update test helpers and assertions for migration-98 photo schema 2026-04-14 13:54:48 +02:00
auditLog.test.ts Add comprehensive backend test suite (#339) 2026-04-03 13:17:53 +02:00
authService.test.ts Add comprehensive backend test suite (#339) 2026-04-03 13:17:53 +02:00
authServiceDb.test.ts feat(auth): split OIDC_ONLY into granular auth toggles 2026-04-11 20:21:36 +02:00
backupService.test.ts fix(notifications): fix SMTP error surfacing, webhook button label, backup timestamp 2026-04-14 16:20:52 +02:00
budgetService.test.ts test: apply suite review improvements (01–11) 2026-04-06 20:08:13 +02:00
categoryService.test.ts test: expand test suite to 87.3% backend coverage 2026-04-06 20:08:30 +02:00
collabService.test.ts test: add comprehensive coverage for OAuth scopes, MCP, and core services 2026-04-11 14:08:09 +02:00
cookie.test.ts test: update cookie test to match sameSite lax change 2026-04-03 14:42:48 +02:00
dayService.test.ts test: expand test suite to 87.3% backend coverage 2026-04-06 20:08:30 +02:00
ephemeralTokens.test.ts test: expand test suite to 87.3% backend coverage 2026-04-06 20:08:30 +02:00
inAppNotificationActions.test.ts test: apply suite review improvements (01–11) 2026-04-06 20:08:13 +02:00
inAppNotificationPrefs.test.ts feat(notifications): add unified multi-channel notification system 2026-04-05 01:22:18 +02:00
journeyService.test.ts fix(journey): fix issue #704 — active logic, archive, places rename, search, trip reminders 2026-04-17 16:59:23 +02:00
journeyShareService.test.ts fix(journey): fix issue #704 — active logic, archive, places rename, search, trip reminders 2026-04-17 16:59:23 +02:00
kmlImportUtils.test.ts feat(places): unified file import modal with drag-and-drop and deduplication 2026-04-15 06:07:26 +02:00
kmzUnpack.test.ts fix(kml-import): address PR #488 review issues 2026-04-15 05:16:47 +02:00
mapsService.test.ts fix(maps): reduce Google Places API quota usage with persistent caching 2026-04-17 19:07:39 +02:00
memoriesHelpers.test.ts test: add comprehensive coverage for OAuth scopes, MCP, and core services 2026-04-11 14:08:09 +02:00
memoriesUnified.test.ts test: add comprehensive coverage for OAuth scopes, MCP, and core services 2026-04-11 14:08:09 +02:00
mfaCrypto.test.ts Add comprehensive backend test suite (#339) 2026-04-03 13:17:53 +02:00
migration.test.ts feat(notifications): add unified multi-channel notification system 2026-04-05 01:22:18 +02:00
notificationPreferencesService.test.ts feat(notifications): add ntfy as a first-class notification channel 2026-04-15 13:59:25 +02:00
notifications.test.ts feat(notifications): add ntfy as a first-class notification channel 2026-04-15 13:59:25 +02:00
notificationService.test.ts feat(notifications): add ntfy as a first-class notification channel 2026-04-15 13:59:25 +02:00
oauthService.test.ts security(oauth): harden OAuth 2.1/MCP implementation (Critical + High + Medium findings) 2026-04-10 02:03:27 +02:00
oidcService.test.ts test: add comprehensive coverage for OAuth scopes, MCP, and core services 2026-04-11 14:08:09 +02:00
packingService.test.ts test: expand test suite to 87.3% backend coverage 2026-04-06 20:08:30 +02:00
passwordPolicy.test.ts Add comprehensive backend test suite (#339) 2026-04-03 13:17:53 +02:00
permissions.test.ts test: expand test suite to 87.3% backend coverage 2026-04-06 20:08:30 +02:00
placeService.test.ts feat(places): unified file import modal with drag-and-drop and deduplication 2026-04-15 06:07:26 +02:00
queryHelpers.test.ts test: apply suite review improvements (01–11) 2026-04-06 20:08:13 +02:00
settingsService.test.ts test: expand test suite to 87.3% backend coverage 2026-04-06 20:08:30 +02:00
tagService.test.ts test: expand test suite to 87.3% backend coverage 2026-04-06 20:08:30 +02:00
todoService.test.ts test: expand test suite to 87.3% backend coverage 2026-04-06 20:08:30 +02:00
tripService.test.ts fix(trips): preserve day content when trip date range changes 2026-04-15 01:28:53 +02:00
vacayService.test.ts test: expand test suite to 87.3% backend coverage 2026-04-06 20:08:30 +02:00
versionNotification.test.ts fix: restore broken tests after prerelease workflow refactor 2026-04-12 17:19:24 +02:00
weatherService.test.ts test: expand test suite to 87.3% backend coverage 2026-04-06 20:08:30 +02:00