From bc0919fd2fce876172c644fdb0cdba98495e4142 Mon Sep 17 00:00:00 2001 From: eltrac Date: Sat, 24 Oct 2026 16:15:07 +0800 Subject: retriever: fix not parsing numeric string to number before paging #79 --- src/weepinbell/webserver/retriever.clj | 5 ++++- test/weepinbell/retriever_test.clj | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/weepinbell/webserver/retriever.clj b/src/weepinbell/webserver/retriever.clj index 5be9e0c..e8b4485 100644 --- a/src/weepinbell/webserver/retriever.clj +++ b/src/weepinbell/webserver/retriever.clj @@ -41,7 +41,7 @@ (mftype= mftype)))) (map last)))) -(defn- paging [page page-size data] +(defn- paging [^Long page ^Long page-size data] (if (nil? page) data (let [pages (vec (partition-all (or page-size default-page-size) @@ -67,6 +67,9 @@ {:pre [(s/keys :req-un [::domain ::path ::page ::page-size ::storage ::mftype])]} [opts] (let [{:keys [domain path page page-size storage mftype]} opts + ;; parse to number if possible, use original if not + page (try (Long/parseLong page) (catch Exception _ page)) + ;; data trasformations data ((:get-by-domain storage path) domain) data (filter-by-mftype mftype data) data (paging page page-size data) diff --git a/test/weepinbell/retriever_test.clj b/test/weepinbell/retriever_test.clj index c4044ed..98102ef 100644 --- a/test/weepinbell/retriever_test.clj +++ b/test/weepinbell/retriever_test.clj @@ -13,6 +13,14 @@ resp1 (ret/by-domain "" 1 mock-store {})] (is (= page-size (count (:body resp0)))) (is (= page-size (count (:body resp1))))))) + (testing "by-domain: if page is a string that can be parsed to number, it should work" + (with-redefs [weepinbell.webserver.retriever/default-page-size page-size] + (let [mock-data [{:webmention {:source "1" :target "1"}} + {:webmention {:source "2" :target "2"}}] + mock-store {:get-by-domain (fn [& _] mock-data)} + resp0 (ret/by-domain "" "0" mock-store {}) + resp1 (ret/by-domain "" 0 mock-store {})] + (is (= resp0 resp1))))) (testing "by-domain: if page is not number, return the last page frame" (with-redefs [weepinbell.webserver.retriever/default-page-size page-size] (let [mock-data [{:webmention {:source "1" :target "1"}} -- cgit v1.2.3