summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-10-10 14:14:27 +0800
committereltrac <hi@eltr.ac>2026-10-10 14:14:27 +0800
commit0ec1f8a43f9f6f4256d907632b9cebe5b453e324 (patch)
treed6d849679cfaac8bba7545393625d4f4935f8188 /test
parent373cf213d54f15d3f4dfa374bed2fdff5b2ba745 (diff)
test: cover config, core, webserver; add edge cases in existing tests
- test loading and merging config - test start-system and graceful shutdown - test /endpoint and /api/send - test receiver handling nil input - test webserver startup and graceful shutdown
Diffstat (limited to 'test')
-rw-r--r--test/weepinbell/config_test.clj15
-rw-r--r--test/weepinbell/core_test.clj9
-rw-r--r--test/weepinbell/handler_test.clj14
-rw-r--r--test/weepinbell/receiver_test.clj4
-rw-r--r--test/weepinbell/webserver_test.clj19
5 files changed, 60 insertions, 1 deletions
diff --git a/test/weepinbell/config_test.clj b/test/weepinbell/config_test.clj
new file mode 100644
index 0000000..824f91a
--- /dev/null
+++ b/test/weepinbell/config_test.clj
@@ -0,0 +1,15 @@
+(ns weepinbell.config-test
+ (:require [weepinbell.config :refer [load-config]]
+ [clojure.java.io :as io]
+ [clojure.test :refer [deftest testing is]]))
+
+(deftest config-load-test
+ (testing "Config file merged with default config"
+ (let [external-config {:port 4000}
+ config-file "tmp/config.tmp.edn"]
+ (spit config-file external-config)
+ (let [config (load-config config-file)]
+ (is (= (:port config) (:port external-config)))
+ (is (= (:endpoint config) "/endpoint")))
+ (io/delete-file config-file))))
+
diff --git a/test/weepinbell/core_test.clj b/test/weepinbell/core_test.clj
new file mode 100644
index 0000000..4e7ebd8
--- /dev/null
+++ b/test/weepinbell/core_test.clj
@@ -0,0 +1,9 @@
+(ns weepinbell.core-test
+ (:require [clojure.test :refer [deftest testing is]]
+ [weepinbell.core :refer [start-system]]))
+
+(deftest start-system-test
+ (testing "system starts and shuts down normally"
+ (let [shutdown (start-system)]
+ (is (fn? shutdown))
+ (is (true? (shutdown))))))
diff --git a/test/weepinbell/handler_test.clj b/test/weepinbell/handler_test.clj
index 8b6aa84..22697b5 100644
--- a/test/weepinbell/handler_test.clj
+++ b/test/weepinbell/handler_test.clj
@@ -3,6 +3,7 @@
[ring.mock.request :as mock]
[weepinbell.webserver.handler :refer [app]]
[weepinbell.webserver.facade :refer [make-services]]
+ [clojure.core.async :refer [chan poll!]]
[cheshire.core :refer [parse-string]]))
(defn test-app [wmc store config]
@@ -96,3 +97,16 @@
(let [response ((test-app nil nil {}) (mock/request :get "/invalid"))]
(is (= (:status response) 404)))))
+(deftest receiver-endpoint-test
+ (testing "/endpoint and /api/send should receive valid webmention and return 201"
+ (let [test-chan (chan)
+ app (test-app test-chan nil {:endpoint "/endpoint"
+ :allowed-target-domains ["www.target.net"]})
+ payload {:source "https://a.validsource.com"
+ :target "https://www.target.net"}
+ resp-a (app (mock/request :post "/endpoint" payload))
+ resp-b (app (mock/request :post "/api/send" payload))]
+ (is (= 201 (:status resp-a)))
+ (is (= 201 (:status resp-b)))
+ (is (every? some? (repeatedly 2 #(poll! test-chan)))))))
+
diff --git a/test/weepinbell/receiver_test.clj b/test/weepinbell/receiver_test.clj
index 9a75462..06c2ce9 100644
--- a/test/weepinbell/receiver_test.clj
+++ b/test/weepinbell/receiver_test.clj
@@ -44,7 +44,9 @@
["https://alice.blog/article/abc#anchor" "https://alice.blog/article/abc" (wrap-400-msg :identical)]
["https://alice.blog/article/abc?a=1&b=2" "https://alice.blog/article/abc?b=2&a=1" (wrap-400-msg :identical)]
;; domain not allowed
- ["https://bob.blog/post/123" "https://chris.blog/archive/xxx" (wrap-400-msg :domain-not-allowed)]])
+ ["https://bob.blog/post/123" "https://chris.blog/archive/xxx" (wrap-400-msg :domain-not-allowed)]
+ ;; nil input
+ [nil nil (wrap-400-msg :invalid-url)]])
;; end define test cases
;; webmention queue for testing
diff --git a/test/weepinbell/webserver_test.clj b/test/weepinbell/webserver_test.clj
new file mode 100644
index 0000000..e78a812
--- /dev/null
+++ b/test/weepinbell/webserver_test.clj
@@ -0,0 +1,19 @@
+(ns weepinbell.webserver-test
+ (:require [clojure.test :refer [deftest testing is]]
+ [clojure.core.async :refer [chan]]
+ [weepinbell.webserver.facade :refer [start-webserver]]
+ [weepinbell.http.client :as client]))
+
+(deftest webserver-start-test
+ (testing "Webserver should start and perform a graceful shutdown normally"
+ (let [port "48080"
+ server-meta {:wmc (chan)
+ :store {:append (fn [_])
+ :update (fn [_])
+ :delete (fn [_])
+ :get (fn [_])}
+ :config {:port port}}
+ stop (start-webserver server-meta)]
+ (is (not (:error (client/get! (str "http://localhost:" port)))))
+ (stop)
+ (is (:error (client/get! (str "http://localhost:" port)))))))