summaryrefslogtreecommitdiff
path: root/tests/test-wttrin--extract-response-body.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-04-04 16:32:16 -0500
committerCraig Jennings <c@cjennings.net>2026-04-04 16:32:16 -0500
commit73c81a00a10766900318d86640249d1b54c6b351 (patch)
tree793f9c858060591c34813af05e84c7a6a5442153 /tests/test-wttrin--extract-response-body.el
parenta77a7b86f45ae96ff1802ea6f8b87dafd46b17b0 (diff)
downloademacs-wttrin-73c81a00a10766900318d86640249d1b54c6b351.tar.gz
emacs-wttrin-73c81a00a10766900318d86640249d1b54c6b351.zip
feat: specific error messages for fetch failures
Add HTTP status code checking (wttrin--extract-http-status) and pass error descriptions through the callback chain so users see "Location not found (HTTP 404)" or "Network error — check your connection" instead of the generic "Perhaps the location was misspelled?" for every failure. Also fix pre-existing bug where the condition-case error handler in extract-response-body killed an unrelated buffer after unwind-protect already cleaned up. 330 tests (was 307), all passing.
Diffstat (limited to 'tests/test-wttrin--extract-response-body.el')
-rw-r--r--tests/test-wttrin--extract-response-body.el28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/test-wttrin--extract-response-body.el b/tests/test-wttrin--extract-response-body.el
index 8dcf2d2..8e6686c 100644
--- a/tests/test-wttrin--extract-response-body.el
+++ b/tests/test-wttrin--extract-response-body.el
@@ -163,5 +163,33 @@
(should-not (buffer-live-p test-buffer))))
(should (string= "data" result))))
+;;; HTTP Status Code Handling
+;; Note: wttrin--extract-response-body kills its buffer, so we capture
+;; the result via a let binding before the buffer disappears.
+
+(ert-deftest test-wttrin--extract-response-body-error-404-returns-nil ()
+ "A 404 response should return nil — the location doesn't exist."
+ (let (result)
+ (with-current-buffer (generate-new-buffer " *test-404*")
+ (insert "HTTP/1.1 404 Not Found\r\nContent-Type: text/plain\r\n\r\nPage not found")
+ (setq result (wttrin--extract-response-body)))
+ (should-not result)))
+
+(ert-deftest test-wttrin--extract-response-body-error-500-returns-nil ()
+ "A 500 response should return nil — the server is broken."
+ (let (result)
+ (with-current-buffer (generate-new-buffer " *test-500*")
+ (insert "HTTP/1.1 500 Internal Server Error\r\n\r\nServer error")
+ (setq result (wttrin--extract-response-body)))
+ (should-not result)))
+
+(ert-deftest test-wttrin--extract-response-body-normal-200-still-returns-body ()
+ "A 200 response should still extract and return the body as before."
+ (let (result)
+ (with-current-buffer (generate-new-buffer " *test-200*")
+ (insert "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nWeather data here")
+ (setq result (wttrin--extract-response-body)))
+ (should (equal result "Weather data here"))))
+
(provide 'test-wttrin--extract-response-body)
;;; test-wttrin--extract-response-body.el ends here