diff options
| author | eltrac <hi@eltr.ac> | 2026-10-10 14:14:27 +0800 |
|---|---|---|
| committer | eltrac <hi@eltr.ac> | 2026-10-10 14:14:27 +0800 |
| commit | 0ec1f8a43f9f6f4256d907632b9cebe5b453e324 (patch) | |
| tree | d6d849679cfaac8bba7545393625d4f4935f8188 | |
| parent | 373cf213d54f15d3f4dfa374bed2fdff5b2ba745 (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
| -rw-r--r-- | src/weepinbell/core.clj | 2 | ||||
| -rw-r--r-- | test/weepinbell/config_test.clj | 15 | ||||
| -rw-r--r-- | test/weepinbell/core_test.clj | 9 | ||||
| -rw-r--r-- | test/weepinbell/handler_test.clj | 14 | ||||
| -rw-r--r-- | test/weepinbell/receiver_test.clj | 4 | ||||
| -rw-r--r-- | test/weepinbell/webserver_test.clj | 19 |
6 files changed, 61 insertions, 2 deletions
diff --git a/src/weepinbell/core.clj b/src/weepinbell/core.clj index 98d5d04..edc3918 100644 --- a/src/weepinbell/core.clj +++ b/src/weepinbell/core.clj @@ -42,7 +42,7 @@ {:wmc wmc :store store :config config})] - (fn [] (stop-processor) (stop-webserver)))) + (fn [] (stop-processor) (stop-webserver) true))) ; Entry point; Terminal user interface ;; start up system and wait for signals to perform graceful shutdown 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)))))))
|
