diff options
| author | Craig Jennings <c@cjennings.net> | 2026-04-04 13:24:01 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-04-04 13:24:01 -0500 |
| commit | 752e2f825b1ee3eb513e27f2c03bcaef30eec767 (patch) | |
| tree | ebcc6628d778489b2c6c45e80d429499fcfaebf1 /tests/test-wttrin--get-cached-or-fetch.el | |
| parent | 821c7c1ded6bef400dcfda9aec27832f116ce369 (diff) | |
| download | emacs-wttrin-752e2f825b1ee3eb513e27f2c03bcaef30eec767.tar.gz emacs-wttrin-752e2f825b1ee3eb513e27f2c03bcaef30eec767.zip | |
fix: cache timestamp reflects request time, not response time
float-time was captured in the outer let* before the async fetch.
The callback used this stale value, making cache entries appear
slightly older than they are. Move the float-time call into the
callback so the timestamp reflects when the data actually arrived.
Diffstat (limited to 'tests/test-wttrin--get-cached-or-fetch.el')
| -rw-r--r-- | tests/test-wttrin--get-cached-or-fetch.el | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/test-wttrin--get-cached-or-fetch.el b/tests/test-wttrin--get-cached-or-fetch.el index fa6b9d0..75b4e8b 100644 --- a/tests/test-wttrin--get-cached-or-fetch.el +++ b/tests/test-wttrin--get-cached-or-fetch.el @@ -328,5 +328,33 @@ Proactive refresh keeps data fresh; on-demand reads always use cache." (should (equal callback-result test-wttrin--get-cached-or-fetch-new-weather)))) (test-wttrin--get-cached-or-fetch-teardown))) +(ert-deftest test-wttrin--get-cached-or-fetch-normal-timestamp-reflects-response-time () + "Cache timestamp should reflect when the response arrived, not when +the request was initiated. A stale request-time timestamp would make +the cached data appear older than it actually is." + (test-wttrin--get-cached-or-fetch-setup) + (unwind-protect + (let* ((location "Paris") + (cache-key (wttrin--make-cache-key location)) + (response-time 5000.0)) + (cl-letf (((symbol-function 'float-time) + (lambda () response-time)) + ((symbol-function 'wttrin-fetch-raw-string) + (lambda (_query callback) + ;; Simulate time passing: response arrives later + (setq response-time 5005.0) + (funcall callback "fresh data"))) + ((symbol-function 'wttrin--cleanup-cache-if-needed) + (lambda () nil))) + (let ((wttrin--force-refresh t)) + (wttrin--get-cached-or-fetch + location + (lambda (_data) nil))) + ;; Timestamp should be 5005 (when callback ran), not 5000 (when request started) + (let ((cached (gethash cache-key wttrin--cache))) + (should cached) + (should (= (car cached) 5005.0))))) + (test-wttrin--get-cached-or-fetch-teardown))) + (provide 'test-wttrin--get-cached-or-fetch) ;;; test-wttrin--get-cached-or-fetch.el ends here |
