aboutsummaryrefslogtreecommitdiff
path: root/tests/test-wttrin--mode-line-update-display.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-26 10:53:18 -0400
committerCraig Jennings <c@cjennings.net>2026-06-26 10:53:18 -0400
commit55ee8158a1f85bb532a24d752f9ef409192a924c (patch)
tree417ee476e2dfa75c75e2ce2a4e99f77e36ccdac2 /tests/test-wttrin--mode-line-update-display.el
parent7027cccea9eb7170ea0f08e1def3f979f2e59932 (diff)
downloademacs-wttrin-55ee8158a1f85bb532a24d752f9ef409192a924c.tar.gz
emacs-wttrin-55ee8158a1f85bb532a24d752f9ef409192a924c.zip
feat: add named-locations directory with display names
A saved location carries a display name distinct from its query target ("Mom's House" maps to coordinates or an address), stored in a savehist-persisted wttrin-saved-locations alist. The name shows everywhere the place appears (picker, buffer header, mode-line tooltip) while wttr.in is still queried by the target. Management commands wttrin-save-location, wttrin-rename-location, and wttrin-remove-location edit the directory, with refuse-on-collision rename and a favorite-fallback warning on remove. In the weather buffer, s/r/x reach those commands and d names a detected location before promoting it to the default. The footer is two columns: a "This view" column (another, refresh, quit) and a "Saved locations" column (save, make default, rename, remove). The buffer anchors to the top so the forecast isn't scrolled out of view in a short window. The mode-line follows favorite changes immediately rather than waiting for the next scheduled fetch, and its hover tooltip shows the saved name instead of the raw query. History holds named entries only: raw coordinate detections and saved names stay out of it.
Diffstat (limited to 'tests/test-wttrin--mode-line-update-display.el')
-rw-r--r--tests/test-wttrin--mode-line-update-display.el24
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/test-wttrin--mode-line-update-display.el b/tests/test-wttrin--mode-line-update-display.el
index 721517e..be066e7 100644
--- a/tests/test-wttrin--mode-line-update-display.el
+++ b/tests/test-wttrin--mode-line-update-display.el
@@ -252,6 +252,30 @@ trigger an emoji re-render so dimming matches the tooltip's staleness state."
(should wttrin-mode-line-string)))
(test-wttrin--mode-line-update-display-teardown)))
+(ert-deftest test-wttrin--mode-line-fetch-weather-normal-saved-name-shown-in-cache ()
+ "Normal: a saved-name favorite caches its display name, not the resolved query.
+The query (coordinates or an address) drives the fetch, but the hover tooltip
+should read the friendly name the user gave the place."
+ (test-wttrin--mode-line-update-display-setup)
+ (unwind-protect
+ (let ((wttrin-saved-locations '(("Mom's House" . "40.71,-74.01")))
+ (wttrin-favorite-location "Mom's House"))
+ (testutil-wttrin-mock-http-response "40.71,-74.01: ☀️ +70°F Cloudy"
+ (wttrin--mode-line-fetch-weather)
+ (should (string-prefix-p "Mom's House:" (cdr wttrin--mode-line-cache)))))
+ (test-wttrin--mode-line-update-display-teardown)))
+
+(ert-deftest test-wttrin--mode-line-fetch-weather-boundary-plain-location-unchanged ()
+ "Boundary: a plain (non-saved) favorite still caches its own name as the prefix."
+ (test-wttrin--mode-line-update-display-setup)
+ (unwind-protect
+ (let ((wttrin-saved-locations nil)
+ (wttrin-favorite-location "Paris"))
+ (testutil-wttrin-mock-http-response "Paris: ☀️ +61°F Clear"
+ (wttrin--mode-line-fetch-weather)
+ (should (string-prefix-p "Paris:" (cdr wttrin--mode-line-cache)))))
+ (test-wttrin--mode-line-update-display-teardown)))
+
(ert-deftest test-wttrin--mode-line-fetch-weather-error-empty-response-keeps-previous ()
"Empty API response does not overwrite previous valid cache."
(test-wttrin--mode-line-update-display-setup)