Files
noise/test/noise-sse-test.el
T

60 lines
2.1 KiB
EmacsLisp

;;; noise-sse-test.el --- Tests for SSE client -*- lexical-binding: t; -*-
;;; Commentary:
;; Tests for noise-sse.el SSE event parsing and connection management.
;;; Code:
(require 'ert)
(require 'noise-sse)
(ert-deftest noise-sse--parse-event-basic ()
"Parse a basic SSE event with data field."
(let ((event "data: {\"type\":\"message\",\"content\":\"hello\"}\n\n"))
(let ((result (noise-sse--parse-event event)))
(should (hash-table-p result))
(should (equal (gethash "type" result) "message"))
(should (equal (gethash "content" result) "hello")))))
(ert-deftest noise-sse--parse-event-multiline ()
"Parse SSE event with multiline data."
(let ((event "data: {\"type\":\"message\",\ndata: \"content\":\"hello\"}\n\n"))
(let ((result (noise-sse--parse-event event)))
(should (hash-table-p result))
(should (equal (gethash "type" result) "message")))))
(ert-deftest noise-sse--parse-event-empty ()
"Parse empty SSE event returns nil."
(let ((event "\n\n"))
(should (null (noise-sse--parse-event event)))))
(ert-deftest noise-sse--initial-state ()
"SSE client starts in disconnected state."
(let ((noise-sse--process nil)
(noise-sse--reconnect-timer nil)
(noise-sse--reconnect-delay 1))
(should (null noise-sse--process))
(should (null noise-sse--reconnect-timer))
(should (= 1 noise-sse--reconnect-delay))))
(ert-deftest noise-sse--reconnect-delay-backoff ()
"Reconnect delay doubles on each attempt."
(let ((noise-sse--reconnect-delay 1))
(noise-sse--increase-reconnect-delay)
(should (= 2 noise-sse--reconnect-delay))
(noise-sse--increase-reconnect-delay)
(should (= 4 noise-sse--reconnect-delay))
(noise-sse--increase-reconnect-delay)
(should (= 8 noise-sse--reconnect-delay))))
(ert-deftest noise-sse--reconnect-delay-max ()
"Reconnect delay caps at max value."
(let ((noise-sse--reconnect-delay 32)
(noise-sse-max-reconnect-delay 60))
(noise-sse--increase-reconnect-delay)
(should (= 60 noise-sse--reconnect-delay))))
(provide 'noise-sse-test)
;;; noise-sse-test.el ends here