babashka/test-resources/lib_tests/httpkit/client_test.clj
Bob cf01d7f24d
#1438: httpkit.client functions (#1439)
* expose query-string function from org.httpkit.client

* add url-encode from httpkit client ns

* cleanup and changelog
2022-12-06 11:01:52 +01:00

71 lines
2.6 KiB
Clojure

(ns httpkit.client-test
(:require [cheshire.core :as json]
[clojure.test :refer [deftest is testing #_*report-counters*]]
[org.httpkit.client :as client]))
(defmethod clojure.test/report :begin-test-var [m]
(println "===" (-> m :var meta :name))
(println))
#_(defmethod clojure.test/report :end-test-var [_m]
(let [{:keys [:fail :error]} @*report-counters*]
(when (and (= "true" (System/getenv "BABASHKA_FAIL_FAST"))
(or (pos? fail) (pos? error)))
(println "=== Failing fast")
(System/exit 1))))
(deftest get-test
(is (= 200 (:status @(client/get "https://postman-echo.com/get"))))
(is (= "https://postman-echo.com/get"
(-> @(client/get "https://postman-echo.com/get"
{:headers {"Accept" "application/json"}})
:body
(json/parse-string true)
:url)))
(testing "query params"
(is (= {:foo1 "bar1", :foo2 "bar2"}
(-> @(client/get "https://postman-echo.com/get" {:query-params {"foo1" "bar1" "foo2" "bar2"}})
:body
(json/parse-string true)
:args)))))
(deftest delete-test
(is (= 200 (:status @(client/delete "https://postman-echo.com/delete")))))
(deftest head-test
(is (= 200 (:status @(client/head "https://postman-echo.com/head")))))
(deftest basic-auth-test
(is (re-find #"authenticated.*true"
(:body
@(client/get "https://postman-echo.com/basic-auth"
{:basic-auth ["postman" "password"]})))))
;; commented out because of httpstat.us instability
#_(deftest get-response-object-test
(let [response @(client/get "https://httpstat.us/200" {:timeout 3000})]
(is (map? response))
(is (= 200 (:status response)))
(is (string? (get-in response [:headers :server]))))
(testing "response object as stream"
(let [response @(client/get "https://httpstat.us/200" {:as :stream :timeout 3000})]
(is (map? response))
(is (= 200 (:status response)))
(is (instance? java.io.InputStream (:body response))))))
(require '[org.httpkit.sni-client :as sni])
(deftest alter-var-root-test
(is (alter-var-root (var client/*default-client*) (constantly sni/default-client))))
(deftest query-string-test
(is (= (client/query-string {:k1 "v1" :k2 "v2" :k3 nil :k4 ["v4a" "v4b"] :k5 []})
"k1=v1&k2=v2&k3=&k4=v4a&k4=v4b&k5="))
(is (= (client/query-string {:k1 \v :k2 'v2})
"k1=v&k2=v2")))
(deftest url-encode-test
(is (= "AbC" (client/url-encode "AbC")))
(is (= "%3C%3E%21%40%23%24%25%5E"
(client/url-encode "<>!@#$%^"))))