|
| 1 | +(ns mobdap.adapter-test |
| 2 | + (:require |
| 3 | + [clojure.test :refer [deftest is testing]] |
| 4 | + [matcher-combinators.test :refer [match?]] |
| 5 | + [mobdap.adapter :as adapter]) |
| 6 | + (:import |
| 7 | + [java.io BufferedReader StringReader StringWriter])) |
| 8 | + |
| 9 | +(deftest test-parse-content-length! |
| 10 | + (let [parse-content-length! #'adapter/parse-content-length!] |
| 11 | + (testing "parses content length from valid input" |
| 12 | + (let [input "Content-Length: 17\r\n\r\n{\"hello\":\"World\"}" |
| 13 | + reader (BufferedReader/new (StringReader/new input))] |
| 14 | + (is (= 17 (parse-content-length! reader))))) |
| 15 | + (testing "parses content length case insensitively" |
| 16 | + (let [input "content-length: 1337\r\n\r\n" |
| 17 | + reader (BufferedReader/new (StringReader/new input))] |
| 18 | + (is (= 1337 (parse-content-length! reader))))) |
| 19 | + (testing "handles multiple lines before content length" |
| 20 | + (let [input "some-key: some-value\r\nsome-other-key: some-other-value\r\ncontent-length: 1234\r\n\r\n" |
| 21 | + reader (BufferedReader/new (StringReader/new input))] |
| 22 | + (is (= 1234 (parse-content-length! reader))))) |
| 23 | + (testing "skips empty line" |
| 24 | + (let [input "Content-Length: 21\r\n\r\n{\"hello\":\"World\"}" |
| 25 | + reader (BufferedReader/new (StringReader/new input))] |
| 26 | + (parse-content-length! reader) |
| 27 | + (is (= (.readLine reader) "{\"hello\":\"World\"}")))))) |
| 28 | + |
| 29 | +(deftest test-read-message! |
| 30 | + (testing "reads valid json data" |
| 31 | + (let [input "Content-Length: 17\r\n\r\n{\"hello\":\"World\"}" |
| 32 | + r (StringReader/new input) |
| 33 | + adapter (adapter/create-adapter r (StringWriter/new))] |
| 34 | + (is (match? {:hello "World"} (adapter/read-message! adapter)))))) |
| 35 | + |
| 36 | +(deftest test-send-message! |
| 37 | + (testing "sends valid json" |
| 38 | + (let [message {:hello "World"} |
| 39 | + w (StringWriter/new) |
| 40 | + adapter (adapter/create-adapter (StringReader/new "") w)] |
| 41 | + (adapter/send-message! adapter message) |
| 42 | + (let [output (str w)] |
| 43 | + (is (= "Content-Length: 17\r\n\r\n{\"hello\":\"World\"}" output)))))) |
| 44 | + |
0 commit comments