aboutsummaryrefslogtreecommitdiff
path: root/tests/test-wttrin--make-cache-key.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2025-11-08 10:34:56 -0600
committerCraig Jennings <c@cjennings.net>2025-11-08 10:34:56 -0600
commit31649f588dbc0098b6641222403f68107819f34f (patch)
tree75c180ea2152d43504b63c2597d15e1306bda7ce /tests/test-wttrin--make-cache-key.el
parent44d48bad4d317ce8fd9361314d349b1256e6c25b (diff)
downloademacs-wttrin-31649f588dbc0098b6641222403f68107819f34f.tar.gz
emacs-wttrin-31649f588dbc0098b6641222403f68107819f34f.zip
test: core: enhance ERT tests for pure functions
- Enhanced test-wttrin-additional-url-params with clearer test organization - Enhanced test-wttrin--build-url with comprehensive boundary and error cases - Added tests for Unicode, special characters, GPS coordinates, domains - Fixed domain name test to check for URL-encoded @ symbol (%40) - Enhanced test-wttrin--make-cache-key with extensive boundary tests - Critical test: same location with different units produces different keys - Added tests for special chars, Unicode, empty strings, pipe characters All 29 tests for these three pure functions now pass (6 + 12 + 11) Combined with wttrin--fetch-url tests: 38 total tests passing
Diffstat (limited to 'tests/test-wttrin--make-cache-key.el')
-rw-r--r--tests/test-wttrin--make-cache-key.el115
1 files changed, 70 insertions, 45 deletions
diff --git a/tests/test-wttrin--make-cache-key.el b/tests/test-wttrin--make-cache-key.el
index 442c548..ad2238d 100644
--- a/tests/test-wttrin--make-cache-key.el
+++ b/tests/test-wttrin--make-cache-key.el
@@ -1,69 +1,94 @@
;;; test-wttrin--make-cache-key.el --- Tests for wttrin--make-cache-key -*- lexical-binding: t; -*-
-;; Copyright (C) 2025 Craig Jennings
+;; Copyright (C) 2024 Craig Jennings
;;; Commentary:
-
;; Unit tests for wttrin--make-cache-key function.
-;; Tests cache key generation from location and unit system.
+;; Tests cache key generation to ensure different configurations produce different keys.
;;; Code:
(require 'ert)
(require 'wttrin)
-(require 'testutil-wttrin)
;;; Normal Cases
-(ert-deftest test-wttrin--make-cache-key-normal-location-with-metric-returns-key ()
- "Test that location with metric unit system creates correct cache key."
- (testutil-wttrin-with-unit-system "m"
- (should (equal "Paris|m" (wttrin--make-cache-key "Paris")))))
-
-(ert-deftest test-wttrin--make-cache-key-normal-location-with-uscs-returns-key ()
- "Test that location with USCS unit system creates correct cache key."
- (testutil-wttrin-with-unit-system "u"
- (should (equal "New York|u" (wttrin--make-cache-key "New York")))))
-
-(ert-deftest test-wttrin--make-cache-key-normal-location-no-unit-returns-default ()
- "Test that location with no unit system uses default in cache key."
- (testutil-wttrin-with-unit-system nil
- (should (equal "London|default" (wttrin--make-cache-key "London")))))
+(ert-deftest test-wttrin--make-cache-key-normal-location-with-metric ()
+ "Test cache key generation with metric unit system."
+ (let ((wttrin-unit-system "m"))
+ (should (string= "Paris|m" (wttrin--make-cache-key "Paris")))))
-;;; Boundary Cases
-
-(ert-deftest test-wttrin--make-cache-key-boundary-empty-location-returns-key ()
- "Test that empty location string creates cache key."
- (testutil-wttrin-with-unit-system "m"
- (should (equal "|m" (wttrin--make-cache-key "")))))
+(ert-deftest test-wttrin--make-cache-key-normal-location-with-imperial ()
+ "Test cache key generation with USCS/imperial unit system."
+ (let ((wttrin-unit-system "u"))
+ (should (string= "London|u" (wttrin--make-cache-key "London")))))
-(ert-deftest test-wttrin--make-cache-key-boundary-location-with-spaces-returns-key ()
- "Test that location with spaces creates correct cache key."
- (testutil-wttrin-with-unit-system "m"
- (should (equal "New York, NY|m" (wttrin--make-cache-key "New York, NY")))))
+(ert-deftest test-wttrin--make-cache-key-normal-location-with-nil-system ()
+ "Test cache key generation with nil unit system (default)."
+ (let ((wttrin-unit-system nil))
+ (should (string= "Tokyo|default" (wttrin--make-cache-key "Tokyo")))))
-(ert-deftest test-wttrin--make-cache-key-boundary-location-with-commas-returns-key ()
- "Test that location with commas creates correct cache key."
- (testutil-wttrin-with-unit-system nil
- (should (equal "Berlin, DE|default" (wttrin--make-cache-key "Berlin, DE")))))
+(ert-deftest test-wttrin--make-cache-key-normal-different-locations-different-keys ()
+ "Test that different locations produce different cache keys."
+ (let ((wttrin-unit-system "m"))
+ (should-not (string= (wttrin--make-cache-key "Paris")
+ (wttrin--make-cache-key "London")))))
-(ert-deftest test-wttrin--make-cache-key-boundary-unicode-location-returns-key ()
- "Test that Unicode location creates correct cache key."
- (testutil-wttrin-with-unit-system "m"
- (should (equal "東京|m" (wttrin--make-cache-key "東京")))))
+;;; Boundary Cases
-(ert-deftest test-wttrin--make-cache-key-boundary-location-with-special-chars-returns-key ()
- "Test that location with special characters creates cache key."
- (testutil-wttrin-with-unit-system "m"
- (should (equal "~Eiffel+Tower|m" (wttrin--make-cache-key "~Eiffel+Tower")))))
+(ert-deftest test-wttrin--make-cache-key-boundary-same-location-different-units ()
+ "Test that same location with different unit systems produces different keys.
+This is critical - cache misses would occur if keys were the same."
+ (let* ((location "Paris")
+ (key-metric (let ((wttrin-unit-system "m"))
+ (wttrin--make-cache-key location)))
+ (key-imperial (let ((wttrin-unit-system "u"))
+ (wttrin--make-cache-key location)))
+ (key-default (let ((wttrin-unit-system nil))
+ (wttrin--make-cache-key location))))
+ (should-not (string= key-metric key-imperial))
+ (should-not (string= key-metric key-default))
+ (should-not (string= key-imperial key-default))))
+
+(ert-deftest test-wttrin--make-cache-key-boundary-location-with-special-chars ()
+ "Test cache key generation with special characters in location."
+ (let ((wttrin-unit-system "m"))
+ (should (string= "São Paulo|m" (wttrin--make-cache-key "São Paulo")))))
+
+(ert-deftest test-wttrin--make-cache-key-boundary-location-with-unicode ()
+ "Test cache key generation with Unicode characters."
+ (let ((wttrin-unit-system nil))
+ (should (string= "北京|default" (wttrin--make-cache-key "北京")))))
+
+(ert-deftest test-wttrin--make-cache-key-boundary-location-with-comma ()
+ "Test cache key generation with comma in location (e.g., 'City, Country')."
+ (let ((wttrin-unit-system "m"))
+ (should (string= "London, GB|m" (wttrin--make-cache-key "London, GB")))))
+
+(ert-deftest test-wttrin--make-cache-key-boundary-empty-string-location ()
+ "Test cache key generation with empty string location."
+ (let ((wttrin-unit-system "m"))
+ (should (string= "|m" (wttrin--make-cache-key "")))))
+
+(ert-deftest test-wttrin--make-cache-key-boundary-location-with-pipe-char ()
+ "Test cache key with location containing pipe character (separator).
+This could potentially cause cache key parsing issues."
+ (let ((wttrin-unit-system "m"))
+ (let ((key (wttrin--make-cache-key "Test|Location")))
+ (should (string-match-p "|" key))
+ ;; Should contain TWO pipe characters: one from location, one as separator
+ (should (= 2 (cl-count ?| key))))))
;;; Error Cases
-(ert-deftest test-wttrin--make-cache-key-error-nil-location-returns-key ()
- "Test that nil location creates cache key with empty string."
- ;; Note: concat converts nil to empty string, this documents current behavior
- (testutil-wttrin-with-unit-system "m"
- (should (equal "|m" (wttrin--make-cache-key nil)))))
+(ert-deftest test-wttrin--make-cache-key-error-consistent-keys ()
+ "Test that calling with same inputs always produces same key (idempotent)."
+ (let ((wttrin-unit-system "m"))
+ (let ((key1 (wttrin--make-cache-key "Paris"))
+ (key2 (wttrin--make-cache-key "Paris"))
+ (key3 (wttrin--make-cache-key "Paris")))
+ (should (string= key1 key2))
+ (should (string= key2 key3)))))
(provide 'test-wttrin--make-cache-key)
;;; test-wttrin--make-cache-key.el ends here